51单片机常考编程题

如题所述

ORG 0000H
MOV DPTR, #0100H
MOV R0, #30H
LOOP:
MOVX A, @DPTR
MOV @R0, A
INC R0
INC DPTR
DJNZ R7, LOOP
MOV 44H, #29H
MOV 45H, #0AFH
CALL SORT ; 调用排序子程序
SJMP $ ; 程序结束
SORT:
MOV R6, #19 ; 共有20个数字,需要比较19次
S1:
MOV R0, #30H ; 设置起始地址
MOV B, R6
MOV R7, B
CLR PSW.5 ; 清零交换标志位
S2:
MOV B, @R0 ; 取出前一个数
INC R0
MOV A, @R0 ; 取出后一个数
CJNE A, B, S3 ; 如果后一个数不小于前一个数,跳转到S3
JC N_JH ; 如果发生借位,则不需要交换
MOV @R0, B ; 交换前后两个数
DEC R0
MOV @R0, A
INC R0
SETB PSW.5 ; 设置交换标志位
N_JH:
DJNZ R7, S2
JNB PSW.5, S_END ; 如果未发生交换,则结束排序
DJNZ R6, S1
S_END:
RET ; 返回主程序
注:本程序未经过试验。部分程序参考自“做而论道的空间”。
温馨提示:答案为网友推荐,仅供参考