设在外部数据存储器2040H开始的单元中存放100个单字节无符号数,

设在外部数据存储器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: