我有以下声明:
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");
电脑端同样
谢谢。
最佳答案
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();
关于c - 如何使用内联汇编将给定地址写入寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53259825/