匯編冒泡排序(51)(需調試器付初值)
NumEQU31H;定義臨時次數(shù)變量(也可理解為總數(shù)據變量)
本文引用地址:http://2s4d.com/article/201611/315819.htmORG0000H
LCALLSTART;跳轉到排序算法
SJMP$;如果排序完成,在此循環(huán)
START:MOVR0,#50H;把地址0050h付給R0中
MOVNum,#4;所有數(shù)據個數(shù)放在Num中
CLRF0;用戶可以使用的標志位清零(交換數(shù)據標志)
DECNum;減1
MOVA,@R0;把其中的數(shù)送到A中
LOOP:MOVR2,A;把低字節(jié)地址中的數(shù)付給R2
INCR0;地址加一
CLRC;進位標志位清零
MOVA,@R0;把高字節(jié)地址中的數(shù)付給A
SUBBA,R2;帶進位相減指令
JNCLOOP1;如果沒有借位,則高字節(jié)中比低字節(jié)中數(shù)據大,不用排,跳轉到loop1
;如果借位,下面是交換數(shù)據代碼
SETBF0;用戶可以使用的標志位置1
MOVA,R2
XCHA,@R0;把低字節(jié)數(shù)送到高字節(jié)地址中
DECR0;地址減1,到低字節(jié)地址中
XCHA,@R0;把高字節(jié)中的數(shù)送到低字節(jié)地址中
INCR0;在把地址重新加一
LOOP1:MOVA,@R0
DJNZNum,LOOP;重新進入下次循環(huán)(跳出時,實現(xiàn)一次冒泡)
JBF0,START;循環(huán)進行冒泡,如果交換標志一直為0,則排序完成,結束
RET
END
評論