Опубликован: 05.04.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Лекция 6:

Режимы адресации и форматы команд 16-разрядного процессора

< Лекция 5 || Лекция 6: 123 || Лекция 7 >

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

Команды косвенных переходов (внутрисегментных и межсегментных) передают управление на команду, адрес которой определяется содержимым регистра или ячеек оперативной памяти, на которые указывает закодированный в команде перехода постбайт.

Команды условных переходов являются только внутрисегментными. По своему формату и способу формирования нового значения IP они полностью аналогичны команде внутрисегментного прямого перехода с 8-разрядным смещением. Отличие их заключается в том, что в командах условного перехода механизм формирования нового значения IP включается лишь при выполнении определенных условий, а именно, при определенном состоянии регистра флагов. При невыполнении проверяемого условия в IP остается его текущее значение, то есть адрес команды, следующей за командой условного перехода.

Ниже приведены примеры команд переходов различных типов.

  • Команды условного перехода:

    формат:


    IP = IP + 2, если условие не выполнено;

    IP = IP +2 + disp L, если условие выполнено;

    пример:

    JZ MARK ; переход на метку MARK, если ZF = 1.

  • Команды прямого внутрисегментного перехода:

    формат:


    IP = IP + \Delta  + disp, где \Delta - длина команды перехода (2 или 3 в зависимости от длины смещения);

    примеры:

    JMP short ptr MARK ; переход на метку MARK, с использованием 8-разрядного смещения;

    JMP near ptr MARK ; переход на метку MARK, с использованием 16-разрядного смещения.

  • Команды прямого межсегментного перехода

    формат:


    IP = IP_H, IP_L,

    CS = CS_H, CS_L;

    пример:

    JMP far ptr MARK ; переход на метку MARK к команде, находящейся в другом сегменте.

  • Команды косвенного внутрисегментного перехода:

    формат:


    IP = [EA + 1, EA] ; или

    IP = <регистр>, если в постбайте задано обращение к регистровой памяти;

    пример:

    JMP word ptr [BX + SI] ; новое значение IP берется из двух последовательных байт памяти, эффективный адрес первого из которых определяется суммой регистров BX и SI.

  • Команды косвенного межсегментного перехода:

    формат:


    IP = [EA + 1, EA],

    CS = [EA + 3, EA + 2];

    пример:

    JMP dword ptr [BX + SI] ; сумма регистров BX и SI определяет эффективный адрес области памяти, первые два байта которой содержат новое значение IP, а следующие два байта - новое значение CS.

Команды циклов идентичны по формату и очень близки по выполняемым действиям командам условных переходов. Однако по сравнению с последними они имеют ряд особенностей, позволяющих эффективно использовать их при программировании циклических участков алгоритмов.

Один из наиболее распространенных видов циклического участка программы представлен на рис. 6.3.

Структура счетного цикла с постпроверкой

Рис. 6.3. Структура счетного цикла с постпроверкой

Команды циклов предназначены для упрощения действий декремента (уменьшения на 1) счетчика цикла, проверки условия выхода из цикла и перехода.

Некоторые команды цикла реализуют выход из цикла не только по значению счетчика, но и при выполнении некоторых других условий.

Описание команд цикла сведено в табл. 6.5. За исключением команды JCXZ, которая не изменяет значения регистра CX, при выполнении команд циклов производятся следующие действия: CX=(CX)-1. Затем, если проверяемое условие выполнено, то IP=(IP)+disp8 с расширением смещения знаком до 16 разрядов, в противном случае IP не изменяется, и программа продолжает выполнение в естественном порядке.

Таблица 6.5. Команды циклов
Название Мнемоника Альтернативная мнемоника КОП Проверяемое условие
Зациклить LOOP 11100010 (CX)=0
Зациклить пока ноль (равно) LOOPZ LOOPE 11100001 (ZF=1)&(CX)=0)
Зациклить пока не ноль (неравно) LOOPNZ LOOPNE 11100000 (ZF=0)&((CX)=0)
Перейти по (CX) JCXZ 11100011 (CX)=0
< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Илья Бекиров
Илья Бекиров
Кирилл Кондратьев
Кирилл Кондратьев
Сергей Пантелеев
Сергей Пантелеев
Россия, Москва
Ахмет Арчаков
Ахмет Арчаков
Россия, Магас