Assembly 在PowerPC程序集文件中定义和使用全局变量

Assembly 在PowerPC程序集文件中定义和使用全局变量,assembly,global-variables,powerpc,instruction-set,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-如何在程序集文件中定义全局

我想将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-如何在程序集文件中定义全局变量?
2-在变量中存储寄存器内容的正确指令是什么?

您可以使用内联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;
}

它在干什么?您希望它做什么?通常,我希望使用WinIDEA查看SPR寄存器的内容。为了做到这一点,我必须将SPR的内容存储到一个全局变量中,这样我就可以观察寄存器的内容。这就是“你想做什么”部分。那么你那里的代码是什么呢?它能装配吗?是否有任何错误消息?给我们你所有的信息。它在第三行给出了一个语法错误,这就像拔钉子一样。你有什么语法错误?请发布完整的错误消息。我刚刚看到你在asm中添加了一些关于全局变量的额外问题。这在原始汇编程序级别有点棘手:您必须使用通过r2存储的全局偏移表(GOT)/目录(TOC)。如果你不能使用内联asm,你最好问一个不同的,更具体的问题。
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