⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sort_s.asm

📁 这是我最近写的一些单片机的简单的模块
💻 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 + -