汇编冒泡排序(51)(需调试器付初值)
NumEQU31H;定义临时次数变量(也可理解为总数据变量)
本文引用地址:https://www.eepw.com.cn/article/201611/315819.htmORG0000H
LCALLSTART;跳转到排序算法
SJMP$;如果排序完成,在此循环
START:MOVR0,#50H;把地址0050h付给R0中
MOVNum,#4;所有数据个数放在Num中
CLRF0;用户可以使用的标志位清零(交换数据标志)
DECNum;减1
MOVA,@R0;把其中的数送到A中
LOOP:MOVR2,A;把低字节地址中的数付给R2
INCR0;地址加一
CLRC;进位标志位清零
MOVA,@R0;把高字节地址中的数付给A
SUBBA,R2;带进位相减指令
JNCLOOP1;如果没有借位,则高字节中比低字节中数据大,不用排,跳转到loop1
;如果借位,下面是交换数据代码
SETBF0;用户可以使用的标志位置1
MOVA,R2
XCHA,@R0;把低字节数送到高字节地址中
DECR0;地址减1,到低字节地址中
XCHA,@R0;把高字节中的数送到低字节地址中
INCR0;在把地址重新加一
LOOP1:MOVA,@R0
DJNZNum,LOOP;重新进入下次循环(跳出时,实现一次冒泡)
JBF0,START;循环进行冒泡,如果交换标志一直为0,则排序完成,结束
RET
END
评论