微机原理与接口技术实验三 数据比较及排序程序.docx
《微机原理与接口技术实验三 数据比较及排序程序.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验三 数据比较及排序程序.docx(9页珍藏版)》请在冰点文库上搜索。
微机原理与接口技术实验三数据比较及排序程序
XX大学
实验报告
课程(项目)名称:
实验三数据比较及排序程序
学院:
专业:
班级:
学号:
姓名:
成绩:
2013年12月10日
一、任务与目的
1.实验任务:
(1)熟悉和掌握数据比较指令的用法;
(2)掌握多字节有符号数及无符号数排序程序的编写方法。
2.实验目的
(1).掌握数据比较指令的使用方法;
(2)熟悉数据排序实现的基本方法。
二、原理(条件)
1.相关知识:
(1)数据比较指令的使用方法;
(2)8086/8088汇编程序数据排序的基本算法。
2.实验条件:
MASM汇编程序及TD调试软件。
三、容步骤
1.启动TD(TurboDebugger)输入程序段,观察执行情况、标志位变化并分析
结果:
(1)MOVAX,0FF80H
MOVBX,2C76H
CMPAX,BX
JAEABOVE;注意ABOVE由具体地址替代,下同。
XCHGAX,BX
ABOVE:
HLT
(2)MOVAX,0FF80H
MOVBX,2C76H
CMPAX,BX
JLEABOVE
JMPSTOP
ABOVE:
XCHGAX,BX
STOP:
HLT
2.编写10个双字节(字)无符号及从小到大排序程序,观察执行情况并分
析结果:
利用MASM宏汇编程序及TD程序进行调试。
无符号数排序参考程序如下,请在参考程序之上改写。
DSEGSEGMENT
BUFFERDW0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H66FFH,0E23H,8577H
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
LEADI,BUFFER
MOVBL,9
NEXT1:
MOVSI,DI
MOVCL,BL
NEXT2:
MOVAX,[SI]
INCSI
INCSI
CMPAX,[SI]
JNEXT3;小于则不交换
MOVDX,[SI]
MOV[SI-2],DX
MOV[SI],AX
NEXT3:
DECCL
JNZNEXT2
DECBL
JNZNEXT1
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
实现代码:
DSEGSEGMENT
BUFFERDW0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H
DW66FFH,0E23H,8577H
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
LEADI,BUFFER
MOVBL,9
NEXT1:
MOVSI,DI
MOVCL,BL
NEXT2:
MOVAX,[SI]
INCSI
INCSI
CMPAX,[SI]
NEXT3;小于则不交换
MOVDX,[SI]
MOV[SI-2],DX
MOV[SI],AX
NEXT3:
DECCL
JNZNEXT2
DECBL
JNZNEXT1
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
实现结果如图:
3.编写10个双字节(字)有符号及从小到大排序程序,观察执行情况并分
析结果。
DSEGSEGMENT
BUFFERDW0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H,
DW66FFH,0E23H,8577H
DSEG
ENDS
实现结果如图:
实现代码:
DSEGSEGMENT
BUFFERDW0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H
DW66FFH,0E23H,8577H
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
LEADI,BUFFER
MOVBL,9
NEXT1:
MOVSI,DI
MOVCL,BL
NEXT2:
MOVAX,[SI]
INCSI
INCSI
CMPAX,[SI]
JLNEXT3
MOVDX,[SI]
MOV[SI-2],DX
MOV[SI],AX
NEXT3:
DECCL
JNZNEXT2
DECBL
JNZNEXT1
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
四、结论
通过实验进一步了解了数据比较指令CMP的用法和数据排序程序的原理和编写方法,并且通过对实验现象和实验结果的观察并结合课本得出如下结论:
1.比较指令CMP是用目标操作数减原操作数,但相减的结果不送回目标操作数即指令执行后两操作数容不变,而只是影响6个状态标志位。
2./E用于比较无符号数;JL/JLE用于比较有符号数。
3.数据排序的基本原理:
无符号数比较可以直接用比较指令CMP和条件转移指令来实现,有符号数比较可以用比较指令CMP和条件转移指令JL来实现,而数据的排序可由双重循环实现,以有符号数的比较为例,先使第一个数与下一个数比较,若小于则使其位置保持不变,大于则两数交换位置,此为循环即:
NEXT2:
MOVAX,[SI]
INCSI
INCSI
CMPAX,[SI]
NEXT3;小于则不交换
MOVDX,[SI]
MOV[SI-2],DX
MOV[SI],AX;每执行一遍NEXT2,就将最大数放到高位
以上完成一次排序工作,在通过第二重的9次循环,即可实现对10个数据的小到大排序。
五、参考资料
《微型计算机原理与接口技术》实验指导书
六、评语