在PowerPC汇编文件中定义和使用全局变量

时间:2016-09-29 13:00:52

标签: assembly global-variables powerpc instruction-set

我想将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-用于在变量中存储寄存器内容的正确指令是什么?

1 个答案:

答案 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