我正在为微控制器msp430编写模拟器。我不明白什么时候设置进位。例如,在add指令中:1+0x7FFF设置进位或1+0xFFFF
发布于 2016-01-24 10:12:47
对于ADD指令,在无符号溢出时设置进位。
您可以从TI文件中的示例中推断出这一点。特别是,ADD指令(第3至22页)文档中的第二个示例指出,如果结果大于0xff (对于ADD和ADDA,限制分别为0xffff和0xfffff - 8、16和20位),则在ADD.B上进行:
ADD.B #10,R5 ; Add 10 to Lowbyte of R5
JC TONI ; Carry occurred, if (R5) ≥ 246 [0Ah+0F6h]
...... ; No carry除了进位外,msp430状态寄存器中还有一个负位这一事实证实了这一点。
至少有几个现有的开源MSP430模拟器,即mspsim和Avrora。我建议将它们用作参考实现。
发布于 2016-01-24 09:08:12
有两个不同的指令实现<,JL (跳转如果少)和JLO (跳转如果较低)。
JL的文档显示
允许比较有符号整数。
JLO的文档显示
用于比较无符号数字。
JLO与JNC相同,因此C是无符号进位。
https://stackoverflow.com/questions/34971844
复制相似问题