我有以下声明:
asm volatile("ldr r0, =0x10000");
我不想写0x10000,而是想写一个参数,所以它看起来像这样:
uint32_t addr = 0x20000;
asm volatile("ldr r0, =addr");
我该如何做到呢?
我正在使用ARM处理器。
我想这样做:
At the end I want to do this:
asm volatile("ldr r0, =0x10000");
asm volatile("ldr r0, [r0]");
asm volatile("mov sp, r0");
与PC相同
谢谢。
答案 0 :(得分:0)
gcc非常有能力生成这些指令,因此您可以执行以下操作:
void** p = 0x10000;
register void* sp asm("sp") = *p;
__asm__ __volatile__("" : : "r" (sp) : "memory");
请注意,弄混sp
是很危险的,因此请确保您知道自己在做什么。
要加载pc
,您实际上确实需要使用mov
,例如:
void** p = 0x10000;
__asm__ __volatile__("mov pc, %0" : : "r" (*p) : "memory");
__builtin_unreachable();