Assembler для начинающих


         

Передача параметров - часть 2


    стеке. Заметим, что смещения, используемые для доступа к данным в
    стеке, учитывают тот факт, что адрес возврата также был записан в
    стек в результате выполнения команды CALL.
 
      В подпрограмме этого примера в вершине стека лежит адрес
    возврата, и регистр BP содержит смещение этой ячейки. Двумя байтами
    ниже в стеке лежит помещенный последним параметр, регистр DX;
    далее, через двухбайтовые интервалы - регистры CX, BX и AX. Таким
    образом, правильным адресом для чтения параметра, содержащегося в
    регистре DX, будет [BP+2], а другие адреса следуют через
    двухбайтовые интервалы. В данном примере значение, находившееся в
    регистре DX, попадает в регистр AX, CX в BX и т.д.
 
      Подпрограмма может использовать регистр BP для адресации стека
    не только при передаче параметров. Подпрограмма может оказаться
    длинной и запутанной настолько, что хранить все необходимые ей во
    время выполнения значения в регистрах трудно. Помещение этих
    значений в стек и загрузка указателя этой области в регистр BP
    решает проблему.
 
      Многим подпрограммам в течение их выполнения также необходима
    локальная память, и подпрограммы могут динамически расположить ее в
    стеке. Всякий раз, когда программа вызывается, она может вычесть
    размер этой области памяти из содержимого указателя стека. Так как
    стек растет по направлению к младшим адресам, вычитание числа из
    регистра SP идентично помещению в стек такого же количества данных
    - за исключением тех данных, которые не инициализированы. После
    этого подпрограмма может использовать регистр BP для адресации
    такой области памяти. Когда наступает момент возврата, подпрограмма
    может прибавить соответствующее значение к указателю стека, и тем
    самым восстановить его прежнее значение. Динамическая организация
    данных означает, что программа использует область памяти только
    тогда, когда она необходима для работы, и не занимает эту память
    все остальное время, поэтому программу можно выполнять на машине с



Содержание  Назад  Вперед