此测试要求在“BGE”条件下分支到标签。正在比较的寄存器中存储的值是:
LDR r0,=0X3
LDR r1,=0X8F
CMP r0,r1
BGE a_label
SUBS r1,r1, #0XC9
我预计它会分支,但不知何故 0X8F 不大于 0X3。在 Keil 上模拟我的代码证明了这一点。
我想知道是否有人知道它为什么不分支以及 0X8F 如何被读取为大于 0X3!
非常感谢<3
最佳答案
我认为您误解了 CMP
与条件代码的“比较”变体一起工作的方式。当您阅读 CMP
后跟一个条件指令时,在您的头脑中,将条件代码移至 CMP
的两个参数之间。因此
CMP r0, r1
BGE label
表示“如果r0
g大于或e等于r1
则分支”。在您的情况下,r0
是 3,r1
是 0x8F (143),因此显然不会发生分支。
关于assembly - BGE指令ARM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53520879/