Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

Ins si ;Следующий символ в имени

Ins col ;Следующий столбец на экране

DES ACTNLEN ;Уменьшить счетчик длины

JNZ E20 ;Циклить n раз

CMP ROW,20 ;Последняя строка экрана?

JAE E30 ; нет

INC ROW

RET

E30: MOV AX,0601H ; да --

CALL Q10CLR ; очистить экран

RET

E10NAME ENDP

; Вывод символа на экран:

; ----------------------

F10DISP PROC NEAR ;BL (атрибут) уже установлен

MOV AN,09 ;Функция вывода на экран

MOV AL,[SI] ;Получить символ из имени

MOV BH,00 ;Номер страницы

MOV CX,01 ;Один символ

Int 10h ;Вызов bios

RET

F10DISP ENDP

; Очистка экрана:

; --------------

Q10CLR PROC NEAR ;AX установлен при вызове

MOV BH,07 ;Нормальный ч/б

MOV CX 0000

MOV DX,184FH

Int 10h ;Вызов bios

RET

Q10CLR ENDP

; Установить курсор (строка/столбец):

; ----------------------------------

Q20CURS PROC NEAR

MOV AN,02

MOV BH,00

MOV DH,ROW

MOV DL,COL

INT 10H

RET

Q20CURS ENDP

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.9.1. Мигание, инвертирование и прокрутка.

Для ввода имен в процедуре D10INPT используется команда DOS INT 21H.

Для замены на BIOS INT 10H необходимо:

1. Инициализировать счетчик для адреса области ввода и счетчик

для длины имени.

2. Выполнить INT 10H (функция 08) с 08 в регистре AH и 00 в BH.

Функция возвращает каждый символ в регистре AL.

3. Если регистр AL не содержит символа RETURN и счетчик длины

достиг максимального значения, выдать звуковой сигнал и выйти из

процедуры.

4. Переслать содержимое AL в область ввода имени.

5. Если регистр AL содержит символ RETURN, выйти из процедуры.

6. Увеличить счетчик длины и адрес области ввода имени.

7. Переместить курсор на один столбец.

8. Перейти на пункт 2.

При выходе из процедуры область ввода содержит имя и символ RETURN, а

счетчик - число введенных символов.

РАСШИРЕННЫЙ ASCII КОД

________________________________________________________________

ASCII-коды от 128 до 255 (шест. 80-FF) представляют собой ряд

специальных символов полезных при формировании запросов, меню, специальных

значков с экранными атрибутами. Например, используя cледующие символы

можно нарисовать прямоугольник:

Шест. Символ

DA Верхний левый угол

BF Верхний правый угол

C0 Нижний левый угол

D9 Нижний правый угол

C4 Горизонтальная линия

B3 Вертикальная линия

Следующие команды с помощью INT 10H выводят горизонтальную линию на

25 Позиций в длину:

MOV AH,09 ;Функция вывода на экран

MOV AL,0C4H ;Горизонтальная линия

MOV BH,00 ;Страница 0

MOV BL,0FH ;Выделение яркостью

MOV CX,25 ;25 повторений

MOV 10H ;Вызвать BIOS

Напомним, что курсор не перемещается. Вывод вертикальной линии

включает цикл, в котором курсор перемещается вниз на одну строку и

выводится символ шест. B3. Для штриховки может быть полезен символ с

точками внутри:

Шест. Символ

B0 Одна четверть точек (светлая штриховка)

B1 Половина точек (средняя штриховка)

B2 Три четверти точек (темная штриховка)

Можно извлечь много полезных идей, изучая программное обеспечение с

профессионально организованным выводом, или самому изобрести оригинальные

идеи для отображения информации.

ДРУГИЕ ОПЕРАЦИИ ВВОДА/ВЫВОДА В DOS

________________________________________________________________

Ниже перечислены другие функции DOS, которые могут оказаться

полезными в работе. Код функции устанавливается в регистре AH и, затем,

выдается команда INT 21H.

AH=01: Ввод с клавиатуры с эхо отображением. Данная функция

возвращает значение в регистре AL. Если содержимое AL не равно нулю, то

оно представляет собой стандартный ASCII- cимвол, например, букву или

цифру. Нулевое значение в регистре AL свидетельствует о том, что на

клавиатуре была нажата специальная функциональная клавиша, например, Номе,

F1 или PgUp. Для определения скэн-кода клавиш, необходимо повторить вызов

функции (см. "Дополнительные функциональные клавиши" в последующих

разделах). Данная функция реагирует на запрос Ctrl/Break.

AH=02: Вывод символа. Для вывода символа на экран в текущую позицию

курсора необходимо поместить код данного символа в pегистр DL. Коды

табуляции, возврата каретки и конца строки действуют обычным образом.

AH=07: Прямой ввод с клавиатуры без эхо отображения. Данная функция

работает аналогично функции 01 с двумя отличия ми: введенный символ не

отображается на экране, т.е. нет эхо, и oтсутствует реакция на запрос

Ctrl/Break.

AH=08: Ввод с клавиатуры без эхо отображения. Данная функция

действует аналогично функции 01 с одним отличием: введенный символ не

отображается на экран, т.е. нет эхо.

AH=0B: Проверка состояния клавиатуры. Данная функция возвращает шест.

FF в регистре AL, если ввод с клавиатуры возможен, в противном случае -