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


         

программе нужно ввести код из


            001F  8B 4E 06                     MOV     CX, [BP+6]      ; Выборка второго параметра (BX)
            0022  8B 56 08                     MOV     DX, [BP+8]      ; Выборка первого параметра (AX)
                                   ;           ...
            0025  C2 0008                      RET     8               ; Возврат с уничтожением поля параметров
            0028                   SUBROUTINE      ENDP
            0028                   CODE    ENDS
                                         END
 
                 Фиг. 4.7 Операции со стеком
 
    программе нужно ввести код из порта ввода=вывода 3DAH, а в регистре
    DX находятся важные данные. Следующая последовательность команд
 
      PUSH  DX
      MOV DX,                                         3DAH
      IN  AL,                                         DX
      POP DX
 
      сохраняет регистр DX в стеке на то время, пока он нужен в
    программе для выполнения команды IN.
 
      Операции сохранения регистров в стеке обычно используется в
    начале программы. В большинстве случаев подпрограмма старается
    избегать изменения содержимого любого регистра. Поэтому
    подпрограмма, которой нужны регистры для вычислений и для хранения
    адресов, помещает все необходимые ей регистры в стек до выполнения
    команд обработки. Затем, после выполнения, подпрограмма
    восстанавливает регистры из стека с помощью команд POP.
 
      Помните о том, что стек - это структура типа LIFO. Если в вашей
    программе выполняется последовательность команд
 
      PUSH  BX
      PUSH CX
      POP BX
      POP CX
 
      то результирующим эффектом будет обмен значений в регистрах BX
    и CX. Только тот факт, что в команде PUSH был указан регистр BX, не
    означает, что команда POP, указывающая на тот же регистр,
    восстанавливает первоначальное содержимое регистра BX. Еще одним
    важным моментом является то, что команды PUSH и POP должны быть
    сбалансированы, т.е. каждой команде PUSH должна соответствовать

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