【发布时间】:2015-10-09 20:44:57
【问题描述】:
我一直在帮助进行 ARM7 汇编语言课程的实验,今天遇到了一个学生输入以下表达式的问题:
MUL R0, R0, R1
代码没有编译。解决方法是将表达式改为:
MUL R0, R1, R0
即MUL 的前两个参数不能是同一个寄存器。我已经知道这一点,因为它是 ARM 文档的一部分: http://infocenter.arm.com/help/topic/com.arm.doc.dui0489i/DUI0489I_arm_assembler_reference.pdf
学生很高兴他们的问题得到解决,但我很沮丧,因为我不知道为什么 ARM7 要求像这样传递参数。我认为这可能与乘法器移位和加法时用于存储中间值的寄存器之一有关,但我什至不确定乘法是否在 ARM 上工作(事实上,我相当当然不是)。为什么参数的顺序在这里如此重要?
【问题讨论】:
-
最有可能是 ip 中的错误。尤其是在较早的 arm7 天,您的代工厂布局不是 verilog。也有错误,他们可以尝试违反规则,看看你是使用真正的手臂 ip 还是克隆或窃取了手臂 ip……手臂中的一些“不可预测的结果”项目属于这一类(国际海事组织)。在某些情况下,实际错误仅在某些内核上而不在其他内核上。如果您可以使用旧纸质版本的手臂进入电子设备,您可以看到这些东西来来去去。
标签: assembly arm multiplication arm7