【发布时间】:2014-06-04 17:27:13
【问题描述】:
我正在编写一个 ARM11 仿真器,现在我正在尝试设置 CPRS 标志,它们是 N(负结果)、Z(零)、C(执行)和 V(溢出)
这是规范所说的:
逻辑运算(and、eor、orr、teq、tst 和 mov)中的 C 位将设置为从 任何移位操作(即桶形移位器的结果)。在算术运算中(加、减、rsb 和 cmp) C 位将被设置为 ALU 的第 31 位的进位。
我的问题是,我如何确定逻辑和算术运算的进位? 操作在两个 uint32_t 上工作,例如我的 eor 操作只是返回 x ^ y,然后我需要设置 CPRS 标志。
编辑: 此外,设置 C 如果加法产生进位,则为 1(无符号 ow),否则设置为 0。减法 (包括比较),如果减法产生借位,则将位 C 设置为 0,否则设置 到 1。
【问题讨论】:
-
示例:确定是否在
unsigned添加c = a + b;、Carryout = c < a;时发生了执行操作 -
@chux 抱歉,应该提到,规范说溢出位保持不变,但是当它在添加后发生时 - 然后你只需设置执行位。剩下的我真的不知道该怎么做。
标签: arm flags bit-shift carryflag