Assembler - язык неограниченных возможностей

         

Параллельный порт


Параллельные порты используются в первую очередь для подключения принтеров, хотя встречаются и другие устройства, например переносные жесткие диски, которые могут подключаться к этим портам. Базовые средства DOS и BIOS для работы с параллельными портами аналогичны соответствующим средствам для работы с последовательными портами: DOS инициализирует стандартное устройство PRN, соответствующее первому порту LPT1, которое может быть переопределено командой MODE, и предоставляет прерывание для вывода в это устройство.

Функция DOS 05h — Вывод символа в стандартное устройство PRN

Ввод: АН = 05h
DL = символ

Кроме того, можно пользоваться функцией записи в файл или устройство, поместив в ВХ число 4, соответствующее устройству PRN. BIOS, в свою очередь, предоставляет базовый набор из трех функций для работы с принтером.

INT 17h, АН = 00 — Вывести символ в принтер



Ввод: АН = 00h
AL = символ
DX = номер параллельного порта (00 — LPT1, 01 — LPT2, 02 — LPT3)
Вывод: АН = состояние принтера:

    бит 7: принтер не занят

    бит 6: подтверждение

    бит 5: нет бумаги

    бит 4: принтер в состоянии on-line

    бит 3: ошибка ввода-вывода

    бит 0: тайм-аут

INT 17h, АН = 01 — Выполнить аппаратный сброс принтера

Ввод: АН = 01h
DX = номер порта (00h — 02h)
Вывод: АН = состояние принтера

INT 17h, AH = 02 — Получить состояние принтера

Ввод: АН = 02h
DX = номер порта (00h – 02h)
Вывод: АН = состояние принтера

Например, чтобы распечатать содержимое экрана на принтере, можно написать такую программу:

; prtscr.asm ; распечатать содержимое экрана на принтере ; .model tiny .code .186 ; для команды push 0B800h org 100h ; начало СОМ-файла start: mov ah,1 mov dx,0 ; порт LPT1 int 17h ; инициализировать принтер, cmp ah,90h ; если принтер не готов, jne printer_error ; выдать сообщение об ошибке, push 0B800h ; иначе: pop ds ; DS = сегмент видеопамяти в текстовом режиме xor si,si ; SI = 0 mov cx,80*40 ; CX = число символов на экране cld ; строковые операции вперед main_loop: lodsw ; AL - символ, АН - атрибут, SI = SI + 2 mov ah,0 ; АН - номер функции int 17h ; вывод символа из AL на принтер loop main_loop ret ; закончить программу

printer_error: mov dx,offset msg ; адрес сообщения об ошибке в DS:DX mov ah,9 int 21h ; вывод строки на экран ret

msg db "Принтер на LPT1 находится в состоянии offline или занят$" end start

Чтобы распечатать экран в текстовом режиме на LPT1, достаточно всего лишь одной команды INT 05h, что в точности эквивалентно нажатию клавиши PrtScr.



Содержание раздела