Функция 6 прерывания int 21h.

Входные параметры:вdl – 0ffh

Если в буфере есть символ, то его код возвращается в регистре al, а флаг процессора zf устанавливается в 0. Если в буфере нет символа, zf устанавливается в 1, а в al– «мусор». То есть, в отличие от предыдущей функции, здесь не ждут нажатия клавиши (так называемый ввод без ожидания).

ПРИМЕР: Проверка на нажатие ESC (код ESC = 1bh).

Mov dl, 0ffh

Mov ah, 6

Int 21h

jz m1; никакая клавиша не нажата (zf=1)

Cmp al, 0

je m2; нажата функциональная клавиша (в al из int 21h вернулся 0)

Cmp al, 1bh

je m3; нажата Esc

Функция 0ah прерывания int 21h.

Входные параметры: ds:dx - начальный адрес буфера в оперативной памяти

Ввод строки символов с клавиатуры в созданный заранее буфер. Формат буфера: в нулевом байте программист записывает ожидаемую длину строки, в первом байте подпрограмма вернет фактически набранную длину строки, далее будет записаны ASCII – коды набранных символов.

Вводимая строка набирается на клавиатуре и заканчивается на­жатием клавиши ENTER. В результате в буфер помещается следу­ющая информация:

байт 0 - ожидаемая длина строки;

байт 1 - фактическая длина строки;

байт 2 и далее - строка, заканчивающаяся ASCII-кодом клавиши ENTER (0dh).

ПРИМЕР:собираемся принять строку, состоящую из двадцати символов.

buf db 20, 0, 21 dup (0); сколько ожидаем, сколько получим, 20 байт под
; ожидаемый прием, плюс байт под код ENTER

.

.

.

Mov ah, 0ah

Mov dx, offset buf

int 21h ; здесь висим и ждем ввода информации

Пусть мы ввели 56 и нажали ENTER, тогда будем иметь в буфере (если смотреть в отладчике):

14 02 35 36 0D 00 …. 00

Здесь 14h – это 20 в шестнадцатеричной системе, 02 – число принятых символов, 35h – это ASCII – код цифры 5, 36h – ASCII – код цифры 6.

ПРЕРЫВАНИЯ BIOS ДЛЯ РАБОТЫ С КЛАВИАТУРОЙ

Функция 0 прерывания int 16h

Входные параметры: нет

Чтение символа из буфера клавиатуры. Если клавиша символьная, в al возвращается её ASCII-код, а в ah - её СКЭН - код. Если клавиша функциональная, в al возвращается 0, а в ah -её СКЭН - код. Если в буфере нет символа, подпрог­рамма ждет нажатия клавиши.

ПРИМЕР: Проверка на нажатие клавиши «стрелкa – вверх». Это функциональная клавиша и её СКЭН - код = 48h.

Mov ah, 0

Int 16h

Cmp al, 0

jne m1 ; нажата символьная клавиша

Cmp ah, 48h

je m2 ; нажата «стрелка – вверх»

Примечание: прерывание int 16h имеет аналогичную функцию 10h, предназначенную для работы с расширенной (101 клавиша) клавиатурой.

Функция 1 прерывание int 16h

Входные параметры: нет

Функция похожа на предыдущую, только не ждет нажатия клавиши. Если в буфере нет символов, флаг zf устанавливается в единицу. Внимание, эта функция не очищает буфер при считывании символа(от этого символа).То есть, если мы этой функцией прочтем символ из буфера, то в следующий раз мы прочтем оттуда тот же символ, и так до бесконечности. Решить эту проблему можно, например, так:

Mov ah, 1

Int 16h

jz nott; в буфере нет символа, уходим на метку nott

Mov al, 0

int 16h; читаем символ и очищаем буфер

А почему нельзя было здесь сразу использовать int 16hс функцией 0? Дело в том, что если у нас на экране что-то движется вне зависимости от нажатия клавиш (например, летает шарик), мы не можем останавливаться и ждать нажатия клавиши (на время ожидания шарик пропадет). В приведенном выше фрагменте мы проверяем буфер и, если в нем нет символа, прыгаем на дальнейшее обслуживание экранного движения. И только если в буфере гарантированно есть символ,мы используем int 16hс функцией 0.

Примечание:прерывание int 16hимеет аналогичную функцию 11h, предназначенную для работы с расширенной (101 клавиша) клавиатурой.

ПРЕРЫВАНИЯ DOS ДЛЯ РАБОТЫ С ЭКРАНОМ

Функция 2 прерывания int 21h

Входные параметры:в dl ASCII-код символа.

Выводит заданный символ в текущую позицию курсора. Курсор после вывода смещается на позицию вправо. Коды 7, 8, 0ah и 0dh (эти коды также задаются в dl) на экран не выводятся, а управляют перемещением курсора: 8 - на символ влево, 0ah - на строку вниз, 0dh - на начало строки, 7 – звонок.

ПРИМЕР: Вывести букву А в текущую позицию курсора.

Mov ah, 2

mov dl, 'A'

Int 21h

Функция 9 прерывание INT 21h

Входные параметры:в ds:dxадрес начала строки в оперативной памяти

Выводит, начиная с текущей позицией курсора, строку сим­волов из оперативной памяти. Конец строки задается сим­волом $. Коды 7, 8, 0ah и 0dh являются управляющими.

ПРИМЕР:

stroka db 'Я, ребята, студент',0dh,0ah,'$'

.

.

Mov ah, 9

Mov dx, offset stroka

Int 21h

ПРЕРЫВАНИЯ BIOS ДЛЯ РАБОТЫ С ЭКРАНОМ

Наши рекомендации