在下面的代码中,当我使用./filename ; echo $?
编译并执行它时,我得到4
。为什么呢?
.global _start
_start:
mov R1,#1
mov R2,#2
cmp R1,R2
BGT bigger
bigger:
mov R0,#4
B end
_default:
mov R0,#3
end:
mov R7,#1
swi 0
答案 0 :(得分:1)
由于您正在编写汇编语言,因此您已经拥有像ARM架构参考手册(ARM ARM)那样的指令集引用,对吗?当您在CMP指令的操作下阅读该手册时,您发现:
if ConditionPassed(cond) then
alu_out = Rn - shifter_operand
N Flag = alu_out[31]
Z Flag = if alu_out == 0 then 1 else 0
C Flag = NOT BorrowFrom(Rn - shifter_operand)
V Flag = OverflowFrom(Rn - shifter_operand)
然后在分支指令下
if ConditionPassed(cond) then
if L == 1 then
LR = address of the instruction after the branch instruction
PC = PC + (SignExtend(signed_immed_24) << 2)
并且cond字段描述了执行或不执行指令所需的条件
1100 GT Signed greater than Z clear, and either N set and V set, or
N clear and V clear (Z == 0,N == V)
1110 AL Always (unconditional)
如果未指定其他条件,则暗示AL。
当您阅读本手册时,您不明白这部分内容是什么?