- •Глава 14 Элементы программирования на языке ассемблера После изучения данной главы вы должны знать:
- •Основные компоненты языка ассемблер Алфавит языка
- •Константы (числа и строки) Числа — только целые
- •Строки (литералы)
- •Команды (операторы)
- •Директивы (псевдооператоры)
- •Модификаторы
- •Адресация регистров и ячеек памяти в ассемблере
- •Непосредственная адресация
- •Прямая адресация регистров мпп
- •Адресация ячеек оп
- •Основные команды языка ассемблер
- •Команды пересылки данных
- •Арифметические команды
- •Команды сложения, вычитания и сравнения
- •Команды приращения
- •Команды умножения
- •Команды деления
- •Логические команды
- •Команды безусловной передачи управления
- •Команды перехода к подпрограмме и выхода из подпрограммы
- •Команда перехода к подпрограмме: call opr
- •Команда выхода из подпрограммы
- •Команды условной передачи управления
- •Команды условной передачи управления для беззнаковых данных
- •Команды условной передачи управления для знаковых данных
- •Команды условной передачи управления для прочих проверок
- •Команды управления циклами
- •Команды прерывания
- •Основные директивы ассемблера
- •Директивы определения идентификаторов
- •Директивы определения данных
- •Директивы определения сегментов и процедур
- •Видеооперации с прерыванием 21h dos
- •Программирование работы с клавиатурой
- •Программирование работы с принтерами
- •Печатающие устройства параллельного типа
- •Печатающие устройства последовательного типа
- •Программирование работы с файлами
- •Прерывания, используемые при работе с файлами на дисках
- •Некоторые аспекты создания исполняемых программ
- •Процедуры формирования программы
- •Структура программы на языке ассемблера для получения исполняемого файла формата exe
- •Основные сведения о листинге и его структуре
- •Особенности структуры машинных команд
- •Последовательность работы пк при выполнении программы
- •Краткие сведения об отладчике программ debug
- •Основные команды отладчика debug
- •Вопросы для самопроверки
Команды сложения, вычитания и сравнения
Команды сложения, вычитания и сравнения — двухадресные.
ADD dst, src — сложение двоичных чисел (add — сложить). Прибавляет байт или слово из памяти, регистра непосредственно к содержимому регистра или прибавляет байт или слово из регистра непосредственно к памяти (содержимое src складывается с содержимым dst). Операнды dst и src должны иметь одинаковый формат (оба или байт или слово) и тип данных: src — r, m, i; dst — r, m (невозможно rsegm, i и нельзя, чтобы оба типа были m или оба rsegm). Команда ADD формирует флаги AF, CF, OF, PF, SF и ZF.
SUB dst, src — вычитание двоичных чисел (substract — вычесть). Вычитает байт или слово, взятое из памяти, регистра или непосредственно из содержимого регистра, или вычитает байт или слово, взятое из регистра или непосредственно из памяти (содержимое src вычитается из содержимого dst). Операнды dst и src должны иметь одинаковый формат (оба или байт или слово) и могут быть: src — r, m, i; dst — r, m (невозможно rsegm и нельзя, чтобы оба типа были m). Команда SUB формирует флаги AF, CF, OF, PF, SF и ZF.
CMP dst, src — сравнение (compare — сравнить). Сравнивает содержимое двух полей данных; фактически команда вычитает второй операнд (src) из первого (dst), но значение dst не изменяет, а лишь формирует флаги. Операнды dst и src должны иметь одинаковый формат (оба или байт или слово) и могут быть: src — r, m, i; dst — r, m (невозможно rsegm, i и нельзя, чтобы оба типа были m или оба rsegm). Команда CMP формирует флаги: CF, ZF при сравнении чисел без знака, CF, OF, SF, ZF при сравнении чисел со знаком; флаги AF, PF не определены.
Команды приращения
Команды приращения — одноадресные.
INC dst: инкремент (increment — нарастить). Прибавляет 1 к содержимому dst. Операнд dst может быть представлен оператором типа r или m. Команда INC формирует флаги PF, AF, ZF, SF, ОF.
DEC dst: декремент (decrement — уменьшить). Вычитает 1 из содержимого dst. Операнд dst может быть представлен оператором типа r или m. Команда DEC формирует флаги PF, AF, ZF, SF, ОF.
Команды умножения
Команды умножения — одноадресные. Указывается только SRC (множитель); DST (множимое) задается строго определенным образом.
MUL src — умножение (multiply — умножение без знака). Выполняет умножение беззнакового множимого (8 или 16 битов) на беззнаковый множитель (8 или 16 битов). Команда одноадресная — указывается только SRC (множитель); DST (множимое) берется строго определенным образом. SRC может быть представлен оператором типа r или m (i — нельзя). Если формат SRC — байт, то множимое (байт) находится в AL, произведение (слово) будет в AX; если формат SRC — слово, то множимое (слово) извлекается из AX, произведение (двойное слово) помещается в DX:AX (старшие два байта в DX, младшие — в AX). Команда MUL формирует флаги CF, OF; воздействует на флаги AF, PF, SF, ZF (флаги не определены).
IMUL src — целое умножение знаковых чисел (integer multiply — умножение целых со знаком). Выполняет умножение знакового множимого (8 или 16 битов) на знаковый множитель (8 или 16 битов). Команда одноадресная — указывается только SRC (множитель); DST (множимое) берется строго определенным образом. SRC может быть представлен оператором типа r или m (i — не допускается). Если формат SRC — байт, то множимое (байт) извлекается из AL, произведение (слово) будет в AX; если формат SRC — слово, то множимое (слово) находится в AX, произведение (двойное слово) заносится в DX:AX (старшие два байта результата в DX, младшие — в AX). Команда IMUL формирует флаги CF, OF; воздействует на флаги AF, PF, SF, ZF (флаги не определены).