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

汇编:如何通过数学运算将三个两位数值寄存器合并为一个寄存器

寄存器十进制数值合并问题

你要把三个存储两位十进制数的寄存器按顺序合并为一个寄存器(r1作为前两位、r2作为中间两位、r3作为最后两位),比如r1=12、r2=34、r3=56时得到r0=123456,这完全可以通过数学运算实现,但你之前的代码逻辑存在错误。

错误原因分析

你使用的LSL #8是左移8位操作,等价于乘以256,这是二进制字节拼接的逻辑,而非十进制位数拼接:

  • r1=12左移8位:12×256=3072,加上r2=34后得到3072+34=3106
  • 3106再左移8位:3106×256=795136,加上r3=56后得到795136+56=795192,这就是你得到错误结果的原因。

正确实现方法

要实现十进制位数拼接,需按照十进制位权计算:前两位需乘以10000(100×100),中间两位乘以100,最后加上最后两位。对应ARM汇编代码如下:

mov r1, #12
mov r2, #34
mov r3, #56
mul r0, r1, #10000   @ 计算r1×10000,得到120000
mul r4, r2, #100     @ 计算r2×100,得到3400
add r0, r0, r4       @ 120000+3400=123400
add r0, r0, r3       @ 123400+56=123456,得到目标值

如果不想使用乘法指令,也可以用加法组合出位权(比如10000=8192+1024+512+256+32),但乘法指令更直观高效。

你提供的错误代码及调试截图

错误代码:

mov r1,#12
mov r2,#34
mov r3,#56
add r0, r2, r1, LSL #8
add r0, r3, r0, LSL #8 

调试器寄存器值截图:
Debugger screenshot of register values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:06:17