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

为何执行LSL r3, r4, r5后r3=AA000000?(r4=0x71AA0000,r5=0x8)

ARM LSL 指令移位位数的误区解析

你混淆了移位位数的定义:ARM的LSL指令中,第二个操作数(这里是r5的值)表示的是二进制移位的位数,而非十六进制位的数量。

具体拆解你的例子:

  • r4的值为0x71AA0000,转换成32位二进制是:01110001 10101010 00000000 00000000
  • r5的值是0x8,即十进制的8,意味着要对r4执行左移8个二进制位的操作
  • 左移8位后,原寄存器的高8位(二进制01110001,对应十六进制0x71)会被移出32位寄存器范围而丢弃,剩余部分左移后补0,最终结果就是0xAA000000,与实际执行结果一致。

你的误区在于把0x8当成了十六进制位的数量,误以为只需左移4个二进制位(1个十六进制位=4个二进制位),但ARM指令的移位操作始终以二进制位为单位计数,0x8就是8个二进制位,因此会丢掉8位的高位内容,而非4位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:35:35