【发布时间】:2020-02-07 09:57:43
【问题描述】:
我在汇编文件中有以下指令:
MULS R0, R0, R2
使用 gcc (gcc -o prog pros.s) 可以很好地组装,并且程序可以正常工作。 当我使用 as 来组装(as -o prog.o pros.s)时,我得到:
Rd and Rm should be different in mul
知道为什么吗?
【问题讨论】:
-
我相信这条规则存在于早期内核上的核心实现(阅读错误或功能),但如果您使用后一个内核,我认为这并不重要,请阅读架构参考手册。你在命令行上调用的是什么核心?它默认为 armv4t 吗?
-
为
和 指定相同的寄存器以前被描述为产生不可预测的结果。 ARMv6 没有限制,并且相信所有相关的 ARMv4 和 ARMv5 实现也不需要这个限制,因为高性能乘法器在写回任何结果之前读取所有操作数。 -
那是手臂上的
-
这意味着 armv4 和 armv5 有问题,armv6 和 armv7 没有
-
@old_timer,很好的问题,因为我没有为 gcc 调用指定核心。这是在运行 32 位 debian 的 Rpi 上构建的代码,因此 AFAIK 应该是 armv8。参考手册似乎没有指定寄存器必须不同的任何一种方式。我使用 GDB 运行 gcc 程序,反汇编代码,得出 MULS 助记符。
标签: gcc assembly raspberry-pi arm