
实验一、数据排序实验一、实验目的熟悉8031指令系统,掌握程序设计方法。二、实验内容编凯咐写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。三、实验程序框图NNN四、实验步骤1把8032片内RAM区50H—5AH中放入不等的数据(用寄存器读写方法空轿)。2用连续运行方式从起始地址0100H开始运行程序(输入0100后按EXEC键)。3排序结束,显示“P.”。4用寄存器读写方法检查50—5AH中内容应从小到大排列。五、参考程序DORDE:MOVSP,#60H设置栈指针MOVR3,#50HDORDE1:MOVA,R3MOVR0,A数据指针传送到R0MOVR7,#0AH长度送到R7CLR00H清零标志斗孙肆位MOVA,@R0DORDE2:INCR0MOVR2,ACLRC清零进位标志MOV22H,@R0CJNEA,22H,DORDE3是否相等SETBCDORDE3:MOVA,R2JCDORDE4小于或等于不交换SETB00HXCHA,@R0DECR0XCHA,@R0大于交换位置INCR0DORDE4:MOVA,@R0DJNZR7,DORDE2JB00H,DORDE1未完继续MOVR0,#7EH完,关显示器前三位MOVA,#0FFHMOVR4,#06HDORDE5:MOV@RO,ADECR0DJNZR4,DORDE5MOV7EH,#0CH
将数据段穗握DATA开始的16个数排序,前小后大,程序示例如下:DATAS SEGMENT
arr DB 74,68,58,66,69,254,186,6,10,98,34,90,128,222,33,0
COUNT DB 10
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
MOV BL,1 用BL来检验是否排序完成,减少循环次数
LOOP1:
CMP BL,0
JE CMPEND 若相等则跳转
XOR BL,BL 将BL清零
MOV CL,COUNT COUNT用于外层的计数
DEC CL CL减一,CL用于内层的计数
PUSH CX将CX压入堆栈
LEA DI,arr将数据段首地址赋值亩州给DI
LOOP2:
MOV AL,[DI]
CMP AL,[DI+1] 将前一个数与后一个数比较
JLE LOOP3 若前一个数小于或等于后一个数,则跳转到LOOP3
XCHG [DI+1],AL前者大于后者,则交换两数
MOV [DI],AL 如果前一个数字大于后一个数字,则交换
MOV BL,1
LOOP3:
INC DI指针加一
LOOP LOOP2循环L00P2,直到CX==0成立
POP CX将CX从堆栈中d出
MOV COUNT,CL 改变外层迅族蔽计数器的值
JMP LOOP1
CMPEND:
MOV AH,4CH 带返回码结束功能
INT 21H返回系统
CODES ENDS
END START
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)