Num EQU 31H ;定义临时次数变量(也可理解为总数据变量)
ORG 0000H
LCALL START ;跳转到排序算法
SJMP $ ;如果排序完成,在此循环
START:MOV R0,#50H;把地址0050h付给R0中
MOV Num,#4 ;所有数据个数放在Num中
CLR F0 ;用户可以使用的标志位清零(交换数据标志)
DEC Num ;减1
MOV A,@R0 ;把其中的数送到A中
LOOP: MOV R2,A ;把低字节地址中的数付给R2
INC R0 ;地址加一
CLR C ;进位标志位清零
MOV A,@R0 ;把高字节地址中的数付给A
SUBB A,R2 ;带进位相减指令
JNC LOOP1 ;如果没有借位,则高字节中比低字节中数据大,不用排,跳转到loop1
;如果借位,下面是交换数据代码
SETB F0 ;用户可以使用的标志位置1
MOV A,R2
XCH A,@R0 ;把低字节数送到高字节地址中
DEC R0 ;地址减1,到低字节地址中
XCH A,@R0 ;把高字节中的数送到低字节地址中
INC R0 ;在把地址重新加一
LOOP1:MOV A,@R0
DJNZ Num,LOOP ;重新进入下次循环(跳出时,实现一次冒泡)
JB F0,START ;循环进行冒泡,如果交换标志一直为0,则排序完成,结束
RET
END
上一篇:单片机 电子时钟(汇编)
下一篇:c51中嵌套汇编的方法
推荐阅读最新更新时间:2024-03-16 15:09