我正在学习asm,这是我的问题
bl method_which_returns_number
mov x21, x0
cmp w21, #0x1
似乎bl调用的方法会将数字返回到寄存器x21,是否正确? 如何将x21或x0寄存器修改/设置为整数-1?
答案 0 :(得分:2)
mov x0, #-1
汇编如下:( aarch64-linux-gnu-as minus1.S
&& aarch64-linux-gnu-objdump -d a.out
}:
0: 92800000 mov x0, #0xffffffffffffffff // #-1
这是movn x0, #0
ARM汇编程序知道如何编码mov
各种方法来支持不同类型的直接位模式。 AArch64有几种形式的不同编码规则。 使用mov
如果无法立即汇编到单个指令,则会出错,因此您不必担心它会像ARM32那样变成PC相对负载ldr r0, =constant
伪指令可以。
ARM文档列出了几种形式的mov
和one of them is an alias for movn
,它们否定了它的源操作数。其他形式包括基于orr
- 立即(具有架构零寄存器)的形式,其支持重复的位模式2,4,8,16,32或64位宽。一个基于movz
,一个16位立即左移到任何位置。
似乎bl调用的方法会将数字返回到寄存器x21,是否正确?
不,ARM语法为op dst, src
。
mov x21, x0
正在将返回值从x0
复制到x21
。整数返回值在x/w0
中,就像AArch32中的返回值在r0
中一样。