15. Классификация переходов

Для осуществления любого перехода необходимо в регистр CS и/или IP занести новые значения, соответствующие месторасположению следующей выполняемой команды.. Отсюда вытекает первая классификация переходов: переход называется близким (или внутрисегментнным) переходом, если при этом меняется только значение регистра IP, если же при переходе меняются значения обоих регистров, то такой переход будем называть дальним (или межсегментным) переходом.
Очевидно, что при близком переходе следующая выполняемая команда будет обязательно располагаться в том же сегменте кода, а при дальнем – уже в любом месте оперативной памяти (отсюда понятны названия этих переходов – близкие и дальние по отношению к текущему сегменту кода).



Следующей основой для классификации переходов будет служить способ изменения значения регистров. При относительном переходе происходит знаковое сложение содержимого регистра с некоторой величиной, например, IP := (IP ± Value) mod 2 16 При абсолютном переходе происходит просто присваивание соответствующему регистру нового значения: CS := Value и/или IP := Value

  • Далее, относительные переходы будут классифицироваться по величине той константы Value, которая прибавляется к значению счетчика адреса IP.При коротком переходе величина этой знаковой константы не превышает по размеру одного байта (напомним, что она обозначается i8, т.е. лежит в диапазоне от –128 до +127): IP := (IP + i8)mod 2 16 , а при длинном переходе эта константа имеет размер слова (двух байт): IP := (IP + i16)mod 2 16. Легко понять, что абсолютные переходы делать короткими бессмысленно, так как они могут передавать управление только в самое начало (первые 256 байт) оперативной памяти или сегмента кода.
  • Для классификации абсолютных переходов используется месторасположение величины, используемой для задания нового значения какого-либо из этих регистров. При прямом переходе эта величина является просто числом (здесь это непосредственный адрес в самой команде i8, i16 или i32). При косвенном переходе нужная величина располагается в памяти или на регистре, а в команде перехода задается адрес той области памяти (или номер того регистра), откуда и будет извлекаться необходимое число, например: IP := [m16] или IP := r16



По событию вызвавшему переход можно выделить:

  • Переходы, вызванные выполнением центральным процессором специальных команд переходов.
  • Переходы, которые автоматически выполняет центральный процессор при наступлении определенных событий в центральной части компьютера или в его периферийных устройствах (устройствах ввода/вывода).
17.07.2015