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


         

команда POP. Точно так же,


    команда POP. Точно так же, как и в случае скобок в арифметическом
    выражении, если посылки и извлечения из стека не сбалансированы,
    результаты будут неверны. Более того, несбалансированные команды
    PUSH/POP обычно приводят к возврату из подпрограмм по адресу
    значения данных, а не значения указателя команд из=за того, что
    микропроцессор 8088 записывает в стек адрес возврата. Обычно это
    вынуждает микропроцессор выполнять программу, которую программист
    никогда не писал. Поэтому баланс стековых команд обязателен. Будьте
    особенно внимательны в тех случаях, когда в программе есть условный
    переход вокруг стековых операций; можно легко выпустить из виду
    один из вариантов выполнения, что оставит стек несбалансированным.
 
      Наряду с сохранением данных, программа может использовать стек
    в качестве буфера при некоторых пересылках; в частности, не
    существует команды пересылки, которая бы переносила данные из
    одного сегментного регистра в другой. В обычном случае загрузка
    одного сегментного регистра из другого требует сначала загрузки его
    значения а промежуточный регистр. Это достигается следующей
    последовательностью из двух команд:
 
      MOV   AX,CS   ;переслать значение регистра
                    ;CS в регистр AX
      MOV   DS,AX   ;загрузить это значение в
                    ; регистр DS
 
      Каждая из этих команд имеет длину несколько байт, и эта
    последовательность разрушает содержимое регистра AX. Альтернативным
    подходом может быть
 
      PUSH  CS      ; регистр CS поместить в стек
      POP   DS      ; поместить это значение в регистр DS
 
      Результирующий эффект этой последовательности команд тот же,
    регистр DS загружается из регистра CS. Здесь длина программы -
    всего два байта, и к тому же не требуется промежуточный регистр.
    Однако эти две команды занимают больше времени, так как нужны
    дополнительные циклы чтения и записи в стек. Это - метод потери в
    скорости выполнения ради уменьшения размера объектного кода.

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