1、微机原理与接口技术实验三 数据比较及排序程序XX大学实验报告课程(项目)名称 :实验三 数据比较及排序程序 学 院: 专 业:班 级:学 号:姓 名:成 绩:2013年 12月 10 日一、任务与目的1. 实验任务:(1) 熟悉和掌握数据比较指令的用法;(2) 掌握多字节有符号数及无符号数排序程序的编写方法。2. 实验目的(1). 掌握数据比较指令的使用方法;(2) 熟悉数据排序实现的基本方法。二、原理(条件)1.相关知识:(1) 数据比较指令的使用方法;(2) 8086/8088汇编程序数据排序的基本算法。2.实验条件:MASM汇编程序及TD调试软件。三、容步骤1启动TD(Turbo Deb
2、ugger)输入程序段,观察执行情况、标志位变化并分析结果:(1) MOV AX,0FF80H MOV BX,2C76H CMP AX, BX JAE ABOVE ;注意ABOVE由具体地址替代,下同。 XCHG AX,BXABOVE:HLT (2) MOV AX,0FF80H MOV BX,2C76H CMP AX,BXJLE ABOVE JMP STOPABOVE: XCHG AX,BXSTOP: HLT2编写10个双字节(字)无符号及从小到大排序程序,观察执行情况并分析结果:利用MASM宏汇编程序及TD程序进行调试。无符号数排序参考程序如下,请在参考程序之上改写。DSEG SEGMENT
3、BUFFERDW0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H 66FFH,0E23H,8577HDSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEG MOV DS,AX LEA DI, BUFFER MOV BL,9 NEXT1:MOV SI,DI MOV CL,BLNEXT2:MOV AX,SI INC SI INC SI CMP AX,SI J NEXT3 ;小于则不交换MOV DX,SI MOV SI-2,DX MOV SI,AXNEXT3:DEC CL JNZ NEXT2
4、DEC BL JNZ NEXT1 MOV AH,4CH INT 21H CSEG ENDS END START实现代码:DSEG SEGMENTBUFFER DW 0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236HDW 66FFH,0E23H,8577HDSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEG MOV DS,AXLEA DI, BUFFER MOV BL,9 NEXT1:MOV SI,DI MOV CL,BLNEXT2:MOV AX,SI INC SI INC SI CMP
5、AX,SI NEXT3 ;小于则不交换 MOV DX,SI MOV SI-2,DX MOV SI,AXNEXT3:DEC CL JNZ NEXT2 DEC BL JNZ NEXT1 MOV AH,4CH INT 21H CSEG ENDS END START实现结果如图:3编写10个双字节(字)有符号及从小到大排序程序,观察执行情况并分析结果。DSEG SEGMENTBUFFER DW 0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H,DW 66FFH,0E23H,8577HDSEGENDS实现结果如图:实现代码:DSEG SEGMENTBUFFER D
6、W 0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236HDW 66FFH,0E23H,8577HDSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEG MOV DS,AX LEA DI, BUFFER MOV BL,9 NEXT1:MOV SI,DI MOV CL,BLNEXT2:MOV AX,SI INC SI INC SI CMP AX,SI JL NEXT3 MOV DX,SI MOV SI-2,DX MOV SI,AXNEXT3:DEC CL JNZ NEXT2 DEC BL JNZ
7、 NEXT1 MOV AH,4CH INT 21H CSEG ENDS END START四、结论通过实验进一步了解了数据比较指令CMP的用法和数据排序程序的原理和编写方法,并且通过对实验现象和实验结果的观察并结合课本得出如下结论:1.比较指令CMP是用目标操作数减原操作数,但相减的结果不送回目标操作数即指令执行后两操作数容不变,而只是影响6个状态标志位。2./E用于比较无符号数; JL/JLE用于比较有符号数。3.数据排序的基本原理: 无符号数比较可以直接用比较指令CMP和条件转移指令来实现,有符号数比较可以用比较指令CMP和条件转移指令JL来实现,而数据的排序可由双重循环实现,以有符号数的比较为例,先使第一个数与下一个数比较,若小于则使其位置保持不变,大于则两数交换位置,此为循环即:NEXT2:MOV AX,SI INC SI INC SI CMP AX,SI NEXT3 ;小于则不交换 MOV DX,SI MOV SI-2,DX MOV SI,AX ;每执行一遍NEXT2,就将最大数放到高位以上完成一次排序工作,在通过第二重的9次循环,即可实现对10个数据的小到大排序。五、参考资料微型计算机原理与接口技术实验指导书六、评语