我想在断言函数中打印$ra
(返回地址)寄存器以进行调试。我正在研究MIPS CPU。
我尝试了以下代码,但编译器不喜欢它:
unsigned int RA;
unsigned int* pRA = &RA;
asm volatile("sw $ra, %0" : "=r" (pRA));
或
static volatile unsigned int RA;
asm ("mov $ra, %0" : "=m"(RA));
我找到了关于内联/扩展装配的GCC文档,但我似乎不清楚。
答案 0 :(得分:4)
以下任何一种都应该有效:
unsigned int x;
asm volatile ("move %0, $ra" : "=r" (x));
asm volatile ("sw $ra, %0" : "=m" (x));
如果你坚持使用指针值asm volatile ("sw $ra, %0" : "=m" (*pRA));
是要走的路(没有取消引用你会得到一个pRA
将结束指向返回地址的指针而不是存储的值RA
)。您可以在GCC inline assembly HOWTO中阅读有关约束的更多信息。