
- •Программирование эвм
- •Int 21h ;кодом возврата 0 прерывания 21h
- •Работа с битами
- •Порядок выполнения работы
- •Устройства ввода-вывода
- •Ввод исходных данных с клавиатуры и вывод результатов на дисплей
- •Inc di ;смещение в видеопамяти на следующий символ
- •Порядок выполнения работы
- •Контрольные задания
- •Система команд процессора
- •Способы адресации
- •Влияние команд на регистр флагов
- •Расширенные регистры и типы данных процессоров x86
- •Система команд процессоров ia-32 и Intel 64
- •Int 21h ;системного прерывания 21h
- •Использование дальней подпрограммы
- •X dw 0aabBh, 0abbAh, 0baaBh, 0bbaAh ;исходные данные
- •Использование подпрограмм для ввода-вывода
- •Порядок выполнения работы
- •Контрольные задания
- •Дескрипторы
- •Порядок работы процессора в защищенном режиме
- •Использование дальней подпрограммы в защищенном режиме
- •Использование idt. Ввод данных с клавиатуры в защищенном режиме
- •Порядок выполнения работы
Устройства ввода-вывода
Основные признаки классификации и типы устройств ввода-вывода
Устройства ввода-вывода (УВВ) можно классифицировать следующим образом:
-
По направлению передачи информации:
-
Устройства ввода (клавиатура, мышь, микрофон, датчики).
-
Устройства вывода (монитор, проектор, колонки, исполнительные механизмы).
-
Устройства ввода-вывода (накопители на магнитных дисках, лентах).
-
-
По источнику-назначению информации:
-
Пользователь.
-
Внешняя память.
-
Другие компьютеры (коммуникационные устройства: сетевые платы, модемы).
-
Объект управления (устройства связи с объектом: датчики, преобразователи, исполнительные механизмы).
-
Классификация устройств взаимодействия пользователя с машиной
В свою очередь, устройства взаимодействия пользователя с машиной имеют различные признаки классификации и выделяемые по ним типы:
-
Интерактивность взаимодействия:
-
Диалоговые средства (монитор, клавиатура, мышь, звуковые устройства).
-
Недиалоговые средства (принтер, графопостроитель, сканер, дигитайзер, цифровые видеокамеры и фотоаппараты).
-
-
Используемые органы и системы человека:
-
Зрение (монитор).
-
Слух (звуковые устройства).
-
Опорно-двигательный аппарат, осязание (клавиатура, мышь).
-
В данной работе рассматриваются три устройства ввода-ввода: клавиатура, монитор и встроенный динамик. Ими управляют контроллер клавиатуры, видеоадаптер и таймер соответственно.
Классификация интерфейса с устройствами ввода-вывода. Прерывания
Основные признаки классификации и типы интерфейса с устройствами ввода-вывода таковы:
-
Количество линий данных:
-
Параллельный.
-
Последовательный.
-
-
Пересечение с адресным пространством памяти (основным адресным пространством) процессора:
-
Изолированный ввод-вывод.
-
Ввод-вывод по принципу доступа к памяти.
-
-
Способ синхронизации работы процессора с устройствами ввода-вывода или, точнее, что инициирует обмен — процессор или устройство ввода-вывода:
-
Ввод-вывод по опросу (синхронный ввод-вывод).
-
Ввод-вывод по прерыванию (асинхронный ввод-вывод).
-
Конечно, как всегда, возможны комбинированные типы интерфейсов, что имеет место в рассматриваемых далее подсистеме ввода с клавиатуры и видеосистеме.
Преимущества изолированного ввод-вывода в том, что он не занимает адресного пространства МП. Недостаток: программная часть ограничивается командами IN и OUT. Для ввода-вывода по принципу доступа к памяти можно использовать весь набор команд, но недостаток в том, что он занимает часть адресного пространства.
Ввод-вывод по опросу заключается в том, что процессор сам с определенной периодичностью вводит информацию с устройства ввода-вывода и определяет его текущее состояние.
Ввод-вывод по прерыванию происходит по инициативе устройства ввода-вывода. При необходимости обменяться данными с процессором оно формирует сигнал запроса прерывания, который поступает на один из входов IRQ (Interrupt ReQuest) контроллера прерываний. Контроллер прерываний в соответствии с текущими установленными разрешениями и приоритетами подает сигнал прерывания на вход немаскируемых запросов прерывания INT процессора. Если прерывания разрешены, процессор выдает сигнал подтверждения прерывания INTA#, по которому контроллер прерываний выдает на шину данных установленный номер прерывания. Соответствующий цикл шины называется циклом подтверждения прерывания. По номеру прерывания процессор определяет адрес обработчика прерывания. Обработчик прерывания — это подпрограмма, которая и осуществляет обмен информацией между процессором и устройством ввода-вывода. Адрес подпрограммы — это адрес ее первой команды. В реальном режиме адреса обработчиков прерываний находятся в таблице векторов прерываний, которая располагается в самом начале адресного пространства, с нулевого адреса, в оперативной памяти. Размер номера прерывания — один байт. Таким образом, возможны 256 номеров прерываний. Адрес обработчика прерывания (вектор прерывания) имеет размер четыре байта: два байта — сегмент или база (адрес начала сегмента памяти, в котором расположен обработчик прерывания) и два байта — смещение (адрес обработчика прерывания от начала сегмента). Таким образом, адрес вектора прерывания в таблице — это номер прерывания, умноженный на четыре. Соответственно, размер таблицы векторов прерываний — 1 Кбайт.
В защищенном режиме адреса обработчиков определяются по дескрипторам прерываний и дескрипторам сегментов кода, где расположены обработчики. Дескрипторы расположены в соответствующих таблицах. Номер прерывания, который получает процессор от контроллера прерываний — это номер дескриптора в таблице дескрипторов прерываний.
Клавиатура
В состав клавиатуры входят:
-
микропроцессор (микро-ЭВМ);
-
ПЗУ;
-
схемы опроса клавиш;
-
наборное поле клавиш;
-
буфер данных;
-
буфер синхроимпульсов;
-
схемы индикации и сигнализации.
Микро-ЭВМ клавиатуры сканирует матрицу клавиш и фиксирует нажатия и отжатия клавиш в форме т. н. скан-кода.
Интерфейс клавиатуры с системным блоком является последовательным двунаправленным. Передача осуществляется 11-битными блоками. Данные занимают 8 бит. Скан-код принимается контроллером клавиатуры, который находится на системной плате. Ранее контроллер клавиатуры выполнялся на отдельной микросхеме универсального периферийного интерфейса (UPI, Universal Peripheral Interface) 8042 (8742) со встроенными ПЗУ объемом 2 Кбайта и ОЗУ объемом 128 байт. Сейчас он входит в состав микросхем более высокой степени интеграции, которые имеют общее название контроллера ввода-вывода, вместе с последовательным и параллельным портом и другими интерфейсами.
При поступлении скан-кода в контроллер клавиатуры он генерирует сигнал аппаратного прерывания IRQ1, которому назначено прерывание INT9. Обработчик прерывания представляет собой драйвер клавиатуры, который выполняет следующие функции:
-
считывание скан-кода из порта 60h;
-
преобразование скан-кода в расширенный код ASCII;
-
размещение расширенного кода ASCII в буфере клавиатуры, находящемся в оперативной памяти (начальный адрес — 041Еh);
-
слежение за состоянием клавиш сдвига и клавиш переключателей (скан-коды этих клавиш не преобразуются в расширенный код ASCII, а просто их состояние, т. е. нажатие или отжатие фиксируется в определенной области памяти);
-
детектирование специальных комбинаций клавиш, например Ctrl-Alt-Del.
Информация, идущая в обратную сторону, от контроллера клавиатуры к клавиатуре, представляет собой различные команды, например установку величины задержки и скорости повтора удерживаемой клавиши (Typematic Rate Delay).
Также для передачи команд и определения состояния контроллера клавиатуры используется порт 64h.
Видеоадаптер
Видеоадаптер содержит следующие основные устройства:
-
Графический контроллер (графический процессор, Graphics Processing Unit, GPU).
-
Видеопамять.
-
Формирователь последовательности.
-
Контроллер атрибутов.
-
Синхронизатор.
-
Контроллер ЭЛТ.
Графический контроллер — это основной элемент видеоадаптера. Он осуществляет обмен данными между процессором и видеопамятью. Он может выполнять простые логические операции над данными, поступающими в видеопамять, например И, ИЛИ, Искл. ИЛИ, логические сдвиги, а также более сложные по масштабированию участков изображения, рисованию различных геометрических фигур и т. п. Графический процессор, как любой процессор, имеет собственную систему команд.
Графический контроллер или процессор может значительно ускорить вывод информации на экран, разгружая центральный процессор выполнением части операций. Производительность современных графических процессоров часто превышает производительность центральных процессоров, что позволяет использовать их не только для формирования картинки на мониторе, но и выполнения общих научно-технических расчетов (GPGPU, General-Purpose GPU).
В видеопамяти размещаются данные, отображаемые на мониторе.
Формирователь последовательности выбирает из видеопамяти один или несколько байтов, преобразует их в последовательность битов и передает контроллеру атрибутов.
Контроллер атрибутов содержит таблицу цветовой палитры, таблицу цветов и цифроаналоговый преобразователь.
Контроллер атрибутов преобразует информацию о цвете из формата, в котором она хранится в видеопамяти, в формат, необходимый для ЭЛТ. Преобразование осуществляется в соответствии с таблицей цветовой палитры и таблицей цветов. Может также использоваться прямое кодирование цвета (Direct Color Mode). В этом режиме область видеопамяти, определяющая один пиксел, делится на три группы битов — для красного, зеленого и синего цветов. Эти группы поступают непосредственно на входы соответствующих ЦАП и формируют сигналы, поступающие далее на монитор.
Синхронизатор определяет все временные параметры видеоадаптера.
Контроллер ЭЛТ генерирует временные синхросигналы, управляющие ходом луча: развертки, гашения — определяет формат экрана, формат символов текста, форму курсора, управляет скроллингом содержимого экрана.
Все устройства видеоадаптера содержат в своем составе множество регистров, которые и обеспечивают его функциональность.
Память видеоадаптера отображается на адресное пространство процессора. Это отображение не прямое. Диапазон видеопамяти в адресном пространстве не равен объему видеопамяти и зависит от видеорежима. Кроме того, как уже было сказано, между памятью видеоадаптера и системной шиной находится графический процессор.
Встроенный динамик и таймер
Работой встроенного динамика персонального компьютера управляет таймер. Таймер используется также для регенерации памяти совместно с контроллером прямого доступа к памяти, ведения системных часов и управления двигателем FDD.
Таймер имеет три канала, каждый из которых выполняет соответствующую функцию.
Каждый канал таймера имеет три вывода для подключения к другим устройствам:
-
управляющий вход (GATE);
-
вход тактовых импульсов (CLOCK);
-
выход (OUT).
Также каждый канал имеет счетный регистр, в который записывается необходимое значение, декрементируемое затем в процессе счета в каждом такте. При достижении счетчиком нулевого значения выход канала изменяется в соответствии с заданным режимом.
Частота тактовых импульсов таймера — 1,19318 МГц, что составляет одну двенадцатую базовой частоты, равной 14,31818 МГц.
Канал 0 используется в системных часах. Его выход подключен к линии запроса прерывания IRQ0, который имеет наивысший приоритет (кроме запроса немаскируемого прерывания). Запросу прерывания IRQ0 соответствует прерывание INT8. В счетчик канала 0 при его инициализации записывается число 0, поэтому прерывание INT8 происходит 1193180/65536 раз в секунду (приблизительно 18,2 раза в секунду). Обработчик прерывания INT8 увеличивает на единицу текущее значение счетчика, находящегося в оперативной памяти, а также контролирует работу двигателя FDD. Если со времени последнего обращения к FDD прошло более двух секунд, обработчик прерывания выключает двигатель.
Канал 1 используется для регенерации содержимого динамической оперативной памяти компьютера. Его выход связан с соответствующим каналом контроллера прямого доступа к памяти, который и выполняет обновление содержимого памяти.
Канал 2 подключен к динамику компьютера и может быть использован для генерации звуковых сигналов. Именно эта функция таймера используется в данной лабораторной работе.
Таймеру соответствуют четыре порта ввода-вывода:
-
40h — канал 0;
-
41h — канал 1;
-
42h — канал 2;
-
43h — управляющий регистр.
Каждый из каналов можно запрограммировать на один из шести режимов работы для двоичного или двоично-десятичного счета записью в управляющий регистр соответствующего управляющего слова.
Формат управляющего слова:
-
биты 7-6 (SC, Select Counter):
-
00 — канал 0;
-
01 — канал 1;
-
10 — канал 2;
-
11 — код команды RBC (Read-Back Command, чтение состояния канала);
-
биты 5-4 (RW, Read-Wrire):
-
00 — код команды CLC (Counter Latch Command, запомнить CE (Counting Element));
-
01 — чтение-запись младшего байта;
-
10 — чтение-запись старшего байта;
-
11 — чтение-запись младшего, затем старшего байта;
-
биты 3-1 (М, Mode):
-
000 — режим 0, прерывание по окончании счета (interrupt on terminal count), используется для подсчета событий;
-
001 — режим 1, ждущий мультивибратор с повторным запуском (hardware retriggerable one-shot);
-
X10 — режим 2, генератор импульса (rate generator);
-
X11 — режим 3, генератор прямоугольных импульсов (square wave mode);
-
100 — режим 4, программно формируемый строб (software triggered strobe);
-
101 — режим 5, аппаратно формируемый строб (hardware triggered strobe);
-
бит 0 (BCD, Binary-Coded Decimal):
-
0 — двоичный счет;
-
1 — двоично-десятичный счет.
Прим. X — любое значение.
Канал 2 таймера запрограммирован BIOS на режим 3 — генератор прямоугольных импульсов. Если начальное значение счетчика четно, то длительность положительного и отрицательного полупериодов равна n*T/2, если нечетно, то (n+1)*T/2 и (n-1)*Т/2 соответственно, где n — начальное значение счетчика. По сути дела, в этом режиме таймер используется как делитель частоты.
Включает канал 2 таймера для генерации сигнала бит 0 порта 61h, который подключен ко входу GATE канала 2.
Кроме того, прохождением сигнала на динамик управляет бит 1 того же порта 61h, поскольку выход канала 2 связан с динамиком компьютера не напрямую, а через схему, управляемую данным битом.
Таким образом, для включения звука определенной частоты надо выполнить следующие действия:
-
запрограммировать канал 2 таймера на нужный режим работы выводом в порт 43h необходимого управляющего слова, например B6h (опционально, поскольку он уже запрограммирован BIOS надлежащим образом);
-
запрограммировать канал 2 таймера на нужную частоту, т.е. загрузить регистр счетчика канала нужным значением выводом его в порт 42h;
-
для включения генерации сигнала и подключения динамика к выходу канала 2 установить в 1 два младших бита порта 61h.
Примеры программ
Вывод звукового сигнала через динамик
В следующей программе через встроенный динамик компьютера выводится однотонный сигнал, соответствующий ноте "Ми". Значение, которое нужно записать в счетчик канала 2 для вывода ноты "Ми", получается делением частоты тактовых импульсов таймера на частоту ноты "Ми":
1193180 Гц / 329,63 Гц 362010 = 0E24h.
Перепрограммировать канал 2 таймера не требуется. Он уже запрограммирован BIOS в режим 3, генерации прямоугольных импульсов, при этом в счетчик канала записывается сначала младший, а затем старший байт слова.
Программа компилируется в com-файл. Для этого используется директива "org" с аргументом 100h, и компоновщик запускается с параметром "t".
;TmrBeep.asm
;вывод ноты "Ми" через встроенный динамик
;tasm TmrBeep.asm
;tlink /t TmrBeep.obj
code segment
assume cs:code, ds:code
org 100h
start:
;загрузка счетчика канала 2 значением 0E24h (нота "Ми")
mov al, 24h ;сначала выводится младший байт
out 42h, al
mov al, 0Eh ;затем выводится старший байт
out 42h, al
;включение сигнала и динамика
in al, 61h
or al, 00000011b
out 61h, al
;формирование задержки
xor cx, cx
l1: mov bx, cx
mov cx, 8000h
l2: loop l2
mov cx, bx
loop l1
;выключение сигнала и динамика
in al, 61h
and al, 11111100b
out 61h, al
;завершение программы
mov ax, 4C00h
int 21h
code ends
end start