PowerPC GCC打印程序集中的寄存器,不带%符号

PowerPC GCC打印程序集中的寄存器,不带%符号,gcc,assembly,cpu-registers,powerpc,Gcc,Assembly,Cpu Registers,Powerpc,在Matt Godbolt的网站上,您可以使用各种预安装的编译器编译代码。当使用PowerPC gcc 4.8时,无法区分寄存器和直接寄存器(例如addi 11,31,16) 但是,当使用-mregnames选项时,所有寄存器都标有%r,后跟寄存器索引如何仅省略%符号以获取r1而不是%r1? 例如: 以PowerPC为目标时,对于程序集列表的语法,基本上有两个选项: 您可以使用IBM语法(在IBM汇编程序中很常见),其中寄存器不使用任何类型的特殊前缀:它们只是用数字引用。是的,这使得很难区分它们

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

但是,当使用
-mregnames
选项时,所有寄存器都标有
%r
,后跟寄存器索引如何仅省略
%
符号以获取
r1
而不是
%r1

例如:


以PowerPC为目标时,对于程序集列表的语法,基本上有两个选项:

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

或者,您可以使用Gnu/AT&T语法,它总是以
%
符号(在本例中是
r
)作为寄存器前缀。这不仅可以更容易地区分寄存器和直接寄存器,还可以区分整数寄存器(
%r?
)和浮点寄存器(
%f?

没有中间选项,您可以获得
r
(或
f
)前缀,但没有前导的
%
。如果需要,可以按照Jester的建议,使用正则表达式
%r[0-9]+
进行匹配,并对输出进行后期处理。

更新:
powerpc linux gnu gcc 5.4.0版(Ubuntu 16.04的默认软件包)

使用-mregnames时,可以在程序集源代码文件中使用“%r0”或“r0”或“0”格式作为寄存器名

对于反汇编,PowerPCLinuxGNUobjdump默认为“r0”格式(我同意这更容易阅读)


在该网页的示例中,它似乎显示了编译器的列表输出,而不是使用objdump。我不知道控制列表输出格式的方法。

如果省略
%
寄存器可能会与符号混淆:)为什么要这样做?《手册》似乎没有办法做到这一点。@Jester:我习惯于阅读没有它们的汇编如果是为了个人阅读,只需搜索并替换
%r[0-9]+
就可以了,显然。@Jester:是的,但这似乎很麻烦,但如果你能做到最好的话,还是感谢你的建议。提示:将汇编列表作为文本而不是图像进行后期处理。请注意,
objdump
默认生成“
r
前缀,而不使用
%
”格式。试图弄清楚如何使
gcc
产生这种格式正是我来到这里的原因,但是
%r
前缀对我来说同样有用。
nop():
    stwu %r1,-16(%r1)
    stw %r31,12(%r1)
    mr %r31,%r1
    addi %r11,%r31,16
    lwz %r31,-4(%r11)
    mr %r1,%r11
    blr