Assembly 指令臂

Assembly 指令臂,assembly,arm,branch,instruction-set,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 非常感谢请记住,BGE是一个有符号比较,因此在您的示例中,如果第一个操作数(r0)不大于或等于第二个操作数(r1),它将不会分支

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

LDR r0,=0X3
LDR r1,=0X8F
CMP r0,r1
BGE a_label
SUBS r1,r1, #0XC9
我希望它会分支,但不知何故0X8F并不大于0X3。在Keil上模拟我的代码可以证明这一点

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


非常感谢请记住,
BGE
是一个有符号比较,因此在您的示例中,如果第一个操作数(
r0
)不大于或等于第二个操作数(
r1
),它将不会分支


为完整起见,正如Michael所建议的,更常见(或建议)使用
MOV r0、#0X00000003
而不是
LDR r0、=0X00000003
加载常量(生成的文件很可能完全相同).

我认为您误解了
CMP
处理条件代码的“比较”变体的方式。当您在头脑中读取一个
CMP
后接一条条件指令时,将条件代码移到
CMP
两个参数之间。因此

CMP r0, r1
BGE label

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

为什么3>=0x8F。。?你是在等信号分机吗?另外,既然您处理的是8位即时数据,为什么不使用
mov
CMP r0, r1
BGE label