ARM 汇编高级算术指令与调试技巧
1. 更智能的数字运算
在 ARM 架构中,自 v3 版本起引入了更多处理 64 位有符号和无符号数的指令。下面将介绍一些实用的指令。
1.1 长乘法
SMULL 和 UMULL 指令可进行有符号和无符号乘法,使用两个 32 位操作数寄存器得到 64 位结果,并将其存于两个目标寄存器中。指令格式如下:
SMULL (<suffix>) <destlLo>, <destHi>, <Op1>, <Op2>
UMULL (<suffix>) <destlLo>, <destHi>, <Op1>, <Op2>
对于有符号乘法,操作数 1 和操作数 2 的值假定为补码形式。在这些指令中不能使用 PC 寄存器,并且应避免使用 SP 寄存器,不过树莓派可以使用。两个目标寄存器应不同。
例如,计算两个无符号 32 位数的 64 位乘积,假设两个无符号数在 R1 和 R2 中,结果存于 R3 和 R4 中:
UMULL R3, R4, R1, R2
为展示新指令的代码节省效果,下面的程序 12a 使用原始的 MUL 指令实现相同功能:
Program 12a. Long multipli
超级会员免费看
订阅专栏 解锁全文
927

被折叠的 条评论
为什么被折叠?



