Локальные переменные

Локальные переменные

Сообщение Bizunov » Пт окт 14, 2011 3:11 pm

Всем привет. Помогите пожалуйста разобраться с проблемой, а именно, с созданием локальных переменных. Проблема заключается в том, что мне нужно создавать переменные не все сразу, а по очереди, так сказать. Какие существуют способы решения данной проблемы?
Bizunov
наблюдатель
 
Сообщения: 2
Зарегистрирован: Пт окт 14, 2011 3:05 pm

Re: Локальные переменные

Сообщение xrnd » Чт окт 27, 2011 7:01 pm

Суть решения этой проблемы в следующем - нужно по мере необходимости изменять значения регистров 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, то команда копирует указатели на вложенные кадры локальных переменных :shock:
Если интересно, поищи подробное описание работы этой команды.
xrnd
автор
 
Сообщения: 133
Зарегистрирован: Вс июл 04, 2010 11:03 pm

Re: Локальные переменные

Сообщение Bizunov » Вс окт 30, 2011 4:23 pm

Хех, спаибо :)
Bizunov
наблюдатель
 
Сообщения: 2
Зарегистрирован: Пт окт 14, 2011 3:05 pm


Вернуться в Ассемблер в DOS

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron