Суть решения этой проблемы в следующем - нужно по мере необходимости изменять значения регистров SP и BP.
Когда требуется выделить память для локальных переменных, значение SP надо уменьшить и сохранить в BP.
При этом смещения ранее созданных переменных относительно BP изменятся, за этим надо внимательно следить.
Когда созданные переменные больше не нужны, надо восстановить прежнее значение SP и BP.
- Код: Выделить всё
; Начало процедуры
push bp ;Сохранение BP
mov bp,sp ;Копирование указателя стека в BP
sub sp,12 ;12 байт под локальные переменные
...
; Дальше потребовалось создать ещё локальных переменных
push bp
mov bp,sp
sup sp,8 ;Ещё 8 байт под локальные переменные
....
; Освободить 8 байт
mov sp,bp
pop bp
...
; Освободить 12 байт
mov sp,bp
pop bp
ret
Другой способ - использовать для похожих манипуляций команду ENTER -
http://asmworld.ru/spravochnik-komand/enter/ и LEAVE
У меня были примеры только где второй операнд команды равен 0.
А если сделать второй операнд не 0, то команда копирует указатели на вложенные кадры локальных переменных

Если интересно, поищи подробное описание работы этой команды.