четверг, 28 мая 2009 г.

Ассемблер и параметры

Иногда требуется передать в процедуру параметр. Конечно, можно использовать регистры, но это не всегда возможно. Тогда на помощь приходит стэк. Правда, сопряжено с небольшой проблемой: после входа в процедуру в стэк заносится адрес возврата, и если был передан параметр, то он оказывается "вторым". Безусловно, можно заниматься собиранием ханойских башен в попытках достать нужное, но есть способ проще.
Стэк позволяет обращаться к себе со смещением, т.е. не к верхнему элементу. Пример:

lea di, mas
push di
call my_proc

my_proc PROC
mov bp,sp
mov di, [bp+2]
......
mas объявлен как dw, поэтому смещение == 2.
bp был задействован в силу ограниченности использования указателя стэка sp

Комментариев нет:

Отправить комментарий