Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 2).doc
Скачиваний:
155
Добавлен:
08.03.2015
Размер:
380.93 Кб
Скачать

Команды циклических сдвигов

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

Команды циклического сдвига изменяют только флаги CF и OF. При этом CF формируется в соответствии со схемами, а OF  идентично командам логического сдвига.

Пример 3.89:

Пусть перед выполнением каждой команды (AL)=11011010b и CF=0. Тогда после выполнения команд циклического сдвига получим:

ROL AL, 1 ; (AL)=10110101, CF=1

ROR AL, 1 ; (AL)=01101101, CF=0

RCL AL, 1 ; (AL)=10110100, CF=1

RCR AL, 1 ; (AL)=01101101, CF=0

Команды циклического сдвига позволяют изменять порядок следования битов в операнде.

Пример 3.90:

Выполнить зеркальную перестановку битов в регистре AL.

Если расположение битов в регистре AL до операции имеет вид A7A6A5A4A3A2A1A0, то после нее оно должно быть A0A1A2A3A4A5A6A7.

Подобные задачи решаются путем выделения очередного бита операнда на флаге CF за счет сдвига в одну сторону с последующим включением его в накопитель результата сдвигом в другую сторону.

Фрагмент программы для решения этой задачи имеет вид:

RCL AL, 1 ; Выделение бита операнда на CF

RCR DL, 1 ; Включение бита операнда в накопитель результата

После 8-кратного повторения этого фрагмента в регистре DL будет получен требуемый результат.

3.11.4. Команды передачи управления

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

1) команды безусловных переходов;

2) команды условных переходов;

3) команды управления циклами;

4) команды для организации подпрограмм;

5) команды прерываний.

Все команды передачи управления не изменяют состояния флагов.

Команды безусловных переходов

К этой подгруппе относится единственная команда JMP, которая передаст управление по указанному адресу независимо от каких-либо условий. При этом переход может совершаться по прямому или косвенному адресу.

Команда прямого перехода записывается в формате JMP Labl и передает управление команде, помеченной меткой Labl. В зависимости от положения метки Labl относительно команды JMP могут совершаться короткий, ближний и дальний переходы.

Формат JMP Labl соответствует ближнему переходу (тип NEAR), когда команда JMP и метка Labl находятся в одном сегменте программного кода. В этом случае машинный код команды JMP содержит два байта для хранения дистанции disp до метки. При выполнении команды вычисляется адрес перехода (IP)=(IP)+disp(Labl) и управление передается в пределах всего сегмента.

Если метка находится в диапазоне от (128) до (+127) байтов от команды JMP, то для хранения дистанции может использоваться один байт. Для этого команда должна записываться в формате JMP SHORT Labl, что соответствует выполнению короткого перехода. Короткий переход является разновидностью ближнего перехода и выполняется за то же время. При коротком и ближнем переходах модифицируется только указатель команд IP.

В случае, если команда JMP и метка Labl находятся в различных сегментах программного кода, то переход является дальним (тип FAR). Для выполнения дальнего перехода команда в общем случае записывается в виде JMP FAR PTR Labl. В машинном коде этой команды находится полный логический адрес точки назначения в формате segment:offset, который и загружается в регистры CS:IP при ее выполнении.

Дальний переход может быть выполнен и командой JMP Labl, если где-то выше метка описана директивой LABEL как дальняя.

Пример 3.91:

; Прямые переходы

JMP Next ; Ближний переход на метку Next

JMP SHORT Cont ; Короткий переход на метку Cont

JMP FAR PTR Start ; Дальний переход на метку Start

JMP Begin ; Дальний переход на метку Begin, если

; Begin LABEL FAR

Команда косвенного перехода записывается в формате:

JMP источник

и передает управление по адресу, являющемуся содержимым операнда-источника. В качестве источника могут использоваться 16-битные РОН или ячейка памяти, адресуемая любым способом. Если адрес перехода задается регистром или словом в памяти, то команда JMP выполняет ближний косвенный переход. Если адрес перехода задается двойным словом в памяти, то выполняется дальний косвенный переход. При этом содержимое младшего слова указанного двойного слова загружается в регистр IP, а старшего  в регистр CS.

Пример 3.92:

; Косвенные переходы

JMP AX ;Ближний косвенный переход по адресу (AX)

JMP Alfa ;Ближний косвенный переход по

;ячейке памяти (Alfa DW ?)

JMP DWORD PTR [BX] ;Дальний косвенный переход