Assembly 如何使用asm在C中执行DCD?

Assembly 如何使用asm在C中执行DCD?,assembly,arm,cortex-m3,armcc,Assembly,Arm,Cortex M3,Armcc,我正在尝试执行ARM C代码中的ASM指令DCD 0xf7f0a000 以下是我尝试过的方法和错误: __asm("DCD 0xf7f0a000"); 错误:#3061:无法识别的指令操作码 错误:隐式物理寄存器R0应定义为变量 错误:隐式物理寄存器R1应定义为变量 更新: ARM编译器版本:ARM编译器5.06更新6 PS:我正在尝试通过执行未定义的操作生成异常。ARMCC从供应商处获得了非常高质量的文档 您没有指定ARMCC的版本,很明显,自从我使用它(大约15年前)以来,情况发生了变化

我正在尝试执行ARM C代码中的ASM指令
DCD 0xf7f0a000

以下是我尝试过的方法和错误:

__asm("DCD 0xf7f0a000");
错误:#3061:无法识别的指令操作码

错误:隐式物理寄存器R0应定义为变量

错误:隐式物理寄存器R1应定义为变量

更新:

ARM编译器版本:
ARM编译器5.06更新6


PS:我正在尝试通过执行未定义的操作生成异常。

ARMCC从供应商处获得了非常高质量的文档

您没有指定ARMCC的版本,很明显,自从我使用它(大约15年前)以来,情况发生了变化

如果要使用内联程序集,则需要研究此问题(同样,如果这适合您的编译器版本):

注:内嵌汇编代码中的登记名被视为C++或C++变量。它们不一定与同名的实际登记册有关。在我们的C代码中,我们使用变量名r5和r6作为操作数,但实际使用的寄存器是r1和r2

内联asm的使用非常麻烦,除非您完全理解自己在做什么。通常,将汇编代码放在单独的文件中要容易得多。(以前有.asm扩展名,现在不确定)

PS:我试图通过执行未定义的操作来生成异常

据我所见,您试图写入无效地址,这与“未定义操作”不同,您可以使用无效指针从C执行此操作,完全不需要asm:

int *a;
a = 0xf7f0a000;
*a = 2019;

另一个编辑:最后回答标题中的实际问题:)我认为你做不到。DCD不是一个操作码,它是一个汇编指令,不能在asm块(内联汇编)中使用,只能在“真实”汇编语言代码中使用。

您使用的是什么编译器?gnuc(gcc/clang)使用GAS指令,如
.long 0xf7f0a000
.int
asm(“”)中发出文字数据语句。要生成异常,您可以使用
\uuu内置陷阱()
。我正在使用ARMGCC编译器。我尝试了在汇编文件中运行的
dcd0xf7f0a000
。但是我也需要同样的方法来使用C语言。我试着使用
\u builtin\u trap()
。上面写着:
L6218E:Undefined symbol\u内置陷阱
你确定你在使用ARM GCC吗?我认为ARMCC是一个完全不同的编译器,它不支持GNU扩展,比如
\uu builtin\u trap()
。对不起。它的ARM编译器,即ARMCC。谢谢。我能够使用您答案中链接中提供的asm规则并成功编译。但是输出不是我所期望的。我想我会使用C方法。对于C,我们可以使用*((volatile unsigned int*)(0xf7f0a000))。没有错误。
int *a;
a = 0xf7f0a000;
*a = 2019;