微机原理与接口技术--实验三 数据比较及排序程序

北京XX大学

实验报告

课程(项目)名称 :实验三数据比较及排序程序学院:专业:

班级:学号:

姓名:成绩:

2013年 12月 10 日

一、任务与目的

1. 实验任务:

(1) 熟悉和掌握数据比较指令的用法;

(2) 掌握多字节有符号数及无符号数排序程序的编写方法。

2. 实验目的

(1). 掌握数据比较指令的使用方法;

(2) 熟悉数据排序实现的基本方法。

二、原理(条件)

1.相关知识:

(1) 数据比较指令的使用方法;

(2) 8086/8088汇编程序数据排序的基本算法。

2.实验条件:

MASM汇编程序及TD调试软件。

三、内容步骤

1.启动TD(Turbo Debugger)输入程序段,观察执行情况、标志位变化并分析

结果:

(1) MOV AX,0FF80H

MOV BX,2C76H

CMP AX, BX

JAE ABOVE ;注意ABOVE由具体地址替代,下同。 XCHG AX,BX

ABOVE:HLT

(2) MOV AX,0FF80H MOV BX,2C76H

CMP AX,BX

JLE ABOVE

JMP STOP ABOVE: XCHG AX,BX

STOP: HLT

v1.0 可编辑可修改

2.编写10个双字节(字)无符号及

从小到大排序程序,观察执行情况并分

析结果:利用MASM宏汇编程序及

TD程序进行调试。

无符号数排序参考程序如下,请

在参考程序之上改写。

DSEG SEGMENT

BUFFER DW 0AAFEH,3768H,

5CD9H,2227H,0BDC1H,725AH,0C236H

66FFH,0E23H,8577H

DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG

START: MOV AX,DSEG

MOV DS,AX

LEA DI, BUFFER

MOV BL,9

NEXT1:MOV SI,DI

MOV CL,BL

NEXT2:MOV AX,[SI]

INC SI

INC SI

CMP AX,[SI]

J NEXT3 ;小于则不交换

MOV DX,[SI]

MOV [SI-2],DX

MOV [SI],AX

NEXT3:DEC CL

JNZ NEXT2

DEC BL

JNZ NEXT1

MOV AH,4CH

INT 21H

CSEG ENDS

END START

实现代码:DSEG SEGMENT

BUFFER DW 0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H DW 66FFH,0E23H,8577H

DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG

START: MOV AX,DSEG

MOV DS,AX

LEA DI, BUFFER

MOV BL,9

NEXT1:MOV SI,DI

MOV CL,BL

NEXT2:MOV AX,[SI]

INC SI

INC SI

CMP AX,[SI]

JB NEXT3 ;小于则不交换 MOV DX,[SI]

MOV [SI-2],DX

MOV [SI],AX

NEXT3:DEC CL

JNZ NEXT2

DEC BL

JNZ NEXT1

MOV AH,4CH

INT 21H

CSEG ENDS

END START

实现结果如图:

3.编写10个双字节(字)有符号及从小到大排序程序,观察执行情况并分析结果。

DSEG SEGMENT

BUFFER DW 0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H,

DW 66FFH,0E23H,8577H

DSEG

ENDS

实现结果如图:

实现代码:

DSEG SEGMENT

BUFFER DW 0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H DW 66FFH,0E23H,8577H

DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG

START: MOV AX,DSEG

MOV DS,AX

LEA DI, BUFFER

MOV BL,9

NEXT1:MOV SI,DI

MOV CL,BL

NEXT2:MOV AX,[SI]

INC SI

INC SI

CMP AX,[SI]

JL NEXT3

MOV DX,[SI]

MOV [SI-2],DX

MOV [SI],AX

NEXT3:DEC CL

JNZ NEXT2

DEC BL

JNZ NEXT1

MOV AH,4CH

INT 21H

CSEG ENDS

END START

四、结论

通过实验进一步了解了数据比较指令CMP的用法和数据排序程序的原理和编写方法,并且通过对实验现象和实验结果的观察并结合课本得出如下结论:

1.比较指令CMP是用目标操作数减原操作数,但相减的结果不送回目标操作数即指令执行后两操作数内容不变,而只是影响6个状态标志位。

JBE用于比较无符号数; JL/JLE用于比较有符号数。

3.数据排序的基本原理:无符号数比较可以直接用比较指令CMP和条件转移指令JB 来实现,有符号数比较可以用比较指令CMP和条件转移指令JL来实现,而数据的排序可由

双重循环实现,以有符号数的比较为例,先使第一个数与下一个数比较,若小于则使其位置保持不变,大于则两数交换位置,此为内循环即:

NEXT2:MOV AX,[SI]

INC SI

INC SI

CMP AX,[SI]

JB NEXT3 ;小于则不交换

MOV DX,[SI]

MOV [SI-2],DX

MOV [SI],AX ;每执行一遍NEXT2,就将最大数放到高位以上完成一次排序工作,在通过第二重的9次循环,即可实现对10个数据的小到大排序。

五、参考资料

《微型计算机原理与接口技术》实验指导书

六、评语

相关文档
最新文档