我试图将SP寄存器的值存储到C中的变量中,这是我的代码:
int address = 0;
asm volatile ("STR sp, [%0]\n\t"
: "=r" ( address)
);
但是执行此代码后,os在屏幕上显示“ Segmentation fault”消息,并终止程序。有人可以给我建议解决问题吗?
答案 0 :(得分:1)
您甚至不应该在内联汇编中触摸堆栈指针。这是禁忌!!!
您不应该一开始就这样做。只需将其留给编译器即可。
如果您不更改堆栈指针或在堆栈上写入任何内容,则可能会起作用,您只是使用了错误的指令。
您要执行的操作:将堆栈指针复制到32位寄存器。
您所做的:将堆栈指针本身存储到地址0。==>分段错误。
将STR sp, [%0]\n\t
替换为mov %0, sp\n\t