- •02H/03h - Чтение/запись секторов.
- •Язык Ассемблер
- •Сегментация памяти
- •Структура программы на языке Ассемблер
- •В более общем случае операнды могут входить как составные части в более сложные образования, называемые выражениями. Типы операторов
- •Режимы адресации
- •Директивы ассемблера
- •Директива задания исходных данных:
- •Директива использования сегментных регистров по умолчанию:
- •Упрощенные директивы определения сегмента
- •Идентификаторы, создаваемые директивой model
- •Модели памяти
- •Инструкции пересылки данных и двоичной арифметики
- •Запись программ на языке ассемблера
- •Пример записи формулы
- •Текст программы:
- •Варианты заданий
- •Циклические и разветвляющиеся программы
- •Команда сравнения
- •Безусловные переходы
- •Условный переход
- •Пример написания программы работы с массивами слов
- •Варианты заданий
- •Применение логических инструкций
- •Логические инструкции
- •Примеры использования логических команд
- •Пример выполнения работы
- •Варианты заданий
- •Обработка символьной информации с помощью функций dos
- •Программные прерывания и системные вызовы
- •Функция оан
- •Функция 0Bh
- •Пример выполнения работы
- •Варианты заданий
Команда сравнения
CMP – сравнивает два операнда путем вычитания второго операнда из первого. Значения операндов при этом не меняются. Используется для дальнейшего анализа командой условного перехода.1-ый операнд = Рг или переменная, 2-ой операнд = число, Рг или переменная |
CMP r/m, r CMP r, r/m |
CMP AX,BX CMP AX,[BX] CMP AX,3 CMP D,AX
|
Безусловные переходы
Инструкция безусловного перехода передаёт управление команде, адрес которой указан в инструкции. Команда безусловного перехода имеет вид
JMP - безусловный переход - передает управление по адресу.
Переход можно осуществлять как в пределах одного сегмента, так и в другой сегмент. |
JMP r/m JMP i |
JMP [BX] JMP метка |
В программах используют имя метки, установленной перед командой, на которую выполняется переход.
Типы переходов:
- переход типа short (короткий) – если адрес перехода находится в пределах от –127 до +128 байт от команды, вызвавшей переход;
- переход типа near (ближний) – если адрес перехода находится в том же сегменте, что и команда, вызвавшей переход;
- переход типа far (дальний) – если адрес перехода находится в другом сегменте.
jmp [< тип > ptr ] операнд.
<тип> - тип перехода short (короткий) – смещение 127 байтов вперёд или 128 байтов назад, near (близкий) – смещение в пределах сегмента (64 Кбайта), far (дальний) – в любой сегмент с любым смещением.
ptr – приставка, которую можно перевести как указанный в.
Если тип не задан, по умолчанию принимается near.
Всего можно выделить пять типов безусловных переходов (таблица 3.1).
Таблица 3.1 |
||
Типы команд безусловного перехода |
||
Название |
Мнемоника |
Описание |
внутрисегментный прямой короткий |
jmp short <операнд> |
IP ← (IP) + 8-битное смещение, определяемое операндом |
внутрисегментный прямой близкий переход |
jmp near ptr <операнд> |
IP ← (IP)+16-битное смещение, определяемое операндом |
внутрисегментный косвенный переход |
jmp <адрес операнда> |
IP ← 16-битный адрес перехода |
Межсегментный прямой далекий переход |
jmp far ptr <операнд> |
IP ← смещение операнда в сегменте CS ← адрес сегмента, содержащего операнд |
Межсегментный косвенный далёкий переход |
jmp far ptr <адрес операнда> |
IP ← операнд CS ← адрес операнда +2 |
Условный переход
Команда условного перехода организует передачу управления при выполнении определённого в команде условия, в противном случае переход осуществляется на команду, следующую за инструкцией условного перехода. Условия определяются текущим состоянием флагов процессора. Каждая из 30 команд условных переходов проверяет определенную комбинацию флагов.
Все условные переходы являются короткими, т.е. адрес перехода должен отстоять не далее, чем на - 128 или +127 байтов от первого байта следующей команды.
Jусловие - условный переход .
Это набор команд, выполняющих переход, если удовлетворяется соответствующее условие. При использовании после команды cmp, условия приобретают формулировки, соответствующие отношениям между операндами cmp.
Значение аббревиатур в названии команды jcc
-
Обозначение
Англ.
Русский
Тип операндов
e
equal
Равно
любые
n
not
Не
любые
g
greater
Больше
числа со знаком
l
less
Меньше
числа со знаком
a
above
Выше (больше)
числа без знака
b
bellow
Ниже (меньше)
числа без знака
Эти команды осуществляют переходы типа short и near
Перечень команд условного перехода для команды cmp
-
Условие
Мнемокод
со знаком
без знака
ОП-1 = ОП_2
je equal
ОП-1 < >ОП_2
jne not equal
ОП-1 < ОП_2
jl low
jnqe not greater or equal
jb below
jnae not above or equal
ОП-1 <= ОП_2
jle low or equal
jng not greater
jbe below not equal
jna not above
ОП-1 > ОП_2
jg greater
jnle not low or equal
ja above
jnbe not below or equal
ОП-1 => ОП_2
jge greater or equal
jnl not lower
jae above or equal
jnb not below
Циклы
Инструкция, организующая программный цикл имеет вид:
loop[<условие повторения цикла>] <метка короткого перехода>
Инструкция loop использует содержимое регистра СХ как счетчик повторений цикла. Команда loop уменьшает содержимое регистра СХ на 1 и передает управление по адресу, определяемому меткой перехода, если содержимое СХ ≠ 0, в противном случае выполняется следующая за LOOP инструкция. Подобно условным переходам инструкции этой группы могут осуществлять только короткие передачи управления, т.е. в пределах от -128 до +127.
Добавление к инструкции loop <условие повторения цикла> позволяет ввести дополнительные логические условия на повторение цикла:
loope/loopz – повторять, пока ноль;
loopne/loopnz – повторять, пока не ноль.
Проверка флага ZF осуществляется командой loop. Цикл повторяется, если содержимое СХ ≠ 0 и выполняется соответствующее условие, в противном случае выполняется следующая за loop инструкция.
