[英]Read MIPS CPU register using asm instruction
我想在我的assert函数中打印$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文档,但对我来说似乎不清楚。
以下任何一种都可以工作:
unsigned int x;
asm volatile ("move %0, $ra" : "=r" (x));
asm volatile ("sw $ra, %0" : "=m" (x));
如果您坚持使用asm volatile ("sw $ra, %0" : "=m" (*pRA));
指针值asm volatile ("sw $ra, %0" : "=m" (*pRA));
是要走的路(没有取消引用,您将得到一个pRA
最终将指向返回地址的指针,而不是将值存储在RA
)。 您可以在GCC内联程序集HOWTO中阅读有关约束的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.