请各位帮忙分析一下这段汇编程序,描述一下功能,不胜感激!

2025-02-27 17:15:34
推荐回答(2个)
回答1:

分析如下,有问题请追问。这个程序的主要功能就是完成求4574H+6728H之和,结果高位放在20H、地位放在21H,进位位放在1FH。
ORG 0000H
LJMP MAIN
ORG 1000H ;指定以下代码的存储起始地址
MAIN:MOV SP,#60H ;定义堆栈指针
MOV 81H,#50H ;给81H寄存器赋初值
MOV R0,#20H
MOV @R0,#45H ;间接寻址,把立即数45H存放到R0所指向的存储单元(地址为20H)
INC R0 ;R0指向下一个
MOV @R0,#74H ;间接寻址,把立即数74H存放到R0所指向的存储单元(地址为21H)
MOV R1,#30H
MOV @R1,#67H ;间接寻址,把立即数67H存放到R1所指向的存储单元(地址为30H)
INC R1
MOV @R1,#28H
CLR C ;进位标志清零
MOV R2,#02H ;循环次数
L2:ACALL L1 ;调用子程序L1,
;L1的功能:R0所指向的存储单元的值与R1所指向的存储单元的值相加,结果放在R0所指向的存储单元
DEC R0
DEC R1
DJNZ R2,L2 ;循环次数为不为零,则继续循环
CLR A ;清累加器A
MOV ACC.0,C ;把进位标志赋给累加器A的最低位
NOP ;空操作
MOV @R0,A ;把结果存放到R0所指的存储单元
L3:SJMP L3 ;最后,进入死循环
L1:MOV A,@R0 ;R0所指向的存储单元的值赋给累加器A
ADDC A,@R1 ;然后与R1所指向的存储单元的值相加,结果赋给累加器A
DA A ;对结果做BCD码调整
MOV @R0,A ;将结果存放在R0所指的存储单元
RET ;子程序返回
END

回答2:

R0,是指针,指向20H地址;该地址存进数4574H;(低位在高地址)
R1,是指针,指向30H地址;该地址存进数6728H;(低位在高地址)
然后4574+6728存入R0所指地址20H。做这个加法,调用子程序L1:两个字节分别相加,进位自动加上。从MOV R2,#02H / L2:...到 DJNZ R2,L2是一个循环,两次调用L1:完成两个字节的加法。
结果最后存入A寄存器。
主程序最后一句
L3:SJMP L3
好像有问题。