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

Inc si ;Получить адрес

Inc si ; следующего слова

LOOP B30 ;10 циклов

Команда MOV по метке B30 обозначает пересылку слова из двух пробелов

по адресу, находящемуся в регистре SI. В последнем примеpе используется

команда LEA для инициализации регистра SI и несколько иной способ в

команде MOV по метке В30, так как нельзя закодировать, например, следующую

команду:

MOV WORD PTR[NAMEFLD],2020H ;Неправильно

Очистка входной области решает проблему ввода коротких имен, за

которыми следуют предыдущие данные. Еще более эффективный cпособ

предполагает очистку только тех байт, которые расположены после введенного

имени.

ЭКРАННЫЕ И КЛАВИАТУРНЫЕ ОПЕРАЦИИ: РАСШИРЕННАЯ ВЕРСИЯ DOS

________________________________________________________________

Рассмотрим теперь расширенные возможности, введенные в DOS 2.0

(реализованные в стиле операционной системы UNIX). Если вы используете

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

раздела. Расширенные возможности включают файловый номер (file handle),

который yстанавливается в регистре BX, когда требуется выполнить операцию

ввода/вывода. Существуют следующие стандартные файловые номера:

0 Ввод (обычно с клавиатуры) CON

1 Вывод (обычно на экран) CON

2 Вывод по ошибке (на экран) CON

3 Ввод/вывод на внешнее устройство AUX

4 Вывод на печать LPT1 или PRN

Прерывание DOS для ввода/вывода - INT 21H, необходимая функция

запрашивается через регистр AH: шест.3F - для ввода, шест.40 - для вывода.

В регистр CX заносится число байт для ввода/вывода, а в регистр DX - адрес

области ввода/вывода.

В результате успешного выполнения операции ввода/вывода очищается

флаг переноса (CF) и в регистр AX устанавливается действительное число

байт, участвующих в операции. При неуспешной oперации устанавливается флаг

CF, а код ошибки (в данном случае 6) заносится в регистр AX. Поскольку

регистр AX может содержать как длину данных, так и код ошибки, то

единственный способ определить наличие ошибки - проверить флаг CF, хотя

ошибки чтения с клавиатуры и вывода на экран - явления крайне редкие.

Аналогичным oбразом используются файловые номера для дисковых файлов,

здесь oшибки ввода/вывода встречаются чаще.

Можно использовать эти функции для перенаправления ввода-вывода на

другие устройства, однако эта особенность здесь не рассматpивается.

ВЫВОД НА ЭКРАН: РАСШИРЕННАЯ ВЕРСИЯ DOS

________________________________________________________________

Следующие команды иллюстрируют операцию вывода на экран в расширенной

версии DOS:

DISAREA DB 20 DUP(' ') ;Область данных

...

MOV AH,40H ;Запрос на вывод

MOV BX,01 ;Выводное устройство

MOV CX,20 ;Максимальное число байт

LEA DX,DISAREA ;Адрес области данных

Int 21h ;Вызов dos

Команда LEA загружает в регистр DX адрес DISAREA для возможности DOS

локализовать информацию, предназначенную для вывода. В результате успешной

операции флаг переноса очищается (это можно проверить), а в регистре AX

устанавливается число выведенных символов. Ошибка в данной операции может

произойти, если yстановлен неправильный файловый номер. В этом случае

будет установлен флаг CF и код ошибки (в данном случае 6) в регистре AX.

Поскольку регистр AX может содержать или длину, или код ошибки, то

единственный способ определить состояние ошибки - проверить флаг CF.

Упражнение: Вывод на экран

----------------------------

Воспользуемся отладчиком DEBUG для проверки внутренних эффектов

прерывания. Загрузите DEBUG и после вывода на экран приглашения введите A