将ARM64寄存器设置为-1

时间:2018-05-04 20:49:30

标签: assembly arm

我正在学习asm,这是我的问题

bl         method_which_returns_number
mov        x21, x0
cmp        w21, #0x1

似乎bl调用的方法会将数字返回到寄存器x21,是否正确? 如何将x21或x0寄存器修改/设置为整数-1?

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文档列出了几种形式的movone 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中一样。