You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM64汇编:x21/x0寄存器设为-1及返回值疑问

关于ARM64汇编的两个问题解答

1. bl调用的函数返回值是否会存入x21寄存器?

不会哦!在ARM64的标准调用约定里,函数的返回值是存在x0寄存器(64位返回值)或者w0寄存器(32位返回值)里的。你代码里的mov x21, x0是你手动把x0里的返回值拷贝到x21的操作,函数本身并不会主动把返回值放到x21里。

看你的代码片段就能明白:

bl method_which_returns_number  ; 调用函数后,返回值存在x0中
mov x21, x0                     ; 手动将x0的内容复制到x21
cmp w21, #0x1                   ; 比较x21的低32位和0x1

这里的核心逻辑是:bl指令执行完后,返回值只在x0/w0里,x21是你后续手动转移过去的。

2. 如何将x0或x21设置为整数-1?

在ARM64汇编里,-1的二进制表示是所有位都为1(补码规则),你可以用几种简单方式实现:

  • 直接用mov指令赋值:
    mov x0, #-1    ; 将64位寄存器x0设置为-1
    mov w21, #-1   ; 将32位寄存器w21设置为-1(x21的低32位变为-1,高32位清零)
    
  • 或者用movn指令(对立即数取反),因为0的取反就是全1,也就是-1:
    movn x0, #0    ; 等价于mov x0, #-1
    movn w21, #0   ; 等价于mov w21, #-1
    

如果需要确保x21整个64位都是-1,就用mov x21, #-1;如果只需要低32位是-1,用mov w21, #-1就足够了。

内容的提问来源于stack exchange,提问作者user4151125

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:10:44