将寄存器的内容存储在变量中的正确指令是什么?
我想保存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-如何在汇编文件中定义全局变量?
您可以使用内联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 %xn", 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