我想将SPR(特殊用途寄存器)的内容保存到全局变量中。 我在汇编方面没有太多经验,但我尝试按如下方式进行:
.global __The_Global_Variable
mfspr r16, 695 #695 is the number of the SPR Register
stw r16, __The_Global_Variable #I get Syntax error at this line
我收到语法错误,所以有人可以提供帮助吗?
我还有以下问题:
1-如何在Assembly文件中定义全局变量? 2-用于在变量中存储寄存器内容的正确指令是什么?
答案 0 :(得分:1)
您可以使用内联asm指令执行此操作。例如,以下是如何在PPC64系统上获得无特权的DSCR:
#include <stdio.h>
int spr_val;
int main(int argc, char ** argv) {
asm ("mfspr %0, 3"
: "=r" (spr_val)
: : );
printf("DSCR is %x\n", spr_val);
return 0;
}
这可以正常工作 - 通过使用ppc64_cpu:
设置DSCR进行验证dja@dja-builder ~/e/foo> make foo
cc foo.c -o foo
dja@dja-builder ~/e/foo> sudo ppc64_cpu --dscr=0
dja@dja-builder ~/e/foo> ./foo
DSCR is 0
dja@dja-builder ~/e/foo> sudo ppc64_cpu --dscr=6
dja@dja-builder ~/e/foo> ./foo
DSCR is 6