使用 gcc 和 as 在 ARM 上汇编 MULS 指令

AjW*_*red 1 assembly gcc arm raspberry-pi

我在汇编文件中有以下指令:

MULS R0, R0, R2        
Run Code Online (Sandbox Code Playgroud)

使用 gcc (gcc -o prog pros.s) 可以很好地进行组装,并且程序可以正常工作。当我使用 as 进行汇编(as -o prog.o pros.s)时,我得到:

Rd and Rm should be different in mul
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

old*_*mer 5

从 ARM ARM

为 和 指定相同的寄存器,之前被描述为产生不可预测的结果。ARMv6 没有限制,相信所有相关的 ARMv4 和 ARMv5 实现也不需要这个限制,因为高性能乘法器在写回任何结果之前读取它们的所有操作数

ARMv4 和 ARMv5 有这个规则/问题,认为是错误,而不是功能。ARMv6 和 ARMv7 没有这个问题,所以检查你在编译时使用的 cpu/arch 设置,更重要的是你使用的是什么目标。