我正在为微控制器msp430编写模拟器。我不明白我什么时候应该设置进位。例如在add
指令中:
1+0x7FFF
设置进位或1+0xFFFF
?
答案 0 :(得分:0)
有两个不同的指令实现<
,JL(如果更少则跳转)和JLO(如果更低则跳转)。
JL的文档说它
允许比较有符号整数。
JLO的文档说它
用于比较无符号数。
JLO与JNC相同,因此,C是无符号进位。
答案 1 :(得分:0)
对于ADD
指令,进位位设置为无符号溢出。
您可以从TI documents中的示例中推断出这一点。特别是,ADD
指令(page 3-22)文档中的第二个示例表明,如果结果大于ADD.B
(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状态寄存器中还有一个NEGATIVE位确认了这一点。
至少有几个现有的开源MSP430仿真器,即mspsim
和Avrora。我建议将它们用作参考实现。