设在外部数据存储器2040H开始的单元中存放100个单字节无符号数,试编写程序找出关键字05H的第一个存放地址,并送入片外数据存储器2020H、2021单元中,若05H不存在,则将片外RAM2020H、2021清零;统计100个数据中小于05H,等于05H及大于05H的个数,送入片外数据存储器2022H、2023H、2024H中。
MOV R0,#2040H ; 从2040H开始查找
MOV R1,#2020H ; 将查找结果送入2020H
MOV R2,#0 ; 小于05H的个数
MOV R3,#0 ; 等于05H的个数
MOV R4,#0 ; 大于05H的个数
MOV R5,#100 ;查找100次
FIND_05:
MOV A,@R0 ; 读取单元数
CJNE A,#05H,SUM_DIFF ; 判断单元数是否等于05H
JZ SUM_EQ ; 若等于,转去SUM_EQ
SUM_DIFF:
CJNE A,#05H,SUM_GT ; 判断单元数是否大于05H
JNC SUM_LT ; 若小于,转去SUM_LT
SUM_GT:
INC R4 ; 大于05H则计数器加1
JMP NEXT ; 转去NEXT
SUM_EQ:
INC R3 ; 等于05H则计数器加1
MOV @R1,R0 ; 将此时的地址存入2020H
JMP NEXT ; 转去NEXT
SUM_LT:
INC R2 ; 小于05H则计数器加1
NEXT:
INC R0 ; R0自加1
DJNZ R5,FIND_05 ; R5自减1,判断是否完成100次查找
MOV @R1,R2 ; 将查找结果送入2022H
INC R1 ; R1自加1
MOV @R1,R3 ; 将查找结果送入2023H
INC R1 ; R1自加1
MOV @R1,R4 ; 将查找结果送入2024H
SJMP END ; 跳转到END处
END: