- •Глава 14 Элементы программирования на языке ассемблера После изучения данной главы вы должны знать:
- •Основные компоненты языка ассемблер Алфавит языка
- •Константы (числа и строки) Числа — только целые
- •Строки (литералы)
- •Команды (операторы)
- •Директивы (псевдооператоры)
- •Модификаторы
- •Адресация регистров и ячеек памяти в ассемблере
- •Непосредственная адресация
- •Прямая адресация регистров мпп
- •Адресация ячеек оп
- •Основные команды языка ассемблер
- •Команды пересылки данных
- •Арифметические команды
- •Команды сложения, вычитания и сравнения
- •Команды приращения
- •Команды умножения
- •Команды деления
- •Логические команды
- •Команды безусловной передачи управления
- •Команды перехода к подпрограмме и выхода из подпрограммы
- •Команда перехода к подпрограмме: call opr
- •Команда выхода из подпрограммы
- •Команды условной передачи управления
- •Команды условной передачи управления для беззнаковых данных
- •Команды условной передачи управления для знаковых данных
- •Команды условной передачи управления для прочих проверок
- •Команды управления циклами
- •Команды прерывания
- •Основные директивы ассемблера
- •Директивы определения идентификаторов
- •Директивы определения данных
- •Директивы определения сегментов и процедур
- •Видеооперации с прерыванием 21h dos
- •Программирование работы с клавиатурой
- •Программирование работы с принтерами
- •Печатающие устройства параллельного типа
- •Печатающие устройства последовательного типа
- •Программирование работы с файлами
- •Прерывания, используемые при работе с файлами на дисках
- •Некоторые аспекты создания исполняемых программ
- •Процедуры формирования программы
- •Структура программы на языке ассемблера для получения исполняемого файла формата exe
- •Основные сведения о листинге и его структуре
- •Особенности структуры машинных команд
- •Последовательность работы пк при выполнении программы
- •Краткие сведения об отладчике программ debug
- •Основные команды отладчика debug
- •Вопросы для самопроверки
Строки (литералы)
Строки символов: включают в себя любые буквы, цифры и символы, но заключаются в кавычки: "ПЭВМ IBM PC с микропроцессором 80386".
Команды (операторы)
Формат команды:
[Метка [:]] КОП [Операнд] [,Операнд] [;Комментарий].
Между элементами команды вставлены пробелы.
Здесь и далее элементы, заключенные в квадратные скобки, необязательны.
КОП (Код ОПератора) — мнемокод команды (состоит из 2–6 букв). Может быть до 256 различных кодов (в ассемблере IBM PC их число изменяется в зависимости от типа МП. Например: 133 в МП 8088, 240 в МП 80386).
Операнд — явно заданный адрес (прямой или косвенный); имя метки, переменной; само значение переменной; ассоциативный признак и т. п. Количество необходимых в команде операндов ассемблер узнает по КОП. В большинстве двухадресных команд присутствуют операнды приемника (dst — destination) и источника (src — source); источник не изменяет своего содержания, в приемнике 1-е число, участвующее в операции, заменяется результатом.
Метка — имя команды ассемблера для ссылки (обращения) к этой команде (до 31 символа). Двоеточие, стоящее после метки, означает, что метка всегда находится в текущем сегменте памяти.
Комментарий — любой текст, поясняющий человеку программу (не воспринимается ассемблером, но выводится в листинге).
Директивы (псевдооператоры)
Директивы, в отличие от команд, выполняются только в процессе ассемблирования (трансляции) программы, а не в ходе решения задачи на компьютере. То есть команды — это инструкции машине, а директивы — это инструкции ассемблеру (транслятору).
Формат директивы:
[Идентификатор] КПОП [Операнд] [,Операнд]... [;Комментарий]
Как и в случае команд, поле директивы может начинаться в любом месте строки программы при условии, что оно отделено от предыдущего поля хотя бы одним пробелом.
Идентификатор — имя директивы (для обращения к ней).
КПОП (Код ПсевдоОПератора) — мнемокод директивы (состоит из 2–7 букв).
Операнды — их в директиве может быть много; это уже не только адреса, но и различные процедуры. В операндах могут быть записаны простые выражения, использующие модификаторы (операции).
Модификаторы
В операторах и псевдооператорах языка ассемблер иногда используются модификаторы, которые определяют ту или иную операцию, учитываемую при трансляции программы. Существует 5 видов модификаторов: арифметические, логические, отношений, возвращения значений и присваивания атрибутов. Наиболее часто используются модификаторы (mdf):
Арифметические модификаторы: «+» — сложить, «-» — вычесть, «*» — умножить, «/» — разделить, mod — остаток от деления и т. д. Формат: opr mdf opr.
Логические модификаторы: and — «и», or — «или», not — «не», и xor — исключающее «или». Формат: opr mdf opr.
Модификаторы отношения: eq — совпадения, nq — несовпадения, lt — меньше, gt — больше, le — меньше или равно, ge — больше или равно. Формат: opr mdf opr.
Модификаторы, возвращающие значения:
$ — возвращает значение смещения адреса текущего оператора;
seg — возвращает адрес сегмента адреса метки или переменной;
offset — возвращает смещение адреса метки или переменной;
length — возвращает длину операнда в единицах определения (байтах или словах);
type — возвращает атрибут типа переменной (1, если byte; 2 — word, 3 — dword) или метки (1 — near, 3 — far);
size — возвращает произведение length*type. Формат: mdf opr.
Модификаторы присваивания атрибута:
ptr — изменяет атрибут типа (byte, word или dword) операнда или атрибут дистанции (near или far) адресного операнда. Формат: тип ptr opr. (Здесь: тип — новый атрибут, opr — идентификатор операнда, чей атрибут должен быть изменен.);
ds:, es:, cs:, ss: — изменяет атрибут сегмента адреса. Формат: rsegm:адрес. (Адрес может быть задан именем сегмента, переменной, меткой или адресным выражением.);
short — дополняет атрибут near метки оператора переxoда, указывает, что переход осуществляется на расстояние не более ±128 байтов от текущей команды. Формат: short метка;
high — возвращает старший байт 16-битового значения opr. Формат: high opr;
low — возвращает младший байт 16-битового значения opr. Формат: low opr.
В программах используются:
атрибуты дистанции:
near — близкий, в пределах одного сегмента;
far — далекий, за пределами одного сегмента;
атрибуты типа данных:
byte — длиной 1 байт;
word — длиной 2 байта;
dword — длиной 4 байта.