【问题标题】:Defining and Using Global Variable in PowerPC Assembly file在 PowerPC 程序集文件中定义和使用全局变量
【发布时间】:2016-09-30 08:03:27
【问题描述】:

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

【问题讨论】:

  • 它在做什么?你希望它做什么?
  • 一般来说,我想使用 WinIDEA 查看 SPR 寄存器的内容。为此,我必须将 SPR 的内容存储到一个全局变量中,这样我就可以查看寄存器的内容。
  • 这就是“你想做的部分”。那么你那里的代码是什么?它会组装吗?是否有任何错误信息?向我们提供您拥有的所有信息。
  • 第三行出现语法错误,
  • 这就像拔钉子一样。你得到什么语法错误?请发布完整的错误消息。

标签: assembly global-variables powerpc instruction-set


【解决方案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

【讨论】:

  • 我刚刚看到你添加了一些关于 asm 中全局变量的额外问题。这在原始汇编程序级别有点棘手:您使用了通过 r2 存储的全局偏移表 (GOT) / 目录 (TOC)。如果你不能使用内联汇编,你最好问一个不同的、更具体的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多