msp430进位
Carry bit in msp430
我正在为微控制器 msp430 编写模拟器。我不明白什么时候应该设置进位。例如在 add
指令中:
1+0x7FFF
设置进位还是1+0xFFFF
?
有两个不同的指令实现了 <
、JL(小于则跳转)和 JLO(小于则跳转)。
JL 的文档说它
allows comparison of signed integers.
JLO 的文档说它
is used for the comparison of unsigned numbers.
JLO与JNC相同,因此C为无符号进位
对于ADD
指令,进位位设置为无符号溢出。
您可以从 TI documents. In particular, the second example in the documentation of ADD
instruction (page 3-22 中的示例中推断出如果结果大于 0xff
(对于 ADD
和 ADDA
限制分别为 0xffff
和 0xfffff
- 8、16 和 20 位):
ADD.B #10,R5 ; Add 10 to Lowbyte of R5
JC TONI ; Carry occurred, if (R5) ≥ 246 [0Ah+0F6h]
...... ; No carry
除了进位位之外,msp430 状态寄存器中还有一个负位这一事实证实了这一点。
至少有几个现有的 open-source MSP430 仿真器,即 mspsim
和 Avrora。我建议将它们用作参考实现。
我正在为微控制器 msp430 编写模拟器。我不明白什么时候应该设置进位。例如在 add
指令中:
1+0x7FFF
设置进位还是1+0xFFFF
?
有两个不同的指令实现了 <
、JL(小于则跳转)和 JLO(小于则跳转)。
JL 的文档说它
allows comparison of signed integers.
JLO 的文档说它
is used for the comparison of unsigned numbers.
JLO与JNC相同,因此C为无符号进位
对于ADD
指令,进位位设置为无符号溢出。
您可以从 TI documents. In particular, the second example in the documentation of ADD
instruction (page 3-22 中的示例中推断出如果结果大于 0xff
(对于 ADD
和 ADDA
限制分别为 0xffff
和 0xfffff
- 8、16 和 20 位):
ADD.B #10,R5 ; Add 10 to Lowbyte of R5
JC TONI ; Carry occurred, if (R5) ≥ 246 [0Ah+0F6h]
...... ; No carry
除了进位位之外,msp430 状态寄存器中还有一个负位这一事实证实了这一点。
至少有几个现有的 open-source MSP430 仿真器,即 mspsim
和 Avrora。我建议将它们用作参考实现。