我正在试图找出8051微控制器的ADDC和ADD指令之间的区别。
描述:描述:ADD和ADDC都将值操作数添加到累加器的值,将结果值保留在累加器中。值操作数不受影响。 ADD和ADDC功能相同,只是ADDC添加了操作数的值以及Carry标志的值,而ADD没有将Carry标志添加到结果中。
ADDC如何“将结果标志添加到结果中”?结果是在累加器中,它如何为它添加进位标志?
目前,正如我所看到的,以下是它们的工作原理:
MOV A, #0xFF
ADD A, #0x01
结果是A = 0x01
和C = 1
使用ADDC,
MOV A, #0xFF
ADDC A, #0x01
结果是A = 0x01
和C = 1
也许我的测试不对或类似。有人可以解释ADD和ADDC之间的区别吗?
答案 0 :(得分:3)
在添加相关之前,进位标志的值。 ADDC
将ADD
包含在总和中,而ADDC X, Y
则不包括。
X
存储X + Y +进入ADD
。
X
仅在{{1}}中存储X + Y.
这样做的目的是允许对多字“大整数”进行链式加法。这是通过添加从最不重要到最重要的每个单词来实现的。使用ADDC可确保将先前添加的进位传送到下一个更高有效字。
答案 1 :(得分:1)
在每个案例中,请执行以下操作:
ADD A, #0x01
和
ADDC A, #0x01
在第一种情况下,您应该看到A = 0x02
和第二个A = 0x03
。设置进位标记后,ADDC
除了要添加到1
的值外,还会为进位标记添加A
。