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



         

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


    малым объемом памяти, что невозможно при другой организации данных.
    Но лучшим является то, что программист не должен создавать сложную
    подсистему управления памятью, так как все находится под
    управлением стековой структуры.
 
      Оператор возврата из подпрограммы на Фиг. 4.7 демонстрирует еще
    одну возможность набора команд микропроцессора 8088. Команда
    возврата из подпрограммы RET может иметь операнд, который
    представляет собой значение, прибавляемое микропроцессором к
    содержимому указателя стека после извлечения адреса возврата. В
    примере используется значение 8; это означает, что восемь байт, или
    четыре слова данных должны быть удалены из стека после возврата.
    Эти значения исчезают навсегда. Результат тот же, какой был бы в
    итоге извлечения значений из стека, чтобы уничтожить их; команда
    возврата уже сделала это автоматически.
 
      Такой метод удаления информации из стека срабатывает только в
    случае параметров, которые вызывающая программа помешает в стек.
    Подпрограмма обязана удалить все динамически распределенные области
    памяти из стека перед выполнением возврата. Она должна сделать это
    явно, а не с помощью команды возврата, так как область данных лежит
    между текущей вершиной стека и адресом возврата.
 
      Подпрограмма может возвратить в стеке некоторую информацию
    вызывающей программе. Если вызывающая программа помешает параметры
    в стек, подпрограмма может изменить их значения и оставить в стеке,
    а вызывающая программа может извлечь их после возврата. Если
    подпрограмма возвращает только один параметр, но вызывалась с тремя
    параметрами в стеке, то выполнить возврат она может с помощью
    команды RET 4. При этом последние два параметра извлекаются из
    стека и только возвращаемый параметр остается в стеке.
      В гл.10, где мы используем подпрограммы на языке ассемблера с
    языками высокого уровня, головная программа помещает параметры в
    стек. Но эти параметры - адреса данных, а не собственно данные. Это
    означает, что ассемблерная подпрограмма не должна возвращать
    параметры в стеке и обязана извлечь все параметры из стека при
    возврате.



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