汇编语言-冒泡排序
org 0000h
ljmp main
org 0050h
main:
len data 20h ;数组长度初始化
block data 21h ;数组起始地址初始化
mov r2,len
dec r2 ;若不加此句则下面循环体需要用cjne r2,#1,loop1
loop1:
mov r0,#block ;在每次剩余里面最大数送到最高位后r0始终指向数组第一个数
mov r1,#(block+1) ;在每次剩余里面最大数送到最高位后r1始终指向数组第二个数
mov a,r2 ;r2内容传送给r3表示loop2循环次数即未排序元素数
mov r3,a
loop2:
lcall Judge ;调用Judge子程序对相邻两个数大小判断
;若((r0))>((r1))则交换否侧保持不变
inc r0 ;指向数组下一个元素
inc r1 ;指向数组下一个相邻的元素
djnz r3,loop2
djnz r2,loop1
sjmp $ ;可去掉
Judge: ;若((r0))>((r1))则交换((r0))和((r1));否则保持不变
;目的使((r0))和((r1))保持升序
clr c
mov a,@r0
subb a,@r1 ;利用减法和进位标志位判断大,也可用cjne和cy位
jnc updata ;c=0表示((r0))>((r1))则跳转到updata进行交换
ret ;子程序返回指令
updata:
mov a,@r0
xch a,@r1 ;实现指针指向的单元内容交换
mov @r0,a
ret ;子程序返回指令
end