




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、;题目:编制一个完整的汇编语言程序,从键盘上读入若干个(可以超过十个)十进制数(正数),排序后在屏幕上输出。 ;采用冒泡法排序,综合运用子程序和宏汇编,使程序模块化。 ;程序代码 M_DIRECT MACRO STRING ;定义一个宏,调用09号DOS功能在屏幕上显示一个字符串 MOV DX,OFFSET STRING MOV AH,09 INT 21H ENDM DATA SEGMENT DIR1 DB 'count of numbers to sort:$ ' ;提示输入要排序的数据的个数 DIR2 DB 'please input sorting numbers
2、:$ '提示输入要排序的数据 DIR3 DB 'sorting result:$ ' ;在屏幕上提示排好续的数据 DIR4 DB '*$ ' DIR5 DB 'please choose u(up)ord(down):$ ' DIR6 DB 'input error$ ' COUNT = 100 WTEMP DW ? ARRAY DW COUNT DUP(?) ;用来保存输入的数据 CRLF DB 13,10, '$ ' ;实现回车换行的功能,130DH,回车;100AH,换行 LEN DW ? ;保存实际
3、输入的数据的个数 DATA ENDS ; ; CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA START: PUSH DS SUB AX,AX ;置AX为0 PUSH AX 1 / 7 MOV AX,DATA ;将数据段的地址送到DX中 MOV DS,AX READ: M_DIRECT DIR1 ;宏调用,在屏幕上提示输入要输入的数据的个数 CALL P_GETNEW ;调用子程序P-GETNEW,输入要输入的数据的个数 MOV CX,AX MOV LEN,AX LEA BX,ARRAY MOV AH,09 ;调用09号功能,实现回车换行 L
4、EA DX,CRLF INT 21H ;屏幕提示输入要排序的数据 M_DIRECT DIR2 GETNUMBER: CALL P_GETNEW ;输入数据并保存到ARRAY中 MOV BX,AX ADD BX ,2 LOOP GETNUMBER SORT: MOV CX,LEN ;排序程序部分 DEC CX MOV AH,09H LEA DX,CRLF INT 21H M_DIRECT DIR5 COMPARE:MOV AH,01H INT 21H CMP AL, 'U' ;判断是升序排序还是降序排序 JZ UP ;输入的字符是U或u跳转到升序排序程序 CMP AL, '
5、;u' JZ UP CMP AL, 'D' ;输入的字符是D或d跳转到降叙排序程序 JZ DOWN CMP AL, 'd' JZ DOWN UP: MOV DI,CX ;升序排序程序 MOV BX,0 LOOP1: MOV AX,ARRAYBX CMP AX,ARRAYBX+2 JNGE CONTINUE1 XCHG AX,ARRAYBX+2 MOV ARRAYBX,AX CONTINUE1: ADD BX,2 LOOP LOOP1 MOV CX,DI LOOP UP JMP OUTPUT ;排序完后跳转到输出程序部分 DOWN: MOV DI,CX ;
6、降序排序程序 MOV BX,0 LOOP2: MOV AX,ARRAYBX CMP AX,ARRAYBX+2 JGE CONTINUE2 XCHG AX,ARRAYBX+2 MOV ARRAYBX,AX CONTINUE2: ADD BX,2 LOOP LOOP2 MOV CX,DI LOOP DOWN JMP OUTPUT ;排序完后跳转到输出程序部分 OUTPUT: MOV AH,09 ;回车换行 LEA DX,CRLF INT 21H M_DIRECT DIR3 MOV CX,LEN ;为输出程序设置好入口参数 MOV BX,OFFSET ARRAY WRITE: MOV AX,BX ;
7、输出排好序的数据 MOV WTEMP,AX ;将入口参数存放到共享变量中 CALL P_OUTPUT ADD BX,2 MOV DL,20H ;显示空格,将两个输出的数据分开 MOV AH,02H INT 21H LOOP WRITE MOV AH,09 ;隔离两次输入排序输出的作用 LEA DX,CRLF INT 21H M_DIRECT DIR4 MOV AH,09 ;实现循环输入数据并排序输出 LEA DX,CRLF INT 21H LOOP READ RET MAIN ENDP ; ;从键盘上输入一个数据的子程序 ; P_GETNEW PROC PUSH BX ;出口参数:AX=补码表
8、示的二进制数 PUSH CX ;说明:负数用“-”引导,数据范围是+32767-32768 PUSH DX XOR BX,BX ;BX保存结果 XOR CX,CX ;CX为正负标志,0为正,-1为负 MOV AH,1 ;输入一个字符 INT 21H CMP AL, '+' ;是“+”,继续输入字符 JZ READ1 CMP AL, '-' ;是“,设置-1标志 JNZ READ2 MOV CX,-1 READ1: MOV AH,1 ;继续输入字符 INT 21H READ2: CMP AL, '0' ;不是09之间的字符,则输入数据结束 JB R
9、EAD3 CMP AL, '9' JA READ3 SUB AL,30H ;是09之间的字符,则转换为二进制数 ;利用移位指令,实现数值乘10:BXBX*10 SHL BX,1 MOV DX,BX SHL BX,1 SHL BX,1 ADD BX,DX MOV AH,0 ADD BX,AX ;已输入数值乘10后,与新输入的数值相加 JMP READ1 ;继续输入字符 READ3: CMP CX,0 ;是负数,进行求补 JZ READ4 NEG BX READ4: MOV AX,BX ;设置出口参数 POP DX POP CX POP BX RET ;子程序返回 P_GETNEW
10、 ENDP ; ;用冒泡法排序的子程序(从大到小) ; ;P_SORT PROC ;RET ;子程序返回 ;P_SORT ENDP ; ;数据输出子程序 ; P_OUTPUT PROC PUSH AX ;入口参数:共享变量WTEMP PUSH BX PUSH DX MOV AX,WTEMP ;取出显示的数据 TEST AX,AX ;判断数据是零、正书还是负数 JNZ WRITE1 MOV DL, '0' ;是0,显示0后退出 MOV AH,2 INT 21H JMP WRITE5 WRITE1: JNS WRITE2 ;是负数,显示“-” MOV BX,AX ;AX数据暂存于BX MOV DL, '-' MOV AH,2 INT 21H MOV AX,BX NEG AX ;数据求补(绝对值) WRITE2: MOV BX,10 PUSH BX ;10压入堆栈,做为推退出标志 WRITE3: CMP AX,0 ;数据(商)为零,转向显示 JZ WRITE4 SUB DX,DX ;扩展被除数DX.AX DIV BX ;数据除以10 ADD DL,30H ;余数(09)转换为ASC码 PUSH DX ;数据各位先低位后高位压入堆栈 JMP WRITE3 WRITE4: POP DX ;数据各位先高位后低位弹出堆栈
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工程项目管理行业规范试题及答案
- 农场生产物资供应协议
- 工程项目管理经验反馈试题及答案
- 综合复习2025年工程经济试题及答案
- 变压器购买合同书
- 2025年项目融资方案试题及答案
- 绿色仓储实践与未来发展计划
- 产品生命周期管理的年度设计计划
- 2025年项目管理考试通知解读试题及答案
- 2025年工程项目管理多方合作试题及答案
- 9岁孩子枪械知识课件
- 美甲师考试题及答案
- 2025-2030中国母乳低聚糖(HMO)行业发展形势与未来前景展望研究报告
- 面向区块链的数据分析系统的设计与实现
- 2025年飞盘标准教案范文
- 职业培训学校职业技能培训发展规划范文
- 石材加工安全
- 科技企业如何构建有效的ESG战略框架
- 短暂性脑缺血发作的护理课件
- 2025年江苏武进经济发展集团招聘笔试参考题库含答案解析
- 2024年江苏省无锡市中考英语试卷
评论
0/150
提交评论