Код, связанный с меткой .L2 кода сборки, вызывается процедурно в этом сегменте? - PullRequest
0 голосов
/ 08 февраля 2012

Я пытаюсь проанализировать следующий код в сборке.

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, потому что он сразу после него, или он автоматически переходит на две последние строки после выполнения .L3?

Кроме того, я мог бы использовать несколько советов по чтению ассемблерного кода; Я пытаюсь найти окончательные значения eax и edx.

Спасибо

1 Ответ

1 голос
/ 08 февраля 2012

Вы правы: после перехода к .L3 все 6 инструкций между ним и ja .L3 будут выполняться по порядку, и этот процесс будет повторяться до тех пор, пока не будет выполнен условный переход.

Звукикак будто вы хорошо читаете код:)

...