- •Глава 14 Элементы программирования на языке ассемблера После изучения данной главы вы должны знать:
- •Основные компоненты языка ассемблер Алфавит языка
- •Константы (числа и строки) Числа — только целые
- •Строки (литералы)
- •Команды (операторы)
- •Директивы (псевдооператоры)
- •Модификаторы
- •Адресация регистров и ячеек памяти в ассемблере
- •Непосредственная адресация
- •Прямая адресация регистров мпп
- •Адресация ячеек оп
- •Основные команды языка ассемблер
- •Команды пересылки данных
- •Арифметические команды
- •Команды сложения, вычитания и сравнения
- •Команды приращения
- •Команды умножения
- •Команды деления
- •Логические команды
- •Команды безусловной передачи управления
- •Команды перехода к подпрограмме и выхода из подпрограммы
- •Команда перехода к подпрограмме: call opr
- •Команда выхода из подпрограммы
- •Команды условной передачи управления
- •Команды условной передачи управления для беззнаковых данных
- •Команды условной передачи управления для знаковых данных
- •Команды условной передачи управления для прочих проверок
- •Команды управления циклами
- •Команды прерывания
- •Основные директивы ассемблера
- •Директивы определения идентификаторов
- •Директивы определения данных
- •Директивы определения сегментов и процедур
- •Видеооперации с прерыванием 21h dos
- •Программирование работы с клавиатурой
- •Программирование работы с принтерами
- •Печатающие устройства параллельного типа
- •Печатающие устройства последовательного типа
- •Программирование работы с файлами
- •Прерывания, используемые при работе с файлами на дисках
- •Некоторые аспекты создания исполняемых программ
- •Процедуры формирования программы
- •Структура программы на языке ассемблера для получения исполняемого файла формата exe
- •Основные сведения о листинге и его структуре
- •Особенности структуры машинных команд
- •Последовательность работы пк при выполнении программы
- •Краткие сведения об отладчике программ debug
- •Основные команды отладчика debug
- •Вопросы для самопроверки
Программирование работы с принтерами
При работе с печатающими устройствами могут быть использованы прерывания: 14Н и 17Н BIOS и 21Н (AH = 4 и 5) DOS. Следует различать программирование для печатающих устройств параллельного типа (информация передается на принтер побайтово по 8-битовой шине) и печатающих устройств последовательного типа (информация передается по одному проводу последовательно по 1 биту), подсоединяемых к любому последовательному порту микропроцессора.
Печатающие устройства параллельного типа
прерывание 17Н BIOS (номер принтера предварительно указывается в регистре DX):
послать 1 символ в устройство печати: AH = 0. ASCII-код символа предварительно должен быть помещен в регистр AL. В регистре AH после завершения вывода символа возвращается признак успешности результата;
инициировать принтер (посылка в порт служебных кодов): AH = 1;
получить состояние принтера (в регистре AH): AH = 2.
прерывание 21Н DOS, AH = 5:
вывести на печать один символ: AH = 5. ASCII-код символа предварительно записывается в регистр DL. Фрагмент программы печати символа C (ASCII-код символа C равен 43h):
mov AH, 5
mov DL, 43H
int 21H
Если необходимо отпечатать строку, то следует, используя это же прерывание, организовать вывод символов в цикле, каждый раз помещая в регистр DL ASCII-код очередного символа, а в конце строки и код CR возврата каретки (ASCII-код = 13) и/или LF — перевода строки (ASCII-код = 10). Фрагмент программы печати строки: «Я печатаю»:
text db 'Я печатаю', 13
...
mov SI, 0 ; обнуляем смещение адреса символа в строке
mov AH, 5
print: mov DL, text[SI]
; помещаем в DL очередной символ из строки text
int 21H
inc SI ; увеличиваем смещение адреса символа в строке на 1
cmp DL, 13
; сравниваем очередной символ с кодом возврата каретки
jne print
Печатающее устройство имеет свой буфер, где накапливает поступающие символы, пока не дождется символа CR или LF (поэтому возможна печать строки и в обратном направлении).
Вывести на печать текстовый файл: AH = 40h. Используются функции расширенного управления файлами MS DOS по файловому указателю. Пример фрагмента программы для вывода на печать текстового файла, содержащего 50 байтов:
text db 50 dup(' ')
...
mov AH, 40H
mov BX, 4 ; указание устройства вывода
mov CX, 50 ; указание числа выводимых байтов
mov DX, offset text ; указание начального адреса
; поля памяти, содержащей текст
int 21H
Печатающие устройства последовательного типа
прерывание 14Н BIOS (номер последовательного порта записывается в регистр DX):
инициализация параметров последовательного порта: AH = 0;
послать в порт один символ (если к порту подсоединен принтер, то и печать): AH = 1 и др.
прерывание 21Н DOS, AH = 4 (номер последовательного порта записывается в регистр DX):
вывести на печать один символ: AH = 4. ASCII-код символа предварительно помещается в регистр DL;
далее аналогично прерыванию 21Н DOS, AH = 5 для принтера параллельного типа и др.
Программирование работы с файлами
Файл — выделенная по какому-либо признаку поименованная совокупность информационных записей, хранящихся на диске. Каждой записи в пределах файла присваивается порядковый (тем самым уникальный) номер.
Запись идентифицируется своим адресом:
адрес_записи = имя_файла:номер_записи.
Файловая система поддерживает два типа доступа к записям файла:
последовательный метод доступа;
прямой метод доступа.
Механизм доступа к файлу и его записям при программировании также имеет два варианта:
доступ к файлу с использованием специальной таблицы — управляющего блока файла (FCB);
доступ к файлу по идентификатору (ASCIIZ) и логическому номеру.
Использование FCB для обращения к файлу позволяет реализовать и произвольный и последовательный методы организации доступа, но часто оказывается довольно сложным, поэтому на практике, если не требуется выполнять детализированные процедуры с отдельными дорожками и секторами диска, чаще применяется обращение к файлу по идентификатору.