Я пытаюсь проанализировать следующий код в сборке.
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.
Спасибо