assembly - BGE指令ARM

标签 assembly arm branch instruction-set

此测试要求在“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

表示“如果r0g大于或e等于r1则分支”。在您的情况下,r0 是 3,r1 是 0x8F (143),因此显然不会发生分支。

关于assembly - BGE指令ARM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53520879/

相关文章:

assembly - MinGW:与 -nostdlib 链接产生无效的可执行文件

assembly - 在内存中彼此相邻的 NASM 标签中,打印两个字符串而不是第一个字符串

git - 了解本地 Git 分支的方式 "Track"远程分支

SVN分支比较

mercurial - mercurial 如何确定分支处于非事件状态?

linux - 内存保护键 内存重新排序

delphi - Delphi 和 FPC 中的裸 64 位 asm 函数

用于 gps 模块的 Linux 设备驱动程序

assembly - 在 32 位 Arm 上,我可以将 double 位模式的高位放入整数寄存器中吗?

assembly - 初级 ARM 汇编问题