【问题标题】:Finding the modulo with GAS ARM assembler使用 GAS ARM 汇编程序求模
【发布时间】:2026-01-13 01:20:04
【问题描述】:

我正在尝试在 ARM 处理器上的 GAS 汇编程序中找到剩余部分。看起来手臂文档似乎有这个指令,但我似乎无法使用气体使其工作。任何人都知道这是否有效,语法是什么?

mov r3, [r9] MOD #2

我基本上是想用寄存器 9 的内容除以 2 的模数来加载寄存器 3。

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

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

【问题讨论】:

    标签: arm modulo gnu-assembler


    【解决方案1】:

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

    计算余数 mod 2 非常容易;只需找到数字 1 的逻辑与。

    and r3, r9, #1
    

    如果使用 Thumb,则需要两条指令:

    movs r3, #1
    ands r3, r9
    

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

    【讨论】:

    • 谢谢!我会试一试的。 :)