
- •Организация памяти.
- •Прграммная модель мп.
- •Ввод - вывод.
- •Внутренние операции мп.
- •Организация обмена с ву.
- •Прерывания.
- •Система команд и режимы адресации мп.
- •Программирование мп.
- •Команды передачи данных.
- •Команды арифметических операций.
- •Команды логических операций и сдвигов.
- •Команды передачи управления.
- •Команды управления мп.
- •Примеры программ.
- •Директивы.
- •Структура ассемблерной программы.
- •Пример оформления программы.
- •2. Порядок выполнения работы.
- •3.Варианты заданий:
- •Контрольные вопросы.
- •5 Содержание отчета.
- •6 Список литературы.
Команды логических операций и сдвигов.
ЛОГИЧЕСКИЕ ОПЕРАЦИИ
AND dst, src ;dst := dst * src Логическое поразрядное умножение
Базовая индексная
адресация. Адрес (SS)
* 16 + (BP)
+ (DI).
Содержимое этой ячейки поразрядно
умножается на константу. Флаги OF,
CF,
SF,
ZF
= 0; PF
= 1 (в результате четное число единиц).
(DI) = 3500
(BP) = 6000
(SS) = A800
(B1500) = 39AF
(B1500) = 900h
OR dst, src ;dst := dst + src Логическое поразрядное сложение
XOR dst, src ;dst := dst Å src Поразрядное исключающее ИЛИ
TEST dst, src ; dst + src Поразрядное логическое умножение без изменения операндов, меняются только флаги.
Всегда логические команды переводят флаги OF и CF в ноль, состояние флагов SF, ZF, PF зависит от полученного результата.
NOT src ; src := src Поразрядная инверсия. Флаги не меняет.
СДВИГИ.
Разделяются на циклические сдвиги, циклические сдвиги через перенос, логические и арифметические. Первый операнд команды задает регистр или ячейку памяти, второй - число сдвигов, которое может указываться в регистре CL или быть константой 1. Флаг CF всегда содержит значение последнего выдвинутого бита. Флаги SF, ZF, PF в сдвигах через перенос не определены, в остальных изменяются в соответствии с результатом.
;Циклический сдвиг через
перенос содержимого регистра DL
влево. Старший разряд записывается в
CF,
а старое значение CF
заносится в младший разряд
(CF) =0
(DL) = 3A = 0011 1010
(CF) = 1
(DL) = 0111 0101 =75h,
;Циклический сдвиг через
перенос вправо ячейки с адресом (DS)
* 16 + (SI)
(индексная адресация) на 3 разряда
(содержимое CL).
Младший разряд записывается в CF,
а предыдущее значение CF
заносится в старший разряд.
RCR [SI], CL
(SI) = 1500
(DS) = EF00
(CL) = 3
(CF) = 1
(F0500) = 4C = 0100 1100 Þ 1010 0110 Þ 0101 0011 Þ0010 1001 = 29, (CF) = 1.
;Циклический сдвиг влево
содержимого регистра BX
После каждого сдвига старший разряд
BX
записывается в CF
и в младший разряд BX.
(BX) = ABCD
(CL) = 5
(BX) =
;Циклический сдвиг вправо
ячейки с адресом (SS)
* 16 + (BP)
+ 40 (базовая адресация). После каждого
сдвига младший разряд записывается в
CF
и в старший разряд переменной.
ROR [BP + 40h], 1
(BP) = 2000
(SS) = 4F00
(51040) = 75 = 0111 0101 Þ 1011 1010 = BA
SHL и SHR - логический сдвиг влево и вправо. Выдвигаемый бит теряется, а в освобождаемый записывается 0. Например:
SHR DH, CL
(CL) = 2
(DH) = 93 = 1001 0011 Þ 0100 1001 Þ 0010 0100 =24
SAL и SAR - арифметический сдвиг влево и вправо. Сдвиг влево не отличается от логического, а при сдвиге вправо знаковый разряд не сдвигается, а тиражируется. Эти команды практически реализуют умножение и деление на степень двойки.
Команды передачи управления.
В линейных программах команды размещаются в памяти по порядку и для выбора следующей команды достаточно увеличить счетчик команд IP. На практике линейными программами обойтись нельзя. В циклических и ветвящихся программах, а также при вызове подпрограмм требуется выполнять не следующую по порядку команду, а команду с адресом перехода. Для этого служат команды передачи управления, которые модифицируют регистры CS и IP. Сегментная организация памяти определяет два типа команд передачи управления - близкие (NEAR), когда передача происходит внутри сегмента - изменяется только IP и далекие (FAR), когда управление передается за пределы текущего сегмента и надо менять пару CS : IP.
БЕЗУСЛОВНОГО ПЕРЕХОДА.
JMP dst
Если операнд представляет собой метку, то происходит передача управления команде с этой меткой. В остальных случаях управление передается команде, адрес которой содержится в регистре или ячейке памяти. Например
JMP E8 ;смещение отрицательное Е8 = -18. значит будет переход назад на
(PC) = 1240 18 байт.
(IP) = 1228
JMP BX ;переход на адрес, указанный в регистре BX
(BX) = 3000
(IP) = 3000
M0: ; пример бесконечного цикла.
ADD AX, 01h
ADD AX, BX
SHL CX, 1
JMP M0
УСЛОВНОГО ПЕРЕХОДА.
Всего 19 штук. Анализируют состояние флажков по некоторому условию. Если условие истинно - происходит короткий переход, если нет - выполняется следующая по порядку команда. При необходимости передать управление за пределы действия команды условного перехода - используется дополнительно команда JMP.
JC - переход если есть перенос.
JE - переход если равно.
JG - переход если больше.
JL - переход если меньше.
JS - переход если отрицательное.
JZ - переход если нуль.
MOV AX, 255 ;(AX) = 00FF, (SF) = 1
AND AL, AL ;флаг SF не изменяется
JS NEXT ; Будет выполнена передача управления на метку NEXT
ВЫЗОВА ПОДПРОГРАММ.
CALL dst ;Обращение к процедуре. Если операнд является меткой, то управление передается команде с этой меткой. В остальных случаях - команде, адрес которой содержимся в регистре или памяти. Вызов может быть внутрисегментным (NEAR) или межсегментным (FAR). Практически выполняет те же действия, что и команда JMP. Дополнительно: Адрес возврата сохраняется в стеке. В процедуре должна быть команда возврата RET. Пример рассмотрим позднее.
УПРАВЛЕНИЯ ЦИКЛАМИ.
LOOP lab
В качестве счетчика цикла используется регистр CX. Команда LOOP уменьшает на 1 его содержимое и если оно не равно нуль передает управление по адресу (внутрисегментному - NEAR), указанному в операнде (Это может быть метка, регистр или ячейка памяти). Например:
MOV CX, 10 ;Число циклов
M0:
ADD AX, 01h
ADD AX, BX
SHL CX, 1
LOOP M0 ;Уменьшает CX и повторяет цикл если не ноль
Команда эквивалентна двум: DEC CX
JNZ M0
ПРЕРЫВАНИЯ.
INT num ;Генерирует программное прерывание с номером num. (Аналогично внешним прерываниям по входу INT). Сохраняет в стеке регистр флагов, обнуляет TF (флаг трассировки) и IF(флаг прерываний), затем сохраняет CS : IP и загружает новое значение CS : IP из таблицы векторов. Широко применяются прерывания DOS и BIOS. Их использование мы рассмотрим позднее.