使用 GAS ARM 汇编器求模

问题描述

我试图在 ARM 处理器上的 GAS 汇编程序中找到余数。查看 arm 文档似乎有此说明,但我似乎无法使用 gas 使其工作。有谁知道这是否有效,以及语法是什么?

mov r3,[r9] MOD #2

我基本上想通过将寄存器 9 的内容除以 2 的模数加载寄存器 3。

之前我自己写了一个单独的子程序来做减法和计算,但 arm 网站似乎将其显示为有效指令。

https://www.keil.com/support/man/docs/a51/a51_op_mod.htm

解决方法

您正在查看的 MOD 是汇编程序中的运算符;它可用于在汇编时计算常量的 MOD 函数,以便您可以将结果用作另一个常量。它不是机器指令,也无法用于计算直到运行时才知道的值。

计算余数 mod 2 很容易;只需找到数字 1 的逻辑 AND。

and r3,r9,#1

如果使用 Thumb,则需要两条说明:

movs r3,#1
ands r3,r9

对于不是 2 的常数幂的除数 b,找到 a mod b 更难。您利用了 a mod b = a - ((a/b)*b) 的事实。使用 SDIV 找到商 a/b,然后使用 MLS 将其乘以 b 并从 a 中减去。