Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МАВЦ.464319.001ТУ 20140414 Семенов.doc
Скачиваний:
9
Добавлен:
01.07.2025
Размер:
2.98 Mб
Скачать

5.3 Видеооперации с прерыванием 21н dos

1. Вывод символа на экран дисплея: АН=2 или АН=6 и DL<>FFH. В регистре DL должен быть ASCII-код символа. Пример фрагмента программы (вывод символа «С»):

mov AH. 6

mov DL. 43H: 43H – это ASCII код символа «С»

int 21H

  1. Вывод строки символов: АН=9 (чаще всего используемая функция). В регистрах DS: DX должен быть начальный адрес строки символов, которая должна заканчи­ваться символом $. Пример фрагмента программы (вывод строки 'вывод строки символов$'):

Text db ‘вывод строки сиволов$'

mov AH. 9

mov DX. offset text : offset text – это адрес

: вывод строки

int 21H

  1. Вывод на экран текстового файла: АН=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. Чтение символа с клавиатуры (с ожиданием ввода) и отображением символа на экране дисплея: АН=1 или АН=6 и DL=OFFH; то же, но без отображения символа на экране дисплея: АН=7 или АН=8. Считанный символ (ASCII-код) — в регистре AL, (scan-код не формируется). Если к моменту запроса на чтение символа клавиша еще не нажата, то управление прерванной программе не будет возвращено до тех пор, пока клавиша не будет нажата. Если код клавиши расширенный (клавиши F1-F10, Alt, Ctrl и т. д.), то необходимо повторное чтение. Пример фрагмента программы чтения символа:

mov АН, 1

Int 21H

  1. Чтение строки символов с буферизацией: АН=ОАН. Для инициализации такого чтения необходимо:

  • задать буфер, указав в нем число символов строки, подлежащих вводу, директивой: 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.

  1. Чтение состояния клавиатуры: АН=ОВН. В регистр AL записывается 0, если буфер клавиатуры имеет хотя бы один символ.

  2. Очистка буфера клавиатуры и вызов функции: АН=ОСН. Обнуляется буфер клавиатуры и инициируется выполнение одной из 5 функций прерывания 21Н; в этом случае номер вызываемой функции должен быть записан не в регистре АН, а в регистре AL (AL-1,6,7,8 или ОА).

  3. Ввод с клавиатуры текстового файла: AH=3FH. Используются функции расширенного управления файлами MS-DOS по файловому указателю. Пример фрагмента программы для ввода с клавиатуры текстового файла Text, содержащего 50 байт:

text db 50 dupC ') ;задание поля памяти для ввода

mov АН. 3FH

mov ВХ, 0 указание устройства ввода

mov CX. 50 указание числа вводимых байтов

mov DX. Offset text :указание начального адреса

;поля памяти для ввода

Int 21H