- •Программное управление — основа автоматизации вычислительного процесса
- •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
5.3 Видеооперации с прерыванием 21н dos
1. Вывод символа на экран дисплея: АН=2 или АН=6 и DL<>FFH. В регистре DL должен быть ASCII-код символа. Пример фрагмента программы (вывод символа «С»):
mov AH. 6
mov DL. 43H: 43H – это ASCII код символа «С»
int 21H
Вывод строки символов: АН=9 (чаще всего используемая функция). В регистрах DS: DX должен быть начальный адрес строки символов, которая должна заканчиваться символом $. Пример фрагмента программы (вывод строки 'вывод строки символов$'):
Text db ‘вывод строки сиволов$'
mov AH. 9
mov DX. offset text : offset text – это адрес
: вывод строки
int 21H
Вывод на экран текстового файла: АН=40Н. Стандартные файловые указатели определяют тип и устройство ввода-вывода:
0 Ввод с клавиатуры;
1 Вывод на экран дисплея;
2 Вывод на экран сообщения об ошибке;
3 Ввод-вывод на внешнее устройство;
4 Вывод на печать.
Для ввода используется функция AH=3FH прерывания 21Н, для вывода используется функция АН=40Н прерывания 21Н. В регистр СХ предварительно заносится число вводимых-выводимых байтов, а в регистр DX записывается начальный адрес поля памяти для ввода-вывода. В случае успешного завершения процедуры ввода-вывода обнуляется флаг переноса CF, а в регистр АХ возвращается количество фактически переданных байтов. При неудачной операции флаг CF устанавливается в 1, а в регистр АХ заносится код ошибки. Приведенный ниже пример содержит фрагмент программы для вывода на экран текстового файла Text, содержащего 50 байт.
text db 50 dupC ')
mov АН, 40Н
mov BX. 1 ;указание устройства вывода
mov CX, 50 ;указание числа выводимых байт
mov DX, offset text ;указание начального адреса
;поля памяти, содержащего текст
int 21H
5.4 Программирование работы с клавиатурой
При программировании работы с клавиатурой могут быть использованы прерывания 16Н BIOS и прерывания 21Н (АН= 1, б, 7, 8, А, В, С) DOS.
Прерывание 16Н BIOS предусматривает достаточно простые операции обмена данными с клавиатурой, полезные при написании программ, выполняемых независимо от операционной системы DOS. Так, при АН=0 и 1 считываются из буфера клавиатуры scan-код клавиш в регистр АН и ASCII-код клавиш в регистр AL; при АН=2 в AL возвращается байт состояния клавиатуры — состояние управляющих клавиш: Shift, Ctrl, Alt, Scroll Lock, Mum Lock и Insert; при АН=3 — устанавливаются режимы работы клавиатуры в IBM PCjr.
Ввод с клавиатуры по прерыванию 21Н DOS предполагает:
Чтение символа с клавиатуры (с ожиданием ввода) и отображением символа на экране дисплея: АН=1 или АН=6 и DL=OFFH; то же, но без отображения символа на экране дисплея: АН=7 или АН=8. Считанный символ (ASCII-код) — в регистре AL, (scan-код не формируется). Если к моменту запроса на чтение символа клавиша еще не нажата, то управление прерванной программе не будет возвращено до тех пор, пока клавиша не будет нажата. Если код клавиши расширенный (клавиши F1-F10, Alt, Ctrl и т. д.), то необходимо повторное чтение. Пример фрагмента программы чтения символа:
mov АН, 1
Int 21H
Чтение строки символов с буферизацией: АН=ОАН. Для инициализации такого чтения необходимо:
задать буфер, указав в нем число символов строки, подлежащих вводу, директивой: buf DB n.0,0……..0,0 (buf — имя поля, которое, в принципе, может быть и любым другим); количество нулей в директиве должно быть на два больше, чем n (n — максимальное количество вводимых символов), на место следующего «О» будет после ввода записано количество фактически введенных символов, на место последующих «О» будут введены ASCII-коды символов строки и еще один «О» для кода клавиши Enter — 13;
занести в регистр DS: DX адрес буфера.
При выполнении рассматриваемого прерывания управление прерванной (основной) программе возвращено не будет до тех пор, пока не нажаты все клавиши и клавиша Enter. При нажатии каждой очередной клавиши ее код записывается в буфер клавиатуры и отображается на дисплее, но из буфера поступит в основную программу (в поле buf) только после нажатия клавиши Enter. Если до Enter клавиш нажато больше, чем указано в буфере, то раздастся звонок и лишние символы восприняты не будут.
Пример фрагмента программы чтения строки символов:
buf DB 9,0,0.0,0.0,0,0,0,0,0,0
mov АН, ОАН
mov DX, offset buf
int 21H
В поле буфера будут записаны ASCII-коды символов строки, и если в программе предусмотрены операции над двоичными кодами символов (цифр) строки, то необходимо преобразовать ASCII-коды в двоичный код числа, используя, например, процедуру STR2BIN.
Чтение состояния клавиатуры: АН=ОВН. В регистр AL записывается 0, если буфер клавиатуры имеет хотя бы один символ.
Очистка буфера клавиатуры и вызов функции: АН=ОСН. Обнуляется буфер клавиатуры и инициируется выполнение одной из 5 функций прерывания 21Н; в этом случае номер вызываемой функции должен быть записан не в регистре АН, а в регистре AL (AL-1,6,7,8 или ОА).
Ввод с клавиатуры текстового файла: AH=3FH. Используются функции расширенного управления файлами MS-DOS по файловому указателю. Пример фрагмента программы для ввода с клавиатуры текстового файла Text, содержащего 50 байт:
text db 50 dupC ') ;задание поля памяти для ввода
mov АН. 3FH
mov ВХ, 0 указание устройства ввода
mov CX. 50 указание числа вводимых байтов
mov DX. Offset text :указание начального адреса
;поля памяти для ввода
Int 21H
