- •Программное управление — основа автоматизации вычислительного процесса
- •2 Состав машинных команд
- •3 Режимы работы компьютеров
- •3.1 Однопрограммные и многопрограммные режимы
- •I.Система прерываний программ в пк
- •3.2 Адресация регистров и ячеек памяти в пк
- •3.3 Относительная адресация
- •II.Стековая адресация
- •3.4 Элементы программирования на языке ассемблер
- •4 Основные компоненты языка ассемблер
- •4.1Алфавит языка
- •4.2 Константы (числа и строки)
- •4.3 Директивы (псевдооператоры)
- •4.4 Модификаторы
- •4.5 Адресация регистров и ячеек памяти в ассемблере
- •4.6 Непосредственная адресация
- •4.7 Прямая адресация регистров мпп
- •4.8 Адресация ячеек оп
- •Основные команды языка ассемблер
- •A.Команды пересылки данных
- •I.Команды сложения, вычитания и сравнения
- •1.Команды приращения
- •A.Команды умножения
- •I.Команды безусловной передачи данных
- •4.9 Команды перехода к подпрограмме и выхода из подпрограммы
- •4.10 Команда перехода к подпрограмме: call opr
- •4.11 Команда выхода из подпрограммы
- •4.12 Команды условной передачи управления
- •4.13 Команды условной передачи управления для беззнаковых данных
- •4.14 Команды условной передачи управления для знаковых данных
- •4.15 Команды условной передачи управления для прочих проверок
- •4.16 Команды управления циклами
- •4.17 Команды прерывания
- •4.18Основные директивы ассемблера
- •4.19 Директивы определения идентификаторов
- •4.20 Директивы определения данных
- •Директивы определения сегментов и процедур
- •4.21 Директивы управления трансляцией
- •5 Краткие сведения о программировании процедур работы с устройствами ввода-вывода
- •5.1 Программирование работы с дисплеем
- •5.2 Видеооперации с прерыванием 10н bios
- •5.3 Видеооперации с прерыванием 21н dos
- •5.4 Программирование работы с клавиатурой
- •5.5 Программирование работы с принтерами
- •5.6 Печатающие устройства параллельного типа
- •5.7 Печатающее устройство последовательного типа
- •5.8 Программирование работы с файлами
- •5.9 Прерывания, используемые при работе с файлами на дисках
- •5.10 Некоторые аспекты создания исполняемых программ
- •5.11 Процедуры формирования программы
- •5.12 Структура исходной программы на языке ассемблера для получения исполняемой программы .Ехе
- •5.13 Основные сведения о листинге и его структуре
- •5.14 Особенности структуры машинных команд
- •5.14 Последовательность работы пк при выполнении программы
- •6 Краткие сведения об отладчике программ debug
- •6.1 Основные команды отладчика debug
4.18Основные директивы ассемблера
Напомним, что директивы (псевдооператоры) — это инструкции ассемблеру, то есть они выполняются только при ассемблировании (транслировании) программы. Приведем некоторые из часто используемых директив.
4.19 Директивы определения идентификаторов
Присваивают идентификатору с данным именем некоторое текстовое или числовое значение (выражение). Формат директив:
имя EQU текст
имя = число значение (выражение)
Разница между псевдооператорами EQU и =:
EQU — присваивает значение постоянно (изменять нельзя), текст может быть символьным, числовым или смешанным выражением, определяющим константу, адрес, другое символьное имя, метку и т. д.;
= — выполняет текущее присвоение (значение может быть переприсвоено, но только при трансляции, естественно); присваивает только числовое выражение, содержащее простые математические преобразования, которые при трансляции и будут выполнены (например, const+1,15H*4, 3*12/4 и т. д.).
4.20 Директивы определения данных
Используются для идентификации переменных и полей памяти. Формат директивы
[имя] D* выражение [.выражение] [ ] .
D* может быть:
a DB (define byte) — определить байт (1 байт);
Q DW (define word) — определить слово (2 байт);
a DD (define dword) — определить двойное слово (4 байт);
a DQ(define 8 byte) — определить8байт;
Q DT (define 10 byte) — определить 10 байт.
Рассматриваемые директивы определяют переменную (имя) или присваивают полям (ячейкам) памяти начальные значения; резервируют в памяти один или несколько байт — DB, слов — DW, двойных слов — DD и т. д. (с более поздним присвоением значения).
Выражение показывает, какое количество элементов памяти необходимо выделить и какие данные там должны содержаться. Выражение может быть:
константой: const DB 56; const DW 1936; const DD 3FFH. Обязательно следует учитывать диапазон и вместимость байта, слова и т. д.; так, для DB константа не может быть больше 255, для DW - 65535, для DD - (65535)Л2=4294836225;
вектором или таблицей: tab!el DB 30,4,-15,0,0,0,56; table2 DW 1936,3004,56,15. В одном псевдооператоре можно поместить строку до 132 позиций, причем вместо повторения одного и того же значения несколько раз (0 в tablet) можно использовать псевдооператорDUP(duplicate— дублировать):tab!el DB 30,4,-15,3 dup(0),56);
строкой символов: strl DB 'Вы ввели слишком большое число1; str2 DB 'Bad command1; в псевдооператоре DB строка может содержать 255 символов, во всех остальных (DW. DD, DQ, DT) — только два символа.
пустым полем: polel DB ?; pole2 DW 12 dup(?), при этом в элементы резервируемой памяти ничего не записывается (записывается не 0, как, например, в директиве ро!еЗ DW 5 dup(0), а просто резервируются ячейки памяти);
символическим именем переменной: varl DW dlsp; var2 DD vector (одна переменная определяется адресом другой, в директивах указывать offset не надо, ибо имя переменной воспринимается как ее адрес). Такой вариант может использоваться, например, для хранения адресов ячеек памяти, меток, на которые можно ссылаться в программе (varl DW dlsp), причем если переменная находится в том же сегменте, что и ссылающаяся команда, то достаточно в качестве адреса указать только смещение (2 байт), то есть обойтись DW; если же переменная находится в другом сегменте, то необходимо указать и сегмент, и смещение (всего 4 байт), то есть следует использовать уже DD (var2 DD vector);
простым выражением: fnl DB 80*3; fn2 DW (disp)+256, вычисляемым, естественно, только при трансляции программы.
