говорящего устройства. Если этот бит установлен в значение "1",
говорящее устройство включено. В противном случае оно выключено.
Другие биты этого порта управляют другими функциями. Ниже листинг
5-1 содержит программу, использующую порт говорящего устройства
для генерации звуковых сигналов:
Листинг 5-1. Генерация звуковых сигналов при помощи порта
говорящего устройства
----------------------------------------------------------------
in al,61h ; 61h - это адрес порта говоря-
; щего устройства
mov bl,Ofch ; маска для сброса битов О и 1
and al,bl ; маскировка al
noise_on:
or al,2 ; бит 1 в al установлен в зна-
; чении "1"
out 61h,al ; включение говорящего уст-
; ройства
mov cx,Offh ; время включения
time_1:
loop time_1
noise_off:
and al,bl ; сброс битов 0 и 1
out 61h,al ; выключение говорящего уст-
; ройства
mov cx,Offh ; меньшее значение в cx озна-
; чает повышенную частоту
; звука
- 5-10 -
time_2:
loop time_2
push ax ; сохранение ax
mov ah,1 ; считать значение состояния
; клавиатуры
int 16h ; вызов средств клавиатуры
; BIOS
pop ax ; сохранить ax до выполнения
; перехода
jnz exit ; символ был набран
jmp noise_on ; символ не был набран
exit:
ret
----------------------------------------------------------------
В представленной выше программе говорящее устройство повторно
включается и выключается путем записи байта в порт 61h. После
включения говорящего устройства команда LOOP выполняется с целью
предоставления этому устройству некоторого времени для работы
прежде чем оно будет отключено. Звук продолжает поступать до тех
пор, пока с клавиатуры не будет введен какой-нибудь символ. Функ-
ция прерывания "int 16h" используется для считывания значения
состояния клавиатуры.
В таблице 5-3 представлены номера портов центрального процес-
сора CPU, используемые в операционной системе MS-DOS для каких-то
конкретных целей.
Таблица 5-3
Порты центрального процессора CPU, используемые для
определенных целей
ДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДД
Порт центрального ¦ Адрес ввода/вывода ¦Вектор прерыва-
процессора CPU ¦ ¦ ния
ДДДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДДД
Таймер ¦ 040=043 ¦ 8
Вторичный RS-232 ¦ 2F8=2FF ¦ 11
Клавиатура ¦ 060=063 ¦ 9
Жесткий диск ¦ 320=32F ¦ 13
Печатающее уст- ¦ 378=37F ¦ 15
ройство(принтер) ¦ ¦
Монохромный дисп- ¦ 380=3BF ¦ -
лей ¦ ¦
Цветной дисплей ¦ 3D0=3DF ¦ -
Гибкий диск ¦ 3F0=3F7 ¦ 14
Первичный RS-232 ¦ 3F8=3FF ¦ 12
ДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДД
Порты операционной системы MS-DOS предназначены для передачи
данных высокого уровня. Это значит, что процессор не управляет
непосредственно этими данными, а доступ к ним осуществляется пос-
редством обращения к функциям операционной системы MS-DOS и сис-
темы ПЗУ-BIOS. Существует два типа портов операционной системы
MS-DOS, известные под названием "последовательных портов" и "па-
раллельных портов".
Параллельные порты в основном разрабатываются для подключе-
- 5-11 -
ния к ним печатающих устройств (принтеров). Данные через эти пор-
ты проходят параллельно, то есть, все восемь битов, составляющие
байт, передаются на принтер одновременно. Операционная система
DOS поддерживает передачу потока данных через параллельный порт
только в одном направлении (то есть от компьютера к принтеру),
хотя сами по себе аппаратные средства могут осуществлять функции
и ввода и вывода. Ниже предложена часть программы, в которой про-
исходит вывод строки, заданной при помощи DS:DX, в параллельный
порт. Функция прерывания операционной системы MS-DOS "int 21h" с
параметром AH=40H (записать файл) используется для выполнения
этого условия. Регистр BX содержит описатель файла для стандарт-
ного устройства печати (4). После обработки запроса регистр ax
будет содержать количество символов, действительно помещенных в
параллельный порт.
mov ah,40h ; функция = запись
; файла
mov bx,4 ; описано для стан-
; дартного принтера
mov cx,20 ; подсчет числа сим-
; волов
mov dx,seg OUTSTR ;
mov ds,dx ;
mov dx,offset OUTSTR ; ds:dx указывает на
; OUTSTR
int 21h ; обращение к опера-
; ционной системе
; MS-DOS
jc failed ; установленное в
; единицу значение
; переноса означает
; сбой принтера
Последовательные порты обычно используются для подключения
модемов, а также для подключения устройства "мышь". Данные через
последовательные порты передаются по одному биту по одному и тому
же проводнику. Операционная система DOS поддерживает передачу
данных в двух направлениях, то есть, в компьютер и от компьютера.
Передача данных через последовательные порты ведется асинх-
ронно. Поэтому на обоих концах линии передачи должен быть уста-
новлен ряд согласующих параметров. Скорость передачи данных в
бодах "последовательного порта" равна числу битов, передаваемых в
секунду. Скорость передачи данных в бодах, поддерживаемая опера-
ционной системой MS-DOS версии 3.3, лежит в диапазоне от 110 до
19200 битов в секунду. "Длина слова" представляется числом битов,
составляющих символ. Это значение может равняться 7 или 8. "Чет-
ность" - это простой механизм обнаружения ошибок в линии переда-
чи. Согласно стандартам, принятым в интерфейсах RS-232 для после-
довательной передачи данных, значением параметра четности может
быть "четно" или " нечетно" (два способа проверки ошибок) или мо-
жет не существовать проверки на четность. Каждый символ отделяет-
ся от других битами, называемыми "битами останова". Можно зада-
вать один или два бита останова. Эти параметры должны быть
проинициализированы до начала процесса передачи данных.
Функция прерывания "int 14h" системы BIOS используется для
- 5-12 -
передачи данных через последовательный порт. Инициализация после-
довательного порта выполняется установкой в регистре AH кода
функции 0. Параметры передачи задаются в регистре AL, как это по-
казано в таблице 5-4. "Номер порта" указывается в DX. Существует
четыре последовательных портов в операционной системе MS-DOS. Их
именами являются значения от COM1 до COM4. В представленной ниже
программе последовательный порт инициализируется исходно для пе-
редачи данных со скоростью 9600 бод, слов длиной в 8 битов, с
одним битом останова при отсутствии проверки на четность. После
выполнения запроса к функции регистр AH содержит значение состоя-
ние порта.
mov ah,0 ; инициализировать последователь-
; ный порт
mov al,0e3h ; 9600 бод, 8-битовое слово, от-
; сутствие проверки на четность,
; 1 бит останова
mov dx,0 ; порт COM1 инициализируется
int 14h ; вызов системы ПЗУ-BIOS
Таблица 5-4
Параметры связи, задаваемые в регистре AL
ДДДДДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДД
Скорость ¦ Четность ¦ Биты останова ¦ Длина слова
в бодах ¦ ¦ ¦
ДДДДДДДДДДДДД¦ДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДД
Биты Ско- ¦ Биты Чет- ¦ Биты ¦ Биты Длина
7,6,5 рость ¦ 4,3 ность ¦ Бит 2 останова¦ 1,0
ДДДДДДДДДДДДД†ДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДД
000 110 ¦x0 Отсутствует 0 1 бит ¦ 10 7 битов
001 150 ¦01 Нечетная ¦ 1 2 бита ¦ 11 8 битов
010 300 ¦11 Четная ¦ ¦
011 600 ¦ ¦ ¦
100 1200 ¦ ¦ ¦
101 2400 ¦ ¦ ¦
110 4800 ¦ ¦ ¦
111 9600 ¦ ¦ ¦
ДДДДДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДД
В предлагаемом ниже куске программы символ 'x' записывается
в последовательный порт. При возврате, если бит 7 регистра AH ус-
тановлен в значение "0", обращение к функции было успешным. Зна-
чение "0" *, в бите 7 регистра AH указывает на сбой.
--------------------------
* Возможно, в оригинал текста вкралась опечатка: или здесь
или в предыдущем предложении должно стоять значение "1"...
(Примеч. переводчика.)
mov ah,1 ; функция 1= запись символа
mov al,'x' ; регистр AL содержит символ
mov dx,0 ; запись в порт COM1
int 14h ; обращение к системе ПЗУ-BIOS