Arm 如何确定是否在C中执行

Arm 如何确定是否在C中执行,arm,flags,bit-shift,carryflag,Arm,Flags,Bit Shift,Carryflag,我正在编写一个ARM11模拟器,现在我正在尝试设置CPRS标志,它们是N(负结果)、Z(零)、C(执行)和V(溢出) 规范是这样说的: 逻辑运算(and、eor、orr、teq、tst和mov)中的C位将设置为进位 任何换档操作(即桶形换档器的结果)。在算术运算中(加法、sub、rsb 和cmp)C位将设置为ALU位31的进位 我的问题是,如何从逻辑运算和算术运算中确定进位? 操作在两个uint32上工作,例如,我的eor操作只返回x^y,然后我需要设置CPRS标志 编辑: 此外,设置了C 如果

我正在编写一个ARM11模拟器,现在我正在尝试设置CPRS标志,它们是N(负结果)、Z(零)、C(执行)和V(溢出)

规范是这样说的:

逻辑运算(and、eor、orr、teq、tst和mov)中的C位将设置为进位 任何换档操作(即桶形换档器的结果)。在算术运算中(加法、sub、rsb 和cmp)C位将设置为ALU位31的进位

我的问题是,如何从逻辑运算和算术运算中确定进位? 操作在两个uint32上工作,例如,我的eor操作只返回x^y,然后我需要设置CPRS标志

编辑: 此外,设置了C 如果加法产生进位(未签名的结束),则为1 ow),否则设置为0。减法 (包括比较),如果减法产生借用,则位C设置为0,否则设置为0
到1。

逻辑操作在这里有点麻烦-显然
eor r0、r1、r2不会产生溢出或进位。但是,我们关心的不是逻辑操作本身:

逻辑操作(and、eor、orr、teq、tst和mov)中的C位将设置为任何移位操作的执行(即桶形移位器的结果)

还记得任何数据处理指令上的可选移位吗?给定
eor r0、r1、r2 lsl#3
,您关心的是
r2 lsl#3
生成的任何内容。无论您如何为班次*实施标志设置,都要这样做


*如果你也被困在这个问题上,我在快速浏览那里的相关问题时看到了很多好主意-->

示例:确定执行时是否添加了
unsigned
c=a+b
执行=c
@chux抱歉,应该提到,规范说溢出位保持不变,但当它在加法后发生时,您只需设置执行位。剩下的我真的不知道怎么办。