PowerPC GCC打印程序集中的寄存器,不带%符号
在Matt Godbolt的网站上,您可以使用各种预安装的编译器编译代码。当使用PowerPC gcc 4.8时,无法区分寄存器和直接寄存器(例如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汇编程序中很常见),其中寄存器不使用任何类型的特殊前缀:它们只是用数字引用。是的,这使得很难区分它们
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