PowerPC GCC打印在没有%符号的程序集中注册

Bul*_*aza 3 assembly gcc powerpc cpu-registers

在Matt Godbolt的Compiler Explorer网站上,您可以使用各种预安装的编译器编译代码.使用PowerPC gcc 4.8寄存器时无法区分immediates(例如addi 11,31,16).

但是,使用该-mregnames选项时,所有寄存器都标有,%r后跟寄存器索引.如何省略%标志r1而不是%r1

例如,void nop () {}使用gcc4.8 PowerPC-O0 -mregnames:

nop():
    stwu %r1,-16(%r1)
    stw %r31,12(%r1)
    mr %r31,%r1
    addi %r11,%r31,16
    lwz %r31,-4(%r11)
    mr %r1,%r11
    blr
Run Code Online (Sandbox Code Playgroud)

Cod*_*ray 6

在定位PowerPC时,您基本上有两个选项来构建汇编列表:

您可以使用IBM语法(在IBM汇编程序中很常见),其中寄存器不使用任何类型的特殊前缀:它们只是用数字引用.是的,这使得很难将它们与中间人区分开来.

或者,您可以使用Gnu/AT&T语法,它总是在寄存器前加上%符号(r在本例中为an ).这不仅可以更容易区分寄存器和即时寄存器,而且还可以区分整数寄存器(%r?)和浮点寄存器(%f?).

没有中间选项,您获得r(或f)前缀,但没有前导%.如果你需要这个,你可以像Jester建议和后处理输出一样,使用正则表达式%r[0-9]+进行匹配.