c - 在 C 中使用 ASM 命令

标签 c assembly arm clang

我有一个关于在 c 中使用 ASM 的小问题。我要执行指令:

LDR PC,=0x123456

这给了我错误“操作数中的意外标记”。

asm("LDR PC,=0x123456");

这给出了“无效约束”。

asm("LDR PC," : "m" (0x123456));

正确的做法是什么?

最佳答案

你正在使用这个:

asm("LDR PC,=0x123456");

这不是标准的 ARM 汇编指令,而是作为编译器扩展提供的伪指令。当您编译它时,此伪指令将转换为其他汇编指令。 clang 似乎不支持此编译器扩展(请参阅此 thread )。您应该自己进行汇编指令的转换,请参阅 ARM 文档了解 LDR pseudo-instruction 的转换方式。

关于c - 在 C 中使用 ASM 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19007207/

相关文章:

c - 为什么我们需要解决 `make` 和 `make install` 之后的依赖关系?

c - 为什么gcc生成 "leal -8240(%ebp), %eax; cmpl $1, %eax; ja XXX"而不是jmp指令?

linux - 嵌入式 Linux ( ARM ) 中的低内存吞吐量

arm - Valgrind在ARM Cortex-A8中的问题 "configure: error: Unsupported host architecture"

c++ - 为什么 C 字 rune 字是 int 而不是 char?

c - C中循环后如何返回值

c - 如何从具有 int 值的文本文件创建一组数组?

assembly - MIPS float : swc1 vs. s.s

c++ - 在 netbeans 中将 C++ 代码输出为汇编语言

c - 冗余 IRQ 清除挂起操作