This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
人员:
我正在使用 IAR 的 icc430 C 编译器及其内联汇编器。 我注意到这个工具标记
以下指令不符合"RPT"(重复)操作的条件、因为
工具认为对常数发生器寄存器(R2和 R3)的访问不是
"寄存器模式"操作数。
0018 4E53 ADDX.A #0x0、R14 // src:模式0中为 R3/CG2、dst:模式0中为 R14
0018 5E53 ADDX.A #0x1、R14 // src:模式1中为 R3/CG2、dst:模式0中为 R14
0018 6E53 ADDX.A #0x2、R14 // src:模式2中的 R3/CG2、dst:模式0中的 R14
0018 6E52 ADDX.A #0x4、R14 // src:R2/SR/CG1 in 模式2、dst:R14 in 模式0
0018 7E52 ADDX.A #0x8、R14 // src:R2/SR/CG1 in 模式3、dst:R14 in 模式0
0018 7E53 ADDX.A #0x-1、R14 // src:模式3中的 R3/CG2、dst:模式0中的 R14
(错误打印输出包括在下面)
使用常数发生器确实会使指令不合格
还是 IAR 在这里具有过度限制?
Atlant
==================================================================-
编译:hello.cpp -> hello.R43
asm ("ADDX.A #0、R14");//:
^μ A
"Hello.CPP"、543 Error[Og006]:内联汇编中的错误:"ERROR[459]:重复指令必须具有寄存器模式操作数"
asm ("ADDX.A #1,R14");//:
^μ A
"Hello.CPP"、546错误[Og006]:内联汇编中的错误:"ERROR[459]:重复指令必须具有寄存器模式操作数"
asm ("ADDX.A #2、R14");//:
^μ A
"Hello.CPP"、549 Error[Og006]:内联汇编中的错误:"ERROR[459]:重复指令必须具有寄存器模式操作数"
asm ("ADDX.A #4, R14");//:
^μ A
"Hello.CPP"、552 Error[Og006]:内联汇编中的错误:"ERROR[459]:重复指令必须具有寄存器模式操作数"
asm ("ADDX.A #8、R14");//:
^μ A
"Hello.CPP"、555 Error[Og006]:内联汇编中的错误:"ERROR[459]:重复指令必须具有寄存器模式操作数"
asm ("ADDX.A #-1、R14");//:
^μ A
"Hello.CPP"、558 Error[Og006]:内联汇编中的错误:"ERROR[459]:重复指令必须具有寄存器模式操作数"
克莱明:
>我在 CPU 文档中找不到这样的限制。
谢谢--我同意!
>如果手工生成机器码,是否正确执行?
这将是我的下一步。 我现在尝试一下、然后报告。
Atlant
>>如果您手动生成机器码,是否正确执行了?
>这将是我的下一步。 我现在尝试一下、然后报告。
我不知道如何强制 IAR 生成任意十六进制操作码、但我可以编辑生成的加载文件、因此我使用立即(#n)重复计数和提供重复计数的寄存器来执行实验。 事实证明、在所有情况下、IAR 编译器都是正确的:如果将常数发生器寄存器指定为源寄存器、通常需要重复该操作的扩展字将被忽略。 该操作正常进行、但仅执行一次。
我想我还想听到 TI 说这是预期的行为(对于所有 MSP430X 处理器)、但除此之外、这个问题已经解决。 我想我会向 TI 提交一个文档错误、说明这种行为没有记录;他们可以更清楚地知道什么是"寄存器模式"操作数。
Atlant