📄 sort_s.asm
字号:
org 0000h
jmp 40h
org 40h
mov r7,#3;控制双字节数个数
mov r0,#40h
;***********************************************************************************
;子程序:SORT_S
;功能:实现双字节无符号数据块排序(增序)
;入口条件:数据块的首址在R0中,字节数在R7中
;出口信息:完成排序(增序)
;说明:SORT代表排序,S代表双字节
;***********************************************************************************
;程序思想是依次找出最大的放到最高位
SORT_S:
dec r7
mov a,r7 ;控制外层循环的次数
mov r3,a ;r3保存外层循环比较次数
mov a,r0
mov r1,a ;R1存放R0值,比较的基准位置,便于外层循环的进行
outloop: ;外层循环
mov a,r7
mov r3,a ;控制内层循环的次数
mov a,r1
mov r0,a ;始终保持每次外层循环的开始为第一个数
inloop:clr c
mov a,@r0 ;内层循环开始
mov r2,a ;暂存比较的第一个数的高字节
inc r0
inc r0
subb a,@r0 ;和第二个数的高字节比较
orl a,#00h
jz equl1
;jz a,#0,equl1 ;高字节相等
jnc high1 ;前面的大于后面的
jc low1 ;前面的小于后面的 bug
high1: mov a,r2 ;高字节前面的大于后面的,则交换
xch a,@r0
dec r0
dec r0
mov @r0,a ;高字节交换,将小的放到前面
inc r0
mov a,@r0 ;待交换的第一个数的低字节
inc r0
inc r0 ;此时r0为待交换的第二个数的低字节的地址
xch a,@r0
dec r0
dec r0
mov @r0,a ;低字节放回
inc r0 ;程序执行把大树放在后面
djnz r3,inloop
djnz r7,outloop
jmp $
ret
equl1: dec r0 ;高字节相等,需比较低字节,第二个数的高字节地址减一得
;第一个数的低字节地址
mov a,@r0
mov r2,a ;前面数的低字节
inc r0
inc r0 ;此时r0为第二数的低字节地址
; clr c
subb a,@r0
jnc high2
jc low2
jmp $
ret
high2: mov a,r2 ;低字节比较时前面的大
xch a,@r0
dec r0
dec r0
mov @r0,a
inc r0 ;程序执行把大树放在后面
djnz r3,inloop
djnz r7,outloop
ret
low2: dec r0
djnz r3,inloop
djnz r7,outloop
ret
low1: djnz r3,inloop
djnz r7,outloop
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -