如何格式化汇编注释

时间:2011-11-02 17:49:39

标签: linux perl awk code-formatting

我有以下示例评论GAS代码

cmpb $45, (%ebx)  # 45 - ASCII '-'
jne r_filename
cmpb $118, 1(%ebx) # 118 - ASCII 'v'
jne r_filename
movl    $4,%eax        # write(
movl    $1,%ebx        #   STDOUT,
movl    $Leng, %edx     #   len *
movl    $Inform, %ecx #   *Buffer
int     $0x80          # );    

如何使用AWK格式化这样的评论:

cmpb $45, (%ebx)        # 45 - ASCII '-'
jne r_filename
cmpb $118, 1(%ebx)      # 118 - ASCII 'v'
jne r_filename
movl    $4,%eax         # write(
movl    $1,%ebx         #   STDOUT,
movl    $Leng, %edx     #   len *
movl    $Inform, %ecx   #   *Buffer
int     $0x80           # );  

5 个答案:

答案 0 :(得分:3)

Perl的答案也可以接受吗?

script.pl

#!/usr/bin/perl -w

while(<>) {
        if(m/^(.+?)\s*(#.*)?$/) {
                my ($code, $comment) = ($1, $2);

                if($comment) {
                        printf "%- 40s %s\n", $code, $comment;
                }
                else {
                        print "$code\n";
                }
        }
        else {
                print;
        }
}

称之为:

cat file.asm | perl script.pl

答案 1 :(得分:2)

自动拆分perl one-liner。 “如果没有解决,请不要修理它。”

perl -F/(#)/ -ape 'if (@F > 1) { $F[0] = sprintf "%-40s",$F[0]; $_ = "@F" }' file

答案 2 :(得分:2)

perl -pe'
    $_ = sprintf("%-23s %s", $1, $2)
       if /^([^#]+)(#.*)/;
' file.in > file.out

我在第一列的第一列留下了评论。使用/^([^#]*)(#.*)/缩进所有评论。

您也可以编辑文件,而不是创建新文件。

备份:

perl -i~ -pe'...' file

没有备份:

perl -i -pe'...' file

答案 3 :(得分:2)

来吧,伙计们,他指定了Awk:

 awk -F# '{printf "%-30.30s #%s\n", $1, $2}' $oldFile > $newFile

-F#使用井号作为分隔符。 printf格式化它。 %30.30s表示打印此字段左对齐30个字符宽。 %s只是说打印第二个字段。结果是:

cmpb $45, (%ebx)               # 45 - ASCII '-'
jne r_filename                 #
cmpb $118, 1(%ebx)             # 118 - ASCII 'v'
jne r_filename                 #
movl    $4,%eax                # write(
movl    $1,%ebx                #   STDOUT,
movl    $Leng, %edx            #   len *
movl    $Inform, %ecx          #   *Buffer
int     $0x80                  # );    

答案 4 :(得分:0)

index($0, "#") {
    $0 = sprintf("%-24s%s",
                 substr($0, 1, index($0, "#") - 1),
                 substr($0, index($0, "#")));
}
1