单片机实验数据排序

单片机实验数据排序,第1张

原发布者:瀚海湛蓝

实验一、数据排序实验一、实验目的熟悉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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12540310.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存