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


Адресация переходов



Адресация переходов


    Если адрес перехода или вызова подпрограммы является частью самой
    коамнды (как данные в командах с непосредственным операндом), это -
    непосредственный переход.  Если адрес перехода команды содержится в
    регистре или ячейке памяти, это - косвенный переход, так как
    команда требует загрузки адреса, извлекаемого из некоторого
    промежуточного места хранения; программа не может перейти прямо в
    необходимое место, и должа идти туда косвенно.
 
      Существует два метода вычисления адреса перехода. Если в
    команде указано значение адреса, это абсолютный переход, т.е.
    переход по абсолютному адресу. Команда может указать место
    перехода, как некоторое расстояние от нее самой. Этот метод


    перехода называется относительным переходом.
 
      Преимущество относительных переходов заключается в том, что
    программа наиболее часто переходит к близлежащим ячейкам; команда
    перехода может использовать однобайтовое смещение. Если смещение
    трактуется, как число в дополнительном коде, то двухбайтовая
    команда относительного перехода (один байт - код операции, и один
    байт - смещение) может выполнить переход на 127 байт вперед или на
    128 байт назад внутри программы. Микропроцессор 8088 имеет два типа
    относительных переходов: один имеет однобайтовое смещение, другой -
    двухбайтовое.
 
      В микропроцессоре 8088 все условные переходы имеют однобайтовое
    смещение. Иногда это неудобно, например в случае условного перехода
    к ячейке, находящейся на расстоянии в 150 байт от текущего места.
    В таких случаях программа должна использовать пару переходов,
    условный и безусловный; далее приводится пример такого метода
    перехода. В обычных же случаях однобайтовые смещения условных
    переходов в микропроцессоре 8088 минимизируют объем программы,
    необходимой для реализации любой заданной функции.
 
      При расчете смещения относительного перехода микропроцессор
    8088 отсчитывает смещения от значения указателя команд, которое
    получится после выполнения команды. Фиг. 4.26 показывает разные
    примеры команд относительного перехода. Если точка перехода следует
    непосредственно за переходом, смещение равно 0. При переходе к
    самой команде перехода смещение равно -2. При двухбайтовом смещении
    переход может быть сделан в диапазоне -32768 - 32767 байт от
    значения регистра IP после выполнения команды перехода.




Содержание раздела