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

X10err proc near

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

MOV BX,01 ;Номер

MOV CX,18 ;Длина

LEA DX,OPENMSG ;Адрес сообщения

INT 1H

MOV NDCDE,01 ;Признак ошибки

RET

X10err endp

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.19.2. Печать ASCII файла.

ПЕЧАТЬ ПОД УПРАВЛЕНИЕМ БАЗОВОЙ DOS

________________________________________________________________

Для печати в базовой версии DOS необходимо установить в регистре AH

код функции 05, а в регистр DL поместить распечатываемый символ и, затем,

выполнить команду INT 21H следующим образом:

MOV AH,05 ;Запрос функции печати

MOV DL,char ;Распечатываемый символ

Int 21h ;Вызов dos

С помощью этих команд можно передавать на принтер управляющие символы.

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

текста и пошаговую обработку области данных, отформатированной по строкам.

Ниже показана программа печати полной строки. Сначала в регистр SI

загружается начальный адрес области HEADG, а в регистр CX - длина этой

области. Цикл, начинающийся по метке P20, выделяет очередной символ из

области HEADG и посылает его на принтер. Так как первый символ области

HEADG - "прогон страницы", а последние два - "перевод строки", то

заголовок печатается в начале новой страницы и после него следует двойной

интервал.

HEADG DB 0CH,'Industrial Bicycle Mfrs',0DH,0AH,0AH

LEA SI,HEADG ;Установка адреса и

MOV CX,27 ; длины заголовка

P20:

MOV AH,05 ;Запрос функции печати

MOV DL,[SI] ;Символ из заголовка

Int 21h ;Вызов dos

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

LOOP P20

Пока принтер не включен, DOS выдает сообщения "Out of paper". После

включения питания программа начинает работать нормально. Для прекращения

печати можно нажать клавиши Ctrl/Break.

СПЕЦИАЛЬНЫЕ КОМАНДЫ ПРИНТЕРА

________________________________________________________________

Выше уже был показан ряд команд, которые являются основными для

большинства печатающих устройств. Кроме того существуют следующие команды:

Десятичн. Шест.

15 0F Включить узкий формат

14 0E Включить широкий формат

18 12 Выключить узкий формат

20 14 Выключить широкий формат

Есть команды, которые распознаются по предшествующему символу Esc

(шест.1B). Некоторые из них в зависимости от печатающего устройства

представлены ниже:

1B 30 Установить плотность 8 строк на дюйм

1B 32 Установить плотность 6 строк на дюйм

1B 45 Включить жирный формат

1B 46 Выключить жирный формат

Коды команд можно посылать на принтер двумя разными способами:

1. Определить команды в области данных. Следующий пример

устанавливает узкий формат, 8 строк на дюйм, затем печатает заголовок

с завершающими командами "возврат каретки" и "перевод строки":

HEADG DB 0FH, 1BH, 30H, 'Title...', 0DH, 0AH

2. Использовать команды с непосредственными данными:

MOV AH,05 ;Запрос функции печати

MOV DL,0FH ;Включить узкий формат

INT 21H

Все последующие символы будут печататься в узком формате до тех пор,

пока программа не выдаст на принтер команду, выключающую этот формат.

Приведенные команды не обязательно работают на принтерах любых

моделей. Для проверки возможных команд управления следует ознакомиться с

руководством конкретного печатающего устройства.

ПЕЧАТЬ С ПОМОЩЬЮ BIOS INT 17H

________________________________________________________________

Прерывание BIOS INT 17H обеспечивает три различные операции,

специфицированные содержимым регистра AH:

AH=0: Данная операция выполняет печать одного символа на три принтера

по номерам 0,1 и 2 (стандартное значение - 0).

MOV AH,00 ;Запрос функции печати

MOV AL,char ;Символ, выводимый на печать

MOV DX,00 ;Выбор принтера № 0

INT 17H ;Вызов BIOS

Если операция не может распечатать символ, то в регистре AH

устанавливается значение 01.

AH=1: Инициализация порта печатающего устройства:

MOV AH,01 ;Запрос на инициализацию порта

MOV DX,00 ;Выбор порта № 0

INT 17H ;Вызов BIOS

Данная операция посылает на принтер символ "прогон страницы", поэтому

ее можно использовать для установки положения "верх страницы". Большинство

принтеров выполняют данную установку автоматически при включении.

AH=2: Чтение состояние порта принтера:

MOV AH,02 ;Функция чтения состояния порта

MOV DX,00 ;Выбор порта № 0

INT 17H ;Вызов BIOS

TEST AH,00101001B; Принтер готов?

JNZ errormsg ;Нет - выдать сообщение об ошибке

Назначение функций AH=1 и AH=2 состоит в определении состояния

принтера. В результате выполнения этих функций биты регистра AH могут

устанавливаться в 1:

Бит Причина

7 Не занято

6 Подтверждение от принтера

5 Конец бумаги

4 Выбран

3 Ошибка ввода/вывода

0 Таймаут

Если принтер включен, то операция возвращает шест.90 или двоичное

10010000 - принтер "не занят" и "выбран" - это нормальное состояние

готовности. В случае неготовности принтера устанавливаются бит 5 (конец

бумаги или бит 3 (ошибка вывода). Если принтер выключен, то операция

возвращает шест.B0 или двоичное 10110000, указывая на "конец бумаги".

Выполняя программу при выключенном принтере, BIOS не выдает сообщение

автоматически, поэтому предполагается, что программа должна сама проверить

и отреагировать на состояние принтера. Если программа не делает этого, то

единственной индикацией будет мигающий курсор на экране дисплея. Если в

этот момент включить принтер, то некоторые выходные данные могут быть

потеряны. Следовательно, прежде чем использовать функции BIOS для печати,

следует проверить состояние порта принтера и, если будет обнаружена

ошибка, то выдать соответствующее сообщение. (Функции DOS выполняют эту

проверку автоматически, хотя их сообщение "Out of paper" относится к

различным состояниям). После включения принтера, вывод сообщений об ошибке

прекращается и принтер начинает нормально работать без потери данных.

В процессе работы принтер может выйти за страницу или быть нечаянно

выключен. Поэтому в программах печати следует предусмотреть проверку

состояния принтера перед каждой попыткой печати.

ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ

________________________________________________________________

- Прежде чем выводить данные на печатающее устройство, включите

принтер и вставьте в него бумагу.

- Для завершении печати используйте символы "перевод строки" и

"прогон страницы" для очистки буфера принтера.

- Функции DOS для печати предусматривают вывод сообщений при

возникновении ошибки принтера. Функции BIOS возвращают только код

состояния. При использовании BIOS INT 17H проверяйте состояние принтера

перед печатью.

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ

________________________________________________________________

19.1. Напишите программу в расширенной версии DOS для а) прогона

страницы; б) печати вашего имени; в) перевода строки и печати вашего

адреса; г) перевода строки и печати названия вашего города/штата

(республики); д) прогона страницы.

19.2. Переделайте программу из предыдущего вопроса для базовой версии

DOS.

19.3. Закодируйте строку, в которой имеется следующая информация:

возврат каретки, прогон страницы, включение узких букв, заголовок (любое

имя) и выключение узких букв.

19.4. Измените программу из вопроса 19.1 для использования BIOS INT

17H. Обеспечьте проверку состояния принтера.

19.5. Измените программу из вопроса 19.1 так, чтобы пункты б), в), г)

выполнялись по 5 раз.

19.6. Измените программу на рис.19.1 для выполнения в базовой версии

DOS.

19.7. Измените программу на рис.19.2 так, чтобы распечатываемые

строки также выводились на экран.