Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КНИГА_АСМ ассемблер.doc
Скачиваний:
61
Добавлен:
19.11.2019
Размер:
732.16 Кб
Скачать

2. Функция 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 ДЛЯ РАБОТЫ С ЭКРАНОМ

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

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

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

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

mov ah, 2

mov dl, 'A'

int 21h

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

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

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

ПРИМЕР:

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

.

.

mov ah, 9

mov dx, offset stroka

int 21h

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

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

Входные параметры: в ch (биты 4-0) верхняя строка развертки курсора, в cl (биты 4-0) нижняя строка развертки курсора.

Подпрограмма позволяет установить конфигурацию (размер по вертикали) курсора. Стандартно (для цветных мониторов) верхняя граница курсора равна 6, а нижняя – 7. Если взять верхнюю границу равной 0, а нижнюю оставить равной 7, курсор будет максимально большим. Это же прерывание позволяет гасить курсор (делать его невидимым). Для этого надо взять ch = 20, cl = 0.

Пример:

mov ah, 1

mov ch, 20

mov cl, 0

int 10h

Фрагмент программы с такими параметрами гасит на экране курсор. Однако если Вы хотите скрыть курсор, советуем сделать это в самый последний момент, когда вся программа уже отлажена. Скрытый курсор может мешать процессу отладки, так как зачастую ошибка заключается в неправильном позиционировании курсора (за пределами экрана).