如何使用 __asm 在 C 中执行 DCD?
How to perform DCD in C using __asm?
我正在尝试在 ARM C 代码中执行 ASM 指令 DCD 0xf7f0a000
。
我尝试了以下方法并得到了错误:
__asm("DCD 0xf7f0a000");
Error : #3061: unrecognized instruction opcode
__asm
{
MOV r0,=0xf7f0a000
MOV r1,{r0}
}
Error: Implicit physical register R0 should be defined as a variable.
Error: Implicit physical register R1 should be defined as a variable.
更新:
ARM 编译器版本:ARM Compiler 5.06 update 6
PS: 我试图通过执行未定义的操作来生成异常。
ARMCC 提供了来自供应商的质量非常好的文档。
你没有指定你的 ARMCC 的版本,显然自从我使用它(~15 年前)以来情况发生了变化。
如果你想使用内联汇编,你需要研究这个(同样 - 如果这适合你的编译器版本):
https://developer.arm.com/tools-and-software/software-development-tools/legacy-tools/ds-5-development-studio/resources/tutorials/using-inline-assembly-to-improve-code-efficiency
Note: Register names in inline assembly code are treated as C or C++ variables. They do not necessarily relate to the physical register of the same name. In our C code, we use the variable names r5 and r6 for our operands, but the actual registers used are r1 and r2.
内联 __asm 使用起来非常麻烦,除非您完全理解自己在做什么。将汇编代码放在一个单独的文件中通常要容易得多。 (以前有 .asm 扩展名,现在不确定)。
PS: I am trying to generate an exception by doing undefined operation.
据我所知,您正在尝试写入无效地址,这与 'undefined operation' 不同,您可以使用无效指针从 C 中执行此操作,根本不需要 asm :
int *a;
a = 0xf7f0a000;
*a = 2019;
另一个编辑:最后回答标题中的实际问题 :) 我认为你做不到。 DCD不是操作码,它是汇编指令,不能在__asm块内使用(内联汇编),只能在'real'汇编语言代码中使用。
我正在尝试在 ARM C 代码中执行 ASM 指令 DCD 0xf7f0a000
。
我尝试了以下方法并得到了错误:
__asm("DCD 0xf7f0a000");
Error : #3061: unrecognized instruction opcode
__asm
{
MOV r0,=0xf7f0a000
MOV r1,{r0}
}
Error: Implicit physical register R0 should be defined as a variable.
Error: Implicit physical register R1 should be defined as a variable.
更新:
ARM 编译器版本:ARM Compiler 5.06 update 6
PS: 我试图通过执行未定义的操作来生成异常。
ARMCC 提供了来自供应商的质量非常好的文档。
你没有指定你的 ARMCC 的版本,显然自从我使用它(~15 年前)以来情况发生了变化。
如果你想使用内联汇编,你需要研究这个(同样 - 如果这适合你的编译器版本): https://developer.arm.com/tools-and-software/software-development-tools/legacy-tools/ds-5-development-studio/resources/tutorials/using-inline-assembly-to-improve-code-efficiency
Note: Register names in inline assembly code are treated as C or C++ variables. They do not necessarily relate to the physical register of the same name. In our C code, we use the variable names r5 and r6 for our operands, but the actual registers used are r1 and r2.
内联 __asm 使用起来非常麻烦,除非您完全理解自己在做什么。将汇编代码放在一个单独的文件中通常要容易得多。 (以前有 .asm 扩展名,现在不确定)。
PS: I am trying to generate an exception by doing undefined operation.
据我所知,您正在尝试写入无效地址,这与 'undefined operation' 不同,您可以使用无效指针从 C 中执行此操作,根本不需要 asm :
int *a;
a = 0xf7f0a000;
*a = 2019;
另一个编辑:最后回答标题中的实际问题 :) 我认为你做不到。 DCD不是操作码,它是汇编指令,不能在__asm块内使用(内联汇编),只能在'real'汇编语言代码中使用。