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


Близкие и далекие переходы



Близкие и далекие переходы


    Команды перехода модифицируют указатель команды IP, и, возможно,
    регистр сегмента кодов CS.      Эти регистры показывают, какая
    следующая команда должна быть выполнена.  Команда перехода является
    специальным случаем пересылки MOV данных в регистр или пару
    регистров; и некоторые ЭВМ действительно выполняют команду перехода
    именно таким способом.  Однако способы загрузки пары регистров
    CS:IP в микропроцессоре 8088 во многом отличаются от способов,
    используемых для других регистров.
 
      Прежде всего мы должны ввести некоторые определения. Если
    команда перехода изменяет только регистр IP, это близкий переход
    (NEAR=переход), так как переход происходит внутри сегмента. Если


    переход изменяет регистр CS, это далекий FAR=переход.
      Аттрибуты NEAR и FAR используются при работе ассемблера. Любая
    программная метка в программе на языке ассемблера имеет атрибут
    либо NEAR, либо FAR, так же, как данные имеют атрибуты BYTE или
    WORD. В некоторых примерах этой главы имеются процедуры, которые
    используют атрибут NEAR в операторе PROC. Это означает, что метка,
    связанная с оператором PROC (имя процедуры) имеет атрибут NEAR.
    Ассемблер использует эту информацию для того, чтобы определить,
    какой тип команды перехода или вызова породить при переходе к этой
    метке. Поскольку большинство процедур - подпрограммы, атрибут NEAR
    или FAR оператора PROC также определяет тип порождаемой команды
    возврата. Вызов FAR=процедуры сохраняет значения как регистра CS,
    так и регистра IP, тогда как вызов NEAR=процедуры оставляет в стеке
    только значение регистра IP. Команда возврата должна учитывать,
    какой тип вызова юыл сделан, чтобы подпрограмма могла вернуться к
    правильному месту.




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