汇编课程设计排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言实验报告
学院名称:计算机科学与技术学院题目:汇编语言实现数组排序
专业班级:信息安全111
姓名:王丹
学号:1108060090
指导老师:王晓鹏
一、课程设计的性质和目的:
通过课程设计,进行程设计方法和技能的基本训练,巩固在课堂上学到的有关软件程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
二、课程设计的要求:
1、遵循模块化、结构化的程序设计方法。
2、要求程序必须正确。
3、程序简明易懂,多运用输入输出提示,有出错信息及必要的注释。
4、要求程序结构合理,语句使用得当。
5、适当追求编程技巧和程序运行效率。
三、主要仪器设备及软件:
PC机、MASM汇编软件。
四、课程设计题目及要求:
题目:汇编数组排序(选用冒泡排序算法)
五、课题分析及设计思路:
冒泡排序:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2
个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两
个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
冒泡排序可分为正向和逆向两种排序.通过主程序对子程序的调用来
完成输入输出,排序,循环,转化等功能。
六、程序主要流程图:
冒泡排序法实现整数排序
一、实验目的
掌握用汇编语言实现排序,选用冒泡排序算法。
二、实验内容
输入20个以内的不超过0-99的整数,进行排序后输出结果。
三、源程序
DATA SEGMENT
NOTE1 DB 0DH,0AH,'==================================================================',0D H,0AH
DB 'Please input 20 (or less) numbers (0~99):',0DH,0AH,'$'
NOTE2 DB 0DH,0AH,'==================================================================',0D H,0AH
DB 0DH,0AH,'The inputed numbers: ','$'
NOTE3 DB 0DH,0AH,'==================================================================',0D H,0AH
DB 0DH,0AH,'How many decimal integers? $'
NOTE4 DB 0DH,0AH,'The sorted result: ',0DH,0AH,'$'
ERR_STR DB 0DH,0AH,'******************************************************************',0DH,0AH
DB 'Input error!',0DH,0AH
CON_STR DB 0DH,0AH,'******************************************************************',0DH,0AH
DB 0DH,0AH,'Continue? Y or N?','$'
DEC_STR DB 200 ;用来存放输入的原始数据
DB ?
DB 150 DUP('$')
TOTAL DB 3 DUP('$') ;用来记录输入的数字个数
DEC_NUM DW 30 DUP(?) ;用来存放将输入的ASCII 码转换成2进制数以便比较的结果
OUT_STR DB 150 DUP('$') ;存放待输出的字符组信
息
DATA ENDS
STACK SEGMENT STACK
STT DB 100 DUP(?) ;堆栈STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DA TA,SS:STACK
START: MOV AX,STACK
MOV SS,AX
MOV AX,DA TA
MOV DS,AX
;---------------------------------- 输出提示信息
DISP0: LEA DX,NOTE1
MOV AH,09H
INT 21H
LEA DX,DEC_STR ;将原始数据存入该空间
MOV AH,0AH
INT 21H
MOV AL,BYTE PTR[DEC_STR+2] ;输入合法性的标志:开头是数字或者符号
CMP AL,'0'
JAE CMP1
CMP AL,'+'
JE DISP2
CMP AL,'-'
JE DISP2
JMP DISP1
CMP1: CMP AL,'9'
JBE DISP2
DISP1: LEA DX,ERR_STR
MOV AH,09H
INT 21H
CON_YN: MOV AH,01H ;程序结束处询问是否需要继续
INT 21H
CMP AL,'Y'
JE DISP0