Зависает программа без ошибки
Компилятор: FASM
Опции ассемблера: $SOURCE$ $PROGRAM.OBJ$ -s $LSTOUTPUT$
Опции компоновщика: $PROGRAM.OBJ$ $MACRO.OBJ$ -g -o $PROGRAM$ -m32
format ELF
section '.text' executable
public _main
_main:
push ebp
mov ebp, esp
ret
Данный кусок кода, зависает. Хотя тут ничего толком не происходит. Если убрать push ebp - все будет хорошо. Почему оно так?
Ответы (1 шт):
Автор решения: LShadow77
→ Ссылка
Если в процедуре есть пролог
push ebp ;сохраняем базу предыдущего фрейма
mov ebp,esp ;записываем базу нового фрейма
sub esp,vars_size ;резервируем фрейм локальных переменных (если они есть)
то, соответственно, должен быть и эпилог
mov esp,ebp ;возвращяем указатель стека к сохранённой старой базе
pop ebp ;восстанавливаем старую базу
Если у вас EBP/ESP не меняются (например, когда нет локальных переменных и переданных параметров), то и пролог/эпилог не нужен. В процедуре, которая ничего не делает достаточно всего лишь одной инструкции - ret.