BGE指令ARM

Man*_*tty 3 assembly branch arm instruction-set

此测试要求在“BGE”条件下分支到标签。正在比较的寄存器中存储的值是:

LDR r0,=0X3
LDR r1,=0X8F
CMP r0,r1
BGE a_label
SUBS r1,r1, #0XC9
Run Code Online (Sandbox Code Playgroud)

我预计它会分支,但不知何故 0X8F 不大于 0X3。在 Keil 上模拟我的代码证明了这一点。

我想知道是否有人知道为什么它不分支以及 0X8F 如何被读取为大于 0X3!

非常感谢<3

coo*_*sed 5

CMP我认为您误解了条件代码的“比较”变体的工作方式。当您读到CMP后面跟着条件指令时,在您的脑海中,将条件代码移动到 的两个参数之间CMP。因此

CMP r0, r1
BGE label
Run Code Online (Sandbox Code Playgroud)

意思是“如果r0大于等于转移r1”。在你的例子中r0是 3 并且r1是 0x8F (143) ,所以显然分支不会发生。