Команды управления программой

Опубликовано февраля 3, 2018 в Архитектура процессора Intel

Общие положения

По видам передач эти команды разделяются на два типа: внутрисегментные передачи типа NEAR и межсегментные передачи типа FAR.

Ремонт компьютеров в самаре

При ближней передаче управления в качестве адреса перехода задается адрес команды в том же сегменте кода. В связи с этим реализация передач управления осуществляется модификацией только одного регистра IP. Дальняя передача управления адресует команду в другом сегменте кода. В связи с этим реализация дальней передачи управления сопровождается модификацией двух регистров CS: IP.

Дальние передачи управления используются только в отношении команд безусловного перехода (JMP), вызова процедур (CALL) и возврата (RET). Для команд условных переходов и циклов используется только ближняя передача управления.

Способы формирования адреса перехода

В командах передачи управления могут использоваться следующие способы задания адреса перехода:

  • относительный;
  • прямой;
  • косвенный.

Относительный адрес перехода задастся в команде с помощью однобайтного или двухбайтного смещения, которое, в отличие от смещения, используемого для вычисления адреса операнда и называемого disp, называется diff. Это смещение задается относительно текущего значения указателя команды (IP). В соответствии с этим формирование адреса перехода реализуется путем сложения смещения с IP. Результат этого сложения пересылается в IP и тем самым обеспечивается выборка очередной команды программы по адресу перехода. Смещение в командах перехода рассматривается как знаковая величина. Таким образом можно обеспечить переходы в программе как вниз (в сторону больших адресов), так и вверх (в сторону меньших адресов). При использовании байтного смещения перед его сложением с двухбайтным IP необходимо произвести знаковое расширение смещения на старший байт.

Относительная передача управления с байтным смещением обычно называется переходом типа SHORT. Относительная передача управления может использоваться всеми командами передачи управления, однако переход типа SHORT нельзя использовать в команде CALL.

При использовании прямого адреса перехода в команде задается кроме кода операции еще 4 байта, представляющие собой полный адрес перехода в виде пары CS:IP. При этом младшие 2 байта (с меньшими адресами) задают новое значение IP, а старшие два байта (с большими адресами) задают новое значение CS. Этот способ задания адреса перехода имеет ограниченное использование только для команд JMP FAR и CALL FAR.

При косвенном задании адреса передачи управления в машинной команде используется постбайт адресации и возможные байты смещения disp. Постбайт адресации может адресовать регистр или память. При задании регистра реализуется ближняя передача управления, причем адрес перехода, замещающий значение IP, выбирается из адресуемого постбайтом регистра (косвенная регистровая адресация). В тех случаях, когда постбайт адресации адресует память, может использоваться либо ближняя, либо дальняя передача управления. При ближней передаче управления из памяти выбирается два байта, которые пересылаются в регистр IP. При дальней передаче управления из памяти выбирается четыре байта, пересылаемые в регистр IP (младшие байты) и CS (старшие два байта). Косвенное задание адреса передачи управления может использоваться только в командах JMP и CALL.