2

IA32からY86

ATTアセンブリ

次のIA32アセンブリコードがあります。

Bubble:
.LFB0:
    pushl   %esi
    pushl   %ebx
    movl    16(%esp), %esi
    movl    12(%esp), %edx
    subl    $1, %esi
    andl    %esi, %esi
    jle .L1
.L7:
    xorl    %eax, %eax
.L5:
    movl    4(%edx,%eax,4), %ecx
    movl    (%edx,%eax,4), %ebx
    cmpl    %ebx, %ecx
    jge .L4
    movl    %ebx, 4(%edx,%eax,4)
    movl    %ecx, (%edx,%eax,4)
.L4:  
    addl    $1, %eax
    cmpl    %eax, %esi
    jg  .L5
    subl    $1, %esi
    jne .L7
.L1: 
    popl    %ebx
    popl    %esi
    ret

Y86アセンブリコードに変換しようとしています。比較命令の翻訳に問題があります:

 cmpl    %ebx, %ecx

ありがとう。

4

1 に答える 1

10

Y86にはcmp指示がないようです。ただし、、、がsubありpushますpop

したがってcmpl %ebx, %ecx、次のコードに変換できます。

pushl %ecx
subl  %ebx, %ecx
popl  %ecx

cmpとまったく同じですが、結果を保存しないsubという違いがあり、フラグを更新するだけです。cmpしたがって、cmpいつでも、、に置き換えることができますpushsubスタックpopに十分なスペースがある場合)。

于 2013-02-26T20:01:45.623 に答える