使用asm指令读取MIPS CPU寄存器

时间:2011-10-30 09:02:22

标签: assembly mips inline-assembly cpu-registers

我想在断言函数中打印$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文档,但我似乎不清楚。

1 个答案:

答案 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中阅读有关约束的更多信息。