ARM汇编程序错误 - "此寄存器组合导致不可预测的行为"

时间:2014-07-26 18:41:34

标签: assembly arm

我写了一个简单的程序来计算阶乘,但在编译时我得到了错误

    AREA PROGRAM, CODE,READONLY
    ARM
    ENTRY
    LDR R0,=0X5
    LDR R1,=0X1
    SUBS R2,R0,R1
AGN BLT OVR
    MUL R0,R0,R2
    SUBS R2,R2,R1
    B AGN
OVR END
  

7.1因子计算。(9):错误:A1477E:该寄存器组合导致不可预测的行为

我在ARM网站上查了一下,有例子

A1477E
This register combination results in UNPREDICTABLE behavior
This error is generated when you are assembling an instruction that has unpredictable results on execution. You must rewrite your code to avoid this unpredictable behaviour. For example, the following instructions all cause this error when assembling to 32-bit Thumb:
ADD sp, r0, #100 ; error - UNPREDICTABLE use of SP
CMP pc, #1 ; error - UNPREDICTABLE use of PC
PUSH    {r0, pc} ; error - use of an UNPREDICTABLE register combination

我的代码在行为方面怎么不可预测? MUL R0,R0,R2具体。任何想法..?

1 个答案:

答案 0 :(得分:2)

来自手臂(请阅读手臂文档)......

操作数限制

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

所以你很可能建立一个armv4或armv5