2

アセンブリで次のコードを分析しようとしています。

sub $48, %esp
mov $56, 44(%esp)
mov $3, 40(%esp)
mov $0, 36(%esp)
mov 44(%esp), %eax
mov %eax, 32(%esp)
jmp .L2
.L3:
mov 32(%esp), %eax
sub 40(%esp), %eax
mov %eax, 32(%esp)
add $1, 36(%esp)
.L2:
mov 32(%esp), %eax
cmp 40(%esp), %eax
ja .L3
mov 36(%esp),%eax
mov 32(%esp),%edx

私の理解が明確であれば、最初の 6 行は正常に呼び出され、プログラムは .L2: にジャンプしてコードを実行します。R[eax] == R[40 + R[esp] の場合、コードは .L3 に移動します。

私の質問は、この後どうなるかです。.L3 が実行され、コードが .L2 の直後にあるためにコードが .L2 に移動しますか、それとも .L3 の実行後に最後の 2 行に自動的にジャンプしますか?

さらに、アセンブリ コードの読み取りに関するいくつかのヒントを使用できます。eax と edx の最終的な値を見つけようとしています。

ありがとうございました

4

1 に答える 1

3

正解です。.L3 にジャンプした後、そこから ja .L3 までの 6 つの命令すべてが順番に実行され、条件付きジャンプが実行されなくなるまで、そのプロセスが繰り返されます。

コードをうまく読んでいるようですね:)

于 2012-02-08T16:28:13.947 に答える