我正在编写一个 ARM11 仿真器,现在我正在尝试设置 N(负结果)、Z(零)、C(执行)和 V(溢出)的 CPRS 标志
这就是规范所说的:
逻辑运算(and、eor、orr、teq、tst 和 mov)中的 C 位将被设置为任何移位操作的进位(即桶形移位器的结果)。在算术运算(add、sub、rsb 和 cmp)中,C 位将设置为 ALU 的第 31 位的进位。
我的问题是,我如何确定逻辑和算术运算的执行?操作在两个 uint32_t 上工作,例如我的 eor 操作只返回 x ^ y,然后我需要设置 CPRS 标志。
编辑:对于加法,如果加法产生进位(无符号超过 ow),则 C 设置为 1,否则设置为 0。对于减法(包括比较),如果减法产生借位,则位 C 设置为 0,否则设置为 1。