我有一些组装件要清理。它具有所有上限,不一致的间距和许多不需要的换行符。

如何美化此x86_64汇编代码?

最佳答案

我不知道特定于汇编的任何内容,但是您提到的内容可以使用sed完成。

需要注意的几件事:


助记符由正则表达式[A-Za-z0-9]+匹配。在我头顶上,我想不出任何包含其他字符的助记符。
GPR的上半部分由r(8|9|1[0-5])(b|w|d)匹配吗?
字节GPR(不包括r8b-r15b)由[abcd](l|h)|(sp|bp|si|di)l匹配
16位,32位和64位低8 GPR与[er]?([abcd]x|sp|bp|si|di)匹配
SSE寄存器可以与正则表达式xmm(1[0-5]?|[0,2-9])匹配


例如:

# Replace tabs with spaces, then clean up lines of the form "op reg/imm, ..."
# N.B. without the /I option the match will be case-sensitive
sed 's/\t/ /g' <test.s | sed 's/^\s*\([a-z0-9][a-z0-9]*\)\s\s*\([a-z0-9][a-z0-9]*\)\s*,\s*/\t\1\t\2, /I'

# Lowercase all GPRs and SSE vector registers"
# I have chosen not to use the more compact patterns above in the interest of readability.
... | sed '/\([^a-z]\)\(AL|AH|AX|EAX|RAX|...XMM0|XMM1|...|XMM15\)/\1\L\2/gI'

# Lowercase all instruction mnemonics. More specifically, matches the first thing on every line except when it is followed by a colon.
... | sed '/^\s*\([a-z0-9][a-z0-9]*\)\([^:]\)/\L\1\2/I

关于assembly - 如何清理格式错误的x86_64程序集?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39564119/

10-11 15:59