МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ДОНЕЦКИЙ ПОЛИТЕХНИЧЕСКИЙ ТЕХНИКУМ
ОТЧЕТ
По учебной практике
«Микропроцессорные системы»
Вариант №1
Выполнил Бабко Богдан Олегович ОКС 07 – 2
Руководитель Дворниченко Елена Александровна
Донецк
2010
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1 ОПЕРАЦИИ ВВОДА/ВЫВОДА В БАЗОВОЙ ВЕРСИИ DOS
1.1 Функции ввода с клавиатуры
1.2 Функции вывода на экран
1.3 Сервис клавиатуры BIOS-Int 16h
1.4 Описание алгоритмов вывода чисел
1.5 Задание
2 ГЕНЕРАЦИЯ ЗВУКОВЫХ СИГНАЛОВ В ПЭВМ
2.1 Таймер КР1810ВИ54
2.2 Программируемый периферийный интерфейс КР580ВВ55А
2.3 Генерация звука в IBMPC
2.4 Выполнение задержки
2.5 Область данных BIOS
2.6 Задание
3 ПРИНЦИП РАБОТЫ КЛАВИАТУРЫ
3.1 Таблица векторов прерываний
3.2 Маскирование прерываний
3.3 Изменение таблицы векторов прерываний
3.4 Задание
4 ПРИНЦИПЫ РАБОТЫ ВИДЕОСИСТЕМЫ ПЭВМ
4.1 Адресация и режимы работы адаптера CGA
4.2 Режим работы дисплея
4.3 Задание
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
ВВЕДЕНИЕ
В любой сфере человеческой деятельности - в науке, технике, производстве - методы и средства вычислительной техники направлены на повышение производительности труда. В связи с этим уровень специалистов в существенной мере определяется их подготовкой в следующих направлениях, связанных с применением средств вычислительной техники:
-управление технологическими процессами, включая автоматизированные контроль и диагностику технических средств;
-использование ЭВМ для автоматизированного проектирования, научных исследований, административно-организационного управления.
Стремительное совершенствование технологии производства интегральных полупроводниковых компонентов, обеспечившее возможность создания высокоэкономичных цифровых устройств обработки и хранения информации, а также появление эффективных средств программирования оказывают все более существенное влияние не только на развитие техники измерений и управления, но и на подход к автоматизации вообще. Первые попытки применения цифровых устройств для автоматизации производственных процессов относятся к началу 60-х гг., когда были разработаны первые управляющие вычислительные машины. В 70-х гг. ЭВМ стала обычным элементом оборудования автоматизированных систем.
Дальнейшее развитие электронной вычислительной техники привело к ее широкому применению в военном деле, как составной части автоматизированных систем управления войсками и вооружением. Что предопределило повышение требований к квалификации современного командира-инженера, которому необходимо знать основы организации и функционирования универсальных и специализированных управляющих электронных вычислительных машин.
1 ОПЕРАЦИИ ВВОДА/ВЫВОДА В БАЗОВОЙ ВЕРСИИ
DOS
Программное прерывание Int 21h – это набор функций, с помощью которых организуется операции ввода/вывода в базовой версии DOS.
1.1
Функции ввода с клавиатуры
аh=01h – Фильтрующий ввод с клавиатуры с ожиданием и эхом на экране.
Пример:
movah, 01
int 21h
Результат функции – в AL находится код символа из буфера клавиатуры.
При вводе функциональных клавиш (F1,…F12, PgUp и др.) необходимо 2 обращения к этой функции. При 1-м AL = 0, при 2-м AL = расширенный код ASCII. В процессе выполнения этой функции проверяется нажатие комбинаций клавиш Ctrl + Break, которая используется для прерывания работы программы, если она зацикливается. По Ctrl + Break можно снять программу, если она использует функции ввода/вывода, содержащие проверку на Ctrl + Break. Такие функции называют фильтрующими.
ah = 08h – Фильтрующий ввод символа с клавиатуры с ожиданием без эха.
Пример:
mov ah, 08h
int 21h
Результат функции – в AL код символа.
Отличается от предыдущей тем, что символ не отображается на экране.
ah = 07h – Не фильтрующий ввод символа с клавиатуры с ожиданием без эха.
Пример:
mov ah, 07h
int 21h
Результат функции – в AL код символа.
Отличается от предыдущей тем, что не реагирует на Ctrl + Break.
аh = 0Вh – Проверить статус ввода (фильтрующая).
Функция проверяет на наличия символа в буфере клавиатуры без извлечения его из буфера.
Пример:
Mov ah, 0Вh
Int 21h
Результат функции – AL = 00h, если буфер пуст, и AL=FFh, если есть символ в буфере клавиатуры.
Пример выхода из программы по нажатию клавиши ESC без ожидания нажатия клавиши.
mov ah, 0bh
int 21h
cmp al,0
jz m1
mov ah, 07h
int 21h
cmp al, 27
jne m1
mov ax, 4C00h
int 21h
m1: ;---Продолжение программы
ah=0Ch – Чтение с предварительной очистки буфера .
Пример:
movah, 0Ch
moval, <номер функции 01h, 07h, 08h, 06h,или 0Ah>
int 21h
Чтобы программа не читала из буфера клавиатуры давно нажатую клавишу, данная функция очищает буфер клавиатуры, а затем выполняет функцию, номер которой указана в регистре al. Для функций 06h и 0Ah необходимо указать дополнительные параметры в регистре dl и dx. Реакция на Ctrl – Break определяется используемой функцией ввода.
ah=0Ah – Ввод строки в буфер ввода(фильтрующая).
Для ввода строки нужно подготовить блок параметров.
Пример:
BL_par label byte
Maxlen db 7
Actlen db ?
S db 7 dup(?)
……………….
Movah, 0Ah
Leadx, BL_par ;адрес поля блока параметров
Int 21h
Результат функции – в поле S введённая строка, а в поле Actlen длинна введённой строки.
Функция ожидает ввода строки начиная с текущей позиции курсора. Пользователь может набрать на экране 6 символов максимум (т.е. Maxlen - 1), а при вводе следующего символа выдаётся предупреждающий звуковой сигнал и символ не вводится. Набор строки завершается нажатием клавиши Enter, до нажатия Enter с помощью BackSpace строку можно отредактировать.
Например:
Если набранная строка – Строка Enter
Тогда Actlen =6
‘С’
|
‘Т’ |
‘Р’ |
‘О’ |
‘К’ |
‘А’ |
0Dh(Код Enter) |
S=
Если набрана строка – 123 Enter
Тогда Actlen = 3
‘1’ |
‘2’ |
‘3’ |
0Dh(Код Enter) |
S=
Если набранная строка – Строка - Enter
Тогда Actlen = 0
S =
1.2 Функции вывода на экран
Ah=02h – Вывод символа на дисплей (фильтрующая)
Пример
movah, 02
movdl, 35hили dl, ‘5’
int21h
В регистр dl помещается ASCII-код символа или указывается непосредственно сам символ в кавычках. Функция выводит символ на экран в текущую позицию курсора и перемещает курсор вправо на одну позицию. На символ BackSpace перемещает курсор влево на одну позицию. Функция реагирует на вывод управляющих кодов 07h(звонок), 08h(BackSpace), 09h(Tab), 0Ah(lf), 0Dh(cr).
ah=09h – Вывод строки.
Пример:
Msg db 13,10эPress and key…$’
mov ah, 09h
lea dx, Msg
int21h
В регистр dx помещается адрес выводимой строки, которая должна быть предварительно описана в сегменте данных, при этом в конце строки обязательно нужно указать символ $ (конец строки). 13 и 10 – это ASCII-коды символов возврата каретки и перевода строки, которые указываются для вывода строки в первую позицию новой строки экрана. Действие функции полностью аналогично функции 02h, но выводится не один символ, а целая строка.
1.3 Сервис клавиатуры
BIOS
-
Int
16
h
Клавиши Alt, Ctrl левый и правый Shift называются клавишами сдвига. При нажатии такой клавиши соответствующий бит байта состояния клавиатуры устанавливается в 1, а при отпускании сбрасывается в 0. Клавиши Insert, Caps Lock, Scroll Lock, Num Lock называютсяклавишамирежимов. При первом нажатии такой клавиши в соответствующий бит байта состояния клавиатуры записывается 1 (Режим установлен), при следующем – 0 и т.д. Нажатие клавиши сдвига или режима не изменяет содержимого буфера клавиатуры. Они обеспечивают расширение возможности управления ЭВМ в различных программных системах.
Назначение бит регистра флагов клавиатуры следующее:
7 6 5 4 3 2 1 0
Insert |
Caps Lock |
Num Lock |
Scroll Lock |
Alt |
Ctrl |
Shift левый |
Shift правый |
Клавиши режимов Состояния клавиш сдвигов
Для чтения данного регистра флагов используется функция 02h прерывания BIOSInt 16h.
ah=02h – Читать байт флагов клавиатуры (статус флагов клавиатуры).
Пример:
Movah, 02h
int16h
Результат функции – в AL байт флагов клавиатуры.
Пример завершения циклической программы при нажатой клавише Ctrl:
c:…………………. ; основная часть программы
Movah,02h
Int 16h
Andal, 00000100b ; выделение флага Сtrl
Jzc
Movax, 4c00h ; выход из программы
Int 21h
При нажатии клавиши Ctrl взводится бит 2 в статусе клавиатуры и пока клавиша нажата остается в состоянии «1». При отпускании клавиши производится сброс флага Ctrl. Остальные флаги работают аналогично.
Значении байтов флагов клавиатуры хранится по адресу 0040:0017hв области данный BIOS(0040:0000h – 0040:00FFh). Поэтому проверку флага клавиатуры можно осуществить прямым обращением к ячейке 0040:0017h.
Тот же пример без использования int 16h
MovES, 40h
MovSI, 17
C:…………………. ; основная часть программы
MovAL, ES:[SI]; результат этой команды такой же, как и у функции ah=02hint 16h
AndAL, 04h
Jzc
Movax, 4c00h; выход из программы
Int21h
1.4 Описание алгоритмов вывода чисел
Вывод числа в 2 с/с
1. Занесите число для вывода в регистр(например в bl).
2. Выполните сдвиг на один разряд влево через флаг переноса
3. Обнулите вспомогательный регистр (например dl).
4. выполните сдвиг dl на один разряд влево так , чтобы содержимое флага переноса попало в младший бит регистра dl.
5. прибавьте к регистру dlконстанту 30h для преобразования числа в ASCII-код символа данного числа и выведите на экран полученный символ.
6. Выполните шаги 2-5 восемь раз для вывода всего байта.
Схема выполнения сдвигов:
Вывод числа в 16 с/с
1. Занесите число для вывода в регистр ( например в bl).
2. Сдвиньте bl на 4-ре разряда вправо так, чтобы старшие разряды стали нулевыми.
3. Сравните получившееся число с цифрой 9 и если оно меньше ли равно, то прибавьте к данному числу константу 30h ( для получения ASCII-кодов цифр 0-9 ).
4. Снова занесите исходное число в регистр bl.
5. Обнулите старшие 4-ре разряда и повторите пункт 3.
1.5 Задание
а) Выполните преобразование чисел из 2 с/с в 16 с/с, 10 с/с (ПК без знака), 10 с/с (ПК со знаком) и 10 с/с (ДК) в соответствии с вариантом 3.
Преобразовать число из 2 с/с в 16 с/с.
1) 0011 00102 →3 216
2) 1010 00112 →A 316
3) 0101 01012 →5 516
4) 1011 10002 →B 816
5) 0111 00102 →7 216
6) 1001 10102 →9 A16
Преобразовать число из 2 с/с в 10 с/с (ПК без знака)
1) 0011 00102 →32+16+2=5010
2) 1010 00112 →128+32+2+1=16310
3) 0101 01012 →64+16+4+1=8510
4) 1011 10002 →128+32+16+8=18410
5) 0111 00102 →64+32+16+2=11410
6) 1001 10102 →128+16+8+2=15410
Преобразовать число из 2 с/с в 10 с/с (ПК со знаком)
1) 0011 00102 →32+16+2=+5010
2) 1010 00112 →32+2+1=-3510
3) 0101 01012 →64+16+4+1=+8510
4) 1011 10002 →32+16+8=-5610
5) 0111 00102 →64+32+16+2=+12410
6) 1001 10102 →16+8+2=-26
Преобразовать число из 2 с/с в 10 с/с (ДК)
1) 0011 00102 →32+16+2=+5010
2) 1010 00112 → 11011101= 64+16+8+4+1=-93
3) 0101 01012 →64+16+4+1=+8510
4) 1011 10002 → 11001000= 64+8=-72
5) 0111 00102 →64+32+16+2=+12410
6) 1001 10102 → 11100110= 64+32+4+2=-102
б) Написать программу, которая выполняет вывод ASCII кода нажатой клавиши в 2 с/с и 16 с/с. Завершение программы должно происходить по нажатию клавиши NumLock
Продолжение блок - схемы
Рисунок 1.1 – Блок схема основной программы
Основная программа
Stac segment
db 64 dup (0)
ends
data segment
Msg db 13,10,''
System16 db 13,10,'16 б/б=$'
System2 db 13,10,'2 б/б=$'
Pystaya db 13,10,'$'
stQ db 13,10,''
ends
code segment
assume ds:data, cs:code, ss:stac
Start:
mov ax, data
mov ds, ax
mov es, ax
;--------------------------------------------
c:; Вывод строки 'Нажмите любую клавишу...'
mov ah, 09h
lea dx , Msg
int 21h
;Вывод ASCII код нажатой клавиши
mov ah, 01h
int 21h
mov cx, 8; Занесение в CX кол-ва циклов
mov bl, al; Сохранение AL в BL
mov bh, al;Сохранение Al в BH
;Вывод строки э2 с/с='
mov ah, 09h
lea dx, System2
int 21h
m1: sal bl, 1; Сдвиг BL на 1 разряд
mov dl, 0;Обнуление DL
rcl dl, 1;Сдвиг dl на 1 разряд
add dl, 30h; DL=DL+30
;Вывод DL
mov ah, 02h
int 21h
loop m1
;Вывод строки '16 c/c='
mov ah, 09h
lea dx, System16
int 21h
mov bl, bh; Загрузкаисходного AL
mov cx, 4
sar bl, cl;Сдвиг BL c 9
cmp bl, 9 ; Сравнение BL c 9
jle m2 ;Переход на m2 если <или=
add bl, 37h; BL=BL+37
jmp m3; Переход на m3
m2: add bl, 30h;BL=BL+30
;Вывод m3
m3: mov ah, 02h
mov dl, bl
int 21h
mov bl, bh; Загрузка исходного AL
and bl, 0Fh;Обнуление первых 4 разрядов
cmp bl, 9;Сравнение bl c 9
jle m4 ; Переход на m4 если <или=
add bl, 37h; BL=BL+37
jmp m6 ; Переход на m6
M4: add bl, 30h; BL=BL+30
;Вывод BL
M6: mov ah, 02h
mov dl, bl
int 21h
mov ah, 09h
lea dx, stQ
int 21h
mov ah, 02h
int 16h
and al,10000000b
jz d
mov ax, 4c00h
int 21h
d: jmp c
ends
END Start
Рисунок 1.2 – Результат работы программы
2 ГЕНЕРАЦИЯ ЗВУКОВЫХ СИГНАЛОВ В ПЭВМ
Для генерации звука в ПЭВМ используется программируемый таймер и программируемый параллельный интерфейс. Поэтому кратко рассмотрим использование данных микросхем в ПЭВМ.
2.1 Таймер КР1810ВИ54
Для задания временных интервалов и формирования сигналов с различными временными параметрами в IBMPC применяется программируемый таймер i8254 (отечественный аналог КР1810ВИ54) рисунок 2.1.
Рисунок 2.1 – Условно графическое обозначение таймера КР1810ВИ54
Таймер содержит три независимых канала, каждый из которого можно запрограммировать на работу в одном из шести режимов. Программирование канала осуществляется путём ввода управляющих слов в регистр режима канала и начального значения в его счётчики. Каждый канал имеет управляющий вход GATE и выход OUT и может работать в одном из следующих шести режимов, Которые условно можно разделить на три группы: Программируемый одновибратор (режимы 0 и 1), делитель частоты (режимы 2 и 3) , счётчик событий (режимы 4 и 5). При этом режимы 0, 4 – это режимы автозагрузки, т.е. после окончания выполнения функция без перепрограммирования по фронту сигнала GATE. Режимы 2, 3 – это режимы авто загрузки, т.е. после окончания выполнения функция без перепрограммирования начинает выполняться заново.
Режим 0 – прерывание терминального счёта.
Режим 1 – ждущий мультивибратор.
Режим 2 – генератор частоты.
Режим 3 – генератор меандра.
Режим 3 – счётчик событий.
Режим 5 – счётчик событий с автозагрузкой.
Для работы таймера его нужно запрограммировать на необходимый вид работы и загрузить в него константу счётчика. В IBMPC таймер имеет следующие программируемые порты:
Таблица 2.1 – Программируемые порты
Адрес |
Операция |
Назначение |
40h |
запись
чтение
|
Загрузка счётчика канала 0
Чтение счётчика канала 0
|
41h |
запись
чтение
|
Загрузка счётчика канала 1
Чтение счётчика канала 1
|
42h |
запись
чтение
|
Загрузка счётчика канала 2
Чтение счётчика канала 2
|
43h |
запись |
Запись управляющего слова в регистр режима канала |
Для задания режима работы таймера нужно записать в порт 43h константу в соответствии с форматом управляющего слова (рисунок 2.2). А затем в порт 40h, 41h или 42h, в зависимости от программирующего канала, записать константу счётчика (для генерации звука данная константа задаёт частоту звука).
Рисунок 2.2 – Формат управляющего слова
Канал таймера имеет следующее назначение в IBMPC.
Таблица 2.2 – Назначение каналов таймера
Канал |
Назначение |
Режим |
0 |
Системные часы (IRQ0) |
Режим 3, счётчик=0 (65536) |
1 |
Запрос для канала 0 ПДП (регенерация памяти) |
Режим 2, счётчик=18 |
2 |
Генератор звука |
- |
Для генерации звука в IBMPC используется канал 2, который программируется на режим 3, временная диаграмма которого показана на рисунке 2.3.
Рисунок 2.3 – Временная диаграмма работы таймера в режиме 3
Тактовая частота каждого канала равна 1,19318 МГц, т.е. каждый такт имеет длительность 0,84 мсек. Вход GATEканалов 0 и 1 всегда имеют высокий уровень, поэтому счёт на этих каналах разрешён всегда. Вход GATE канала 2 управляется битом 0 порта РВ интерфейса i8255 связанного с портом 61h.
При начальной загрузке BIOS инициализирует канал 0 для работы в режиме 3 со счётчиком 0( т.е. 65536 декрементов на цикл счёта). Поэтому частота системных часов равна 1,19 Мгц/65536= 18.2 Гц и прерывание IRQ0, связанное с вектором Int 8, происходит 18,2 раз в секунду, т.е. каждые 55 мсек увеличивается на единицу значение системных часов.
Канал 1 работает в режиме 2 со счётчиком 18, поэтому регенерация памяти происходит каждые 18 мсек. Перепрограммировать канал 0 и канал 1 нельзя, т.к. это приведёт к нарушению целостности данных в ОЗУ.
2.2 Программируемый периферийный интерфейс КР580ВВ55А
В состав IBMPC входит программируемый периферийный интерфейс (ППИ) i8255 (отечественный аналог KP580BB55A) рисунок4 .ППИ содержит три 8-разрядных порта (PA, PB, и PC) для организации обмена между ЦП и внешними устройствами, и регистр управления. Порты сгруппированы в две группы : группа А состоит из порта PA и старшей тетрады порта PC, группа B – из порта PB и младшей тетрады порта PC. Группа А может работать в трех режимах (0,1,2); группа B в двух (0 и 1). Режимы определяются содержимым регистра управления , имеющим формат изображенный на рисунке 2.5.
Рисунок 2.4 – условное графическое обозначение ППИ КР580ВВ55А
Рисунок 2.5 – Формат регистра управления ППИ
Режим 0 – основной режим Ввода – вывода (однонаправленный синхронный обмен).В этом режиме группа разделяется на два набора (порт и тетрада PC).В данном режиме порт PA,PB и тетрады (0-3), PC(4-7) могут использоваться для передачи данных между ЦП и внешними устройствами. Их можно программировать на ввод или вывод, для этого нужно лишь загрузить необходимую константу в управляющий регистр ППИ (рис.2)
Режим 1 – режим стробируемого ввода-вывода (однонаправленный асинхронный обмен по прерыванию). Порты РА и РВ используются для передачи данных, РС – для управляющих сигналов.
Режим 2 – режим двунаправленной шины (двунаправленный асинхронный обмен по прерыванию). Этот режим допустим только для группы А. В нем порт А становится двунаправленным, а 5-ть разрядов порта РС используются для управления портом РА.
ППИ в IBM РС занимает порты 60h – 63h. BIOS заносит в регистр управления (порт 63h) 99h, т.е. программирует группы А и В в режим 0, причем РА и РС является портами ввода, а РВ – портом вывода. Назначение портов следующее:
Таблица 2.3 – Назначение портов
Адрес |
Операция |
Назначение |
60h |
чтение |
Вывод из порта РА |
61h |
чтение
запись
|
Вывод из порта РВ
Вывод в порт РВ
|
62h |
чтение |
Вывод из порта РС |
63h |
запись |
Ввод управляющего слова в регистр управления ППИ |
Содержимое порта РВ изображено на рисунке 2.6.
Рисунок 2.6 – Содержимое порта РВ
2.3 Генерация звука в
IBM
PC
Схема генерации звука в IBMPC изображена на рисунке 2.7.
Рисунок 2.7 - Схема генерации звука в IBMPC
На вход звукогенератора поступает логическое “И” двух сигналов: выхода OUT 2-го канала таймера и содержимого бита 1 порта РВ интерфейса i8255. Обычный способ генерации звука состоит в программировании канала 2 таймера так, чтобы он выдавал прямоугольный импульс заданной частоты, лежащий в звуковом диапазоне (20Гц – 20 КГц). Для этого следует использовать режим таймера 3 с подходящим начальным значением счетчика. Если затем установить биты 0 и 1 порта РВ, то импульс начнет поступать на вход звукогенератора (бит 0 – это вход GATE канала 2, разрешающий счет, а бит 1 – разрешение выдачи выхода OUT на вход звукогенератора). Для выключения звука достаточно сбросить биты 0 и 1 порта РВ. Преимущество этого метода состоит в том, что, запустив генерацию звука, ЦП может выполнять другие действия. Значение счетчика 2-го канала таймера вычисляется по формуле:
N = 1193181/F
где 193181 – тактовая частота таймера в Гц
F – требуемая частота звука в Гц
Например: Если необходимая частота равна 1 кГц = 1000Гц, тогда константа счетчика равна 1193181/1000 = 1193 (10с/с) = 4А9 (16с/с).
2.4 Выполнение задержки
В BIOS существует 4 ячейки памяти, в которых хранится системное время. В результате прерывания от таймера содержимое этих ячеек увеличивается на 1, т.е. каждые 55 мс этот изменяется. По адресу 0000:046E находится старшее слово, а по адресу 0000:046Е младшее слово системного счетчика времени.
Для счета времени (т.е. задержки) нужно прочитать содержимое этого счетчика и прибавить константу необходимой задержки. Затем в цикле считывать содержимое счетчика и сравнивать его с полученной суммой, а когда содержимое счетчика станет равным сумме (т.е. заданное время задержки истекло) необходимо выйти из цикла.
Константа необходимой задержки считается следующим образом:
Задержка/55мс = константа
Например:
Если необходимая задержка равна 550мс, тогда константа равна 550мс/55мс = 10 (10с/с) = ОА (16с/c).
2.5 Область данных
BIOS
Область основной памяти размером 256 байт расположена непосредственно ха таблицей векторов прерываний, начиная с адреса 0040:0000 и кончая 004F:0000, предназначена для использования программами BIOS. В таблице приведено описание части информации, помещаемой в BIOS в указанную область памяти. Обращаясь к ней, прикладные программы получают важную информацию о состоянии системы.
Таблица 2.4 – Область данных портов
Адрес (сегмент: смещение) |
Длина (в байтах) |
Наименование и описание |
ОБЛАСТЬ ДАННЫХ ПОСЛЕДОВАТЕЛЬНОГО\ПАРАЛЛЕНЛЬНОГО ПОРТОВ |
0040:0000 |
8 |
Базовый адрес ввода-вывода для COM1-COM4 |
0040:0008 |
8 |
Базовый адрес ввода-вывода для LPT1-LPT4 |
СМЕШАННАЯ ОБЛАСТЬ ДАННЫХ |
0040:0010 |
2 |
Флаги оборудования |
0040:0013 |
2 |
Обьём памяти в килобайтах |
ОБЛАСТЬ ДАННЫХ КЛАВИАТУРЫ 1 |
0040:0017 |
1 |
Флаги 1 состояния регистров клавиатуры |
0040:0018 |
1 |
Флаги 2 состояния регистров клавиатуры |
0040:0019 |
1 |
Ввод с дополнительного клавиатурного поля |
0040:001А |
2 |
Адрес начла буфера клавиатуры |
0040:001С |
2 |
Адрес конца буфера клавиатуры |
0040:01Е |
32 |
Буфер клавиатуры |
ОБЛАСТЬ НАКОПИТЕЛЯ FDD |
0040:003Е |
1 |
Состояние повторной калибровки |
0040:003А |
1 |
Состояние двигателя |
0040:0040 |
1 |
Счетчик числа |
0040:0041 |
1 |
Состояние последней операции |
0040:0042 |
7 |
Байты состояния контроллера |
ОБЛАСТЬ ДАННЫХВИДЕОАДАПТЕРА 1 |
0040:0049 |
1 |
Текущий видеорежим |
0040:004А |
2 |
Количество столбцов в отображаемом тексте |
0040:004С |
2 |
Длина буфера регенерации в байтах |
0040:004У |
2 |
Адрес смещения активной видеостраницы |
0040:0050 |
16 |
Положение курсора (видеостраницы 0-7) |
0040:0060 |
2 |
Тип курсора (нач. и кон. строки развертки) |
0040:0062 |
1 |
Активная видеостраница |
0040:0063 |
2 |
Базовый адрес видеоконтроллера |
0040:0065 |
1 |
Текущая установка регистра 3х8 |
0040:0066 |
1 |
текущая установка регистра 3х9 |
ОБЛАСТЬ ДАННЫХ СИСТЕМНОГО ТАЙМЕРА |
0040:006С |
2 |
Младшее словосодержимого таймера |
0040:006Е |
2 |
Старшее слово содержимого таймера |
0040:0070 |
1 |
Индикатор заполнения таймера |
СИСТЕМНАЯ ОБЛАСТЬ ДАННЫХ |
0040:0071 |
1 |
Байт BIOS_BREAK |
0040:0072 |
2 |
Флаг сброса |
ОБЛАСТЬ ДАННЫХ ЖЕСТКОГО ДИСКА |
0040:0074 |
1 |
Состояние последней операции |
0040:0075 |
1 |
Число накопителей HDD |
ВРЕМЕНА ОЖИДАНИЯ РЕАКЦИИ (ТАЙМАУТЫ) |
0040:0078 |
4 |
Значения времен ожидания для LPT1-LPT4 |
0040:007С |
4 |
Значения времен ожидания для COM1-COM4 |
ОБЛАСТЬ ДАННЫХ КЛАВИАТУРЫ |
0040:0080 |
2 |
Адрес начала буфера клавиатуры |
0040:0082 |
2 |
ОБЛАСТЬ ДАННЫХ ВИДЕОАДАПТЕРА 2 |
0040:0084 |
1 |
Число отображаемых строк текста минус 1 |
0040:0085 |
2 |
высота символа в строках развертки |
0040:0087 |
1 |
Параметры видеорежима |
0040:0088 |
1 |
Параметры видеорежима |
ОБЛАСТЬ СВЯЗИ МЕЖДУ ПРОГРАММАМИ |
0040:00F0 |
16 |
Область, где программа может записать\считать данные (например статус) |
2.6 Задание
Напишите программу генерации последовательности звуковых сигналов, имеющих следующие характеристики:
- Первый сигнал : частота F1, длительность T1.
- Второй сигнал : частота F2, длительность T2.
- Пауза между сигналами : длительность Р1
Характеристика F1, F2, T1, T2, P1 выбираются из таблицы задания согласно варианту.
Программу необходимо оформить в виде основной программы и двух подпрограмм.
- Первая подпрограмма выполняет генерацию звука.
- Вторая подпрограмма выполняет задержку.
- Основная программа выполняет вызовы подпрограмм в нужной последовательности.
№Варианта |
F1, кгц |
T1, мс |
P1, мс |
F2, кГц |
Т2, мс |
1 |
5 |
500 |
150 |
9,5 |
800 |
Рисунок 2.9 – Блок – схема основной программы
Основная программа
stac segment
db 64 dup (0)
ends
data segment
stQ db 13,10,''
ends
code segment
assume ds:data, cs:code, ss:stac
Start:
mov ax,data
mov ds,ax
mov es,ax
mov ah,09h
lea dx,stQ
int 21h
m0: call Sound0
mov bx,00efh
call Sound
mov dx, 0009h
call Sound2
mov dx, 0003h
call Sound2
mov bx,007eh
call Sound
mov dx, 000fh
call Sound2
mov ah,02h
int 16h
and al,00100000b
jz m0
jmp m_end
Sound0 Proc near
in al,[61h]
and al,0fch
out [61h],al
ret
Endp
Sound Proc near
mov bx,04a9h
mov dx,0043h
mov al,0beh
out dx,al
dec dx
mov al,bl
out dx,al
mov al,bh
out dx,al
in al,[61h]
or al,03h
out [61h],al
ret
Endp
Sound2 Proc near
xor ax,ax
mov es,ax
mov ax,es:[046ch]
add dx,ax
m1: mov ax,es:[046ch]
cmp dx,ax
jnz m1
in al,[61h]
and al,0fch
out [61h],al
ret
Endp
m_end:
mov ax,4c00h
int 21h
ends
END Start
Рисунок 3 – Результат работы программы
3 ПРИНЦИП РАБОТЫ КЛАВИАТУРЫ
Клавиатура выполнена, как правило, в виде отдельного устройства подключаемого к компьютеру тонким кабелем. Клавиатура содержит микроконтроллер который выполняет специализированные функции. Он осуществляет сканирование клавишного поля, обработку дребезга при нажатии и отпускании клавиши, буферизацию кодов и организацию передачи данных последовательном коде в компьютер. Упрощенная принципиальная схема клавиатуры, представлена на рисунке ниже.
Рисунок 3.1 – Принципиальная схема клавиатуры
При нажатии любой клавиши микроконтроллер вырабатывает Scan-код нажатой клавиши. Scan-код отличается от стандартного ASCII кода символа. Scan-код – это просто номер клавиши на клавиатуре. Таким образом Scan-код клавиш ” F ” и “ f ” одинаков. Таблица некоторых Scan-кодов приведена ниже.
Таблица 3.1 – Набор Scan - кодов
16с\с |
10с\с |
клавиша |
16с\с |
10с\с |
клавиша |
16с\с |
10с\с |
клавиша |
01 |
1 |
esc |
1d |
29 |
Ctrl |
39 |
57 |
Space |
02 |
2 |
1 ! |
1e |
30 |
A |
3a |
58 |
Caps Lock |
03 |
3 |
2 @ |
1f |
31 |
s |
3b |
59 |
F1 |
04 |
4 |
3 # |
20 |
32 |
d |
3c |
60 |
F2 |
05 |
5 |
4 $ |
21 |
33 |
f |
3d |
61 |
F3 |
06 |
6 |
5% |
22 |
34 |
g |
3e |
62 |
F4 |
07 |
7 |
6 ^ |
23 |
35 |
h |
3f |
63 |
F5 |
08 |
8 |
7 & |
24 |
36 |
j |
40 |
64 |
F6 |
09 |
9 |
8 * |
25 |
37 |
k |
41 |
65 |
F7 |
0a |
10 |
9 ( |
26 |
38 |
l |
42 |
66 |
F8 |
0b |
11 |
0 ) |
27 |
39 |
; : |
43 |
67 |
F9 |
0c |
12 |
- _ |
28 |
40 |
" |
44 |
68 |
F10 |
0d |
13 |
= + |
29 |
41 |
` ~ |
45 |
69 |
Num Lock |
0e |
14 |
<- |
2a |
42 |
Shift (L) |
46 |
70 |
Scroll Lock |
0f |
15 |
tab |
2b |
43 |
\ | |
47 |
71 |
Home 7 |
10 |
16 |
q |
2c |
44 |
z |
48 |
72 |
↑ 8 |
11 |
17 |
w |
2d |
45 |
x |
49 |
73 |
Pg Up 9 |
12 |
18 |
esc |
2e |
46 |
Ctrl |
4a |
74 |
13 |
19 |
r |
2f |
47 |
v |
4b |
75 |
14 |
20 |
t |
30 |
48 |
b |
4c |
76 |
- 5 |
15 |
21 |
y |
31 |
49 |
n |
4d |
77 |
↔ 4\6 |
16 |
22 |
u |
32 |
50 |
m |
4e |
78 |
+ |
17 |
23 |
i |
33 |
51 |
, < |
4f |
79 |
End 1 |
18 |
24 |
o |
34 |
52 |
. > |
50 |
80 |
↓ 2 |
19 |
25 |
p |
35 |
53 |
/ ? |
51 |
81 |
Pg Dn 3 |
1a |
26 |
[ { |
36 |
54 |
Shift ® |
52 |
82 |
Ins 0 |
1b |
27 |
] } |
37 |
55 |
Prt Sc |
53 |
83 |
del . |
1c |
28 |
Enter |
38 |
56 |
Alt |
54 |
Микроконтроллер передает скан-код в адаптер связи с клавиатурой, расположенный на системной плате. Адаптер связи преобразует полученный последовательный код в параллельный, передает его на входы порта ввода/вывода РА ППИ и устанавливает высокий уровень сигналаIRQ1- запрос на прерывание в контроллер прерываний КР1810ВН59Л. По этому сигналу контроллер формирует запрос на аппаратное прерывание процессора с вектором (типом прерывания) 09Н. Процессор прекращает свою работу и выполняет обработчик прерывания 09h. Который читает Scan-код из порта 60Н (порт РА ППИ) и анализирует Scan-код. Для дешифрации Scan-кодов обработчик прерывания 9h содержит специальную таблицу поиска. Обработчик также проверяет, не является ли скан-код кодом FFh, указывающим на переполнение 4-символьного аппаратного буфера Scan-кодов клавиатуры. При обнаружении кода FFh прерывание 9h сообщает о переполнении сигналом динамика. Когда поступает код от клавиши сдвига или переключателя, то в специальной переменной в памяти ПЭВМ фиксируется изменение статуса (например, переключение с верхнею регистра на нижний). Во всех остальных случаях Scan-код преобразовывается в код символа ASCII. Конечно, процедура сначала определяет установку клавиш сдвига и переключателей, чтобы правильно получить вводимый код (это "а" или "А"). После этого введенный код помещается в буфер клавиатуры, который представляем собой область памяти, способную запомнить до 15 вводимых символов, пока программа слишком занята, чтобы обработать их.
При чтении Scan-кода из порта ввода РА ППИ он не изменяется и любая другая программа может также его прочитать. Обработчик прерывания сообщает адаптеру связи с клавиатурой о завершении чтения скан-кода кратковременной установкой бита 7 порта вывода РВ IIПИ. По этому сигналу сбрасывается содержимое регистра адаптера связи и снимается сигнал запроса на прерывание IRQ1. Обработчик прерывания завершает свою работу выдачей сообщения контроллеру прерывания о завершении обработки. Для этого обработчик выдает код 20Н в порт 20Н (совпадение адреса порта и кода случайное).
Прерывание 9h является аппаратно-зависимым, поэтому его обработчик для 83-клавиатуры отличается от обработчика для расширенной 101-клавишной клавиатуры.
3.1 Таблица векторов прерываний
Для того чтобы связать адрес обработчика прерывания с номером прерывания, используется таблица векторов прерываний, занимающая первый килобайт оперативной памяти - адреса от 0000:0000 до 0000:03FF. Таблица состоит из 256 элементов - FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний. В первом слове элемента таблицы записано смещение, а во втором - адрес сегмента обработчика прерывания.
Таблица 3.2 – Векторы прерываний
Номер |
Описание |
0 |
Ошибка деления. Вызывается автоматически после выполнения команд DIV или IDIV, если в результате деления происходит переполнение (например при делении на 0). DOS обычно при обработке этого прерывание выводит сообщение об ошибке и останавливает выполнение программы. Для процессора 8086 при этом адрес возврата указывает на следующую после команды деления команду, а в процессоре 80286- на первый байт команды вызвавшей прерывание. |
1 |
Прерывание пошагового режима. Вырабатывается после выполнения каждой машиной команды. Если в слове флагов установлен бит пофлаговой трассирови TF. Используется для отладки программ. Это прерывание не вырабатывается после выполнения команды MOV в сегментные регистры или после загрузки сегментных регистров командой POP. |
2 |
Аппаратное немаскируемое прерывание. Это прерывание может использоваться по разному в разных машинах. Обычно вырабатывается при ошибке четности оперативной памяти или запросе прерывпания сопроцессора. |
3 |
Прерывание для трассировки. Это прерывание генерируется при выполнении однобайтовой машиной с кодом CCh и обычно используется отладчиками для установки точки прерывания. |
4 |
Переполнение. Генерируется машинной командой INTO, если установлен флаг OF. Если флаг установлен, то команда INTO выполняется как NOP Это прерывание используется для обработки ошибок арифметических операций. |
5 |
Печать копии экрана. Генерируется при нажатии на клавиатуре PrtScr. Обычно используется для печати образа экрана. Для процессора 80286 генерируется при выполнении машинной команды BOUND, если проверяемое значение вышло за приделы заданного диапазона. |
8 |
IRQ0 прерывание интервального таймера возникает 18,2 раза в сек |
9 |
IRQ1 Прерывание от клавиатуры. Генерируется при нажатии и при отжатии клавиши. |
A |
IRQ2 используется при каскадировании аппаратных прерываний в машинах класса АТ. |
B |
IRQ3 Прерывание асинхронного порта COM2 |
C |
IRQ4 Прерывание асинхронного порта COM1 |
D |
IRQ5 Прерывание от контроллера жесткого диска от XT |
E |
IRQ6 Прерывание генерируется контроллером флопи диска после завершения операции. |
F |
IRQ7 прерывание принтера. Генерируется принтером когда он готов к выполнению очередной операции. Многие адаптеры принтера не используют это прерывание. |
70 |
IRQ8 прерывание от часов реального времени. |
71 |
IRQ9 прерывание от контроллера EGA |
75 |
IRQ13 прерывание от математического сопроцессора |
76 |
IRQ14 прерывание от контроллера жесткого диска |
Прерыванию с номером 0 соответствует адрес 0000:0000. прерыванию с номером 1 - 0000:0004 и т.д. Поэтому прерыванию от клавиатуры 09h соответствует адрес 0000:0024. т.е.в ячейке с адресом 0000:0024 хранится смещение обработчика прерывания, а в ячейке с адресом 00:00026 хранится адрес сегмента этого обработчика прерывания.
Инициализация таблицы происходит частично BIOS после тестирования аппаратуры и перед началом загрузки операционной системой, частично при загрузке DOS. DOSможет переключить на себя некоторые прерывания BIOS.
Ниже приведены назначения некоторых векторов прерываний:
3.2 Маскирование прерывани
й
Часто при выполнении критических участков программ, для того чтобы гарантировать определенную последовательность команд целиком приходится запрещать прерывания. Это можно сделать командой CLI. Ее нужно поместить в начало критической последовательности команд, а в конце расположить команду STI, разрешающую процессору воспринимать прерывания. Команда CLI
Запрещает только маскируемые прерывания, немаскируемые всегда обрабатываются процессором.
Если вы используете запрет прерываний с помощью команды CLI, следите за тем, чтобы прерывания не отключались на длительный период времени, т.к это может привести к нежелательным последствиям. Например будут отставать часы.
3.3 Изменение таблицы векторов прерываний
Вашей программе может потребоваться организовать обработку некоторых прерываний. Для этого программа должна переназначить вектор на свой обработчик. Это можно сделать, изменив содержимое соответствующего элемента таблицы векторов прерывания.
Очень важно не забыть перед завершением работы восстановить содержимое измененных векторов в таблице прерываний, т.к. после завершения работы программы память, которая была ей распределена, считается свободной и может быть использована для загрузки другой программы. Если вы забыли восстановить вектор и пришло прерывание, то система может разрушиться – вектор теперь указывает на область, которая может содержать что угодно.
Поэтому последовательность действий для нерезидентных программ, желающих обрабатывать прерывания, должна быть такой:
- прочитать содержимое элемента таблицы векторов прерываний для вектора с нужным вам номером
- запомнить это содержимое (адрес старого обработчика прерывания) в области данных программы;
- установить новый адрес в таблице векторов прерываний так, чтобы он соответствовал началу Вашей программы обработки прерывания;
- перед завершением работы программы прочитать из области данных адрес старого обработчика прерывания и записать его в таблицу векторов прерываний.
Кроме того, операция изменения вектора прерывания должна быть непрерывной в том смысле, что во время изменения не должно произойти прерывание с номером, для которого производится замена программы обработки. Поэтому перед заменой адреса в таблице векторов прерываний необходимо запретить все прерывания, а после замены разрешить.
3.4 Задание
Напишите программу, которая перехватывает 09h и выполняет следующие функции:
= читает Scan-код нажатой клавиши;
= анализирует введенный Scan-код:
-если введенный Scan-код - это клавиши К1, то включает звук с частотой F1 кГц и переходит к системному обработчику 09h.
-если введенный Scan-код - это клавиши К2, то выключает звук с частотой F1 кГц и переходит к системному обработчику 09h.
-если любой другой Scan-код, то вызывает системный обработчик прерывания 09h.
= выходит из программы по нажатию заданной клавиши
Рисунок 3.2 – Блок - схема основной программы
№ Варианта |
F1, кГц |
К1 |
К2 |
Клавиша выхода |
1 |
5,5 |
A |
0 |
Insert |
Основная программа
Программа перехватывает прерывание 09h. По нажатию клавиши C генерирует звук частотой 9,5 кГц, а по нажатию клавиши 2 выключает звук. По клавише Scroll lock – выход из программы.
stacsegment
db 64 dup (0)
ends
data segment
old_offs dw ?
old_seg dw ?
msg db
ends
code segment
assume ds:data, cs:code, ss:stac
Start: mov ax,data
mov ds,ax
mov es,ax
mov ax,0
mov es,ax
mov ax,es:[0024h]
mov old_offs,ax
mov ax,es:[0026h]
mov old_seg,ax
cli
mov word ptr es:[0024h], offset my_int
mov word ptr es:[0026h], seg my_int
sti
m: mov ah,02h
int 16h
and al,10000000b
jnz m_end
jmp m
m_end:
cli
mov ax,old_offs
mov es:[0024h]
mov ax,old_seg
mov es:[0026h]
sti
mov ax,4C00h
int 21h
my_int proc far
in al,[60h]
cmp al,1eh
jnz m1
mov bx,00d9h
mov al,0beh
out [43h],al
mov al,bl
out [42h],al
mov al,bh
out [42h],al
in al,[61h]
or al,03
out [61h],al
jmp m2
m1: cmp al,0bh
jnz m2
in al,[61h]
and al,0fch
out [61h],al
m2:
mov ah,09h
lea dx,msg
int 21h
jmp dword ptr ds:old_offs
my_int endp
ends
END Start
ENDStart
Рисунок 3.3 – Результат работы программы
4 ПРИНЦИПЫ РАБОТЫ ВИДЕОСИСТЕМЫ ПЭВМ
Видеосистема персонального компьютера, предназначенная для формирования изображений, содержит две составные части: видеоадаптер и монитор. Основу видеоадаптера составляют специализированные схемы для генерирования электрических сигналов, управляющих монитором.
Все видеосистемы содержат электронные компоненты, формирующие сигналы синхронизации, цветности и управляющие генерированием текстовых символов. Кроме того, во всех видеосистемах имеется видеобуфер. Он представляет собой область оперативной памяти, которая предназначена только для хранения текста или графической информации, выводимой на экран монитора. Наиболее распространенными типами видеоадаптеров являются адаптер VGA и адаптер SuperVGA.
Центральным устройством в управлении видеомонитором является контроллер электронно-лучевой трубки(ЭЛТ). В ПЭВМ применяются программируемые контроллеры, позволяющие задать все основные параметры развертки изображения на экране изображения на экране.
Режим работы видеомонитора характеризуется следующими понятиями:
- вертикальным разрешением (количество строк растра на экране);
- горизонтальным разрешением (количеством символов или точек в строке);
- представлением данных в видеопамяти;
- атрибутами вывода, задающими цвет, мерцание и т.п.
Параметры развертки заносятся в определенные регистры контролера ЭТЛ.
Например, адаптеры MGA и CGA содержат контроллер ЭЛТ Motorola 6845, имеющий программируемые регистры, показанные в таблице 4.1.
Таблица 4.1 – Программируемые регистры
Регистр |
Наименование |
Описание |
R0 |
Общая длительность строки (horizontaltotal) |
Время вывода строки растра в символьных тактах. |
R1 |
Ширина кадра (horizontal displayed) |
Количество символов в строке |
R2 |
Позиция горизонтальной синхронизации (horizontalsyncposition) |
Начало горизонтальной синхронизации в символьных тактах. |
R3 |
Ширина синхронизации (sync width ) |
Деятельность синхронизации (Младшая тетрада - вертикальной) |
R4 |
Размер кадра(vertical total) |
Общее кол-во строк в кадре |
R5 |
Вертикальное выравнивание (vertical adjust) |
Поправка для частоты 50 или 60Гц |
R6 |
Высота кадра(vertical displayed) |
Количество строк изображения в кадре |
R7 |
Позиция вертикальной синхронизации (verticalsyncposition) |
Начало вертикальной синхронизации в символьных тактах |
R8 |
Биты 4-5: режимрасслоения (interlace mode); биты 6-7: сдвиг (skew) |
R9 |
Макс. Число строк растра |
Количество строк изображения в кадре |
R10 |
Начало курсора |
Начальная строка курсора |
R11 |
Конец курсора |
Конечная строка курсора |
R12
R13
|
Начальный адрес видеопамяти |
Старший байт
Младший байт
|
R14
R15
|
Позиция курсора |
Старший байт
Младший байт
|
R16
R17
|
Позиция светового пера |
Старший байт
Младший байт
|
Следует учитывать, что самостоятельное программирование контроллера ЭЛТ чревато физическим разрушением видеомонитора, поэтому не следует прибегать к нему, если вы не вполне понимаете принципы расчета параметров раскрутки. Все необходимые действия по инициализации дисплея обычно выполняются BIOS, поэтому реальная необходимость в непосредственном программировании контроллера ЭЛТ возникает крайне редко.
4.1 Адресация и режимы работы адаптера
CGA
Цветной графический адаптер CGA (ColorGraphicsAdapter) – это графический видеоконтроллер среднего разрешения. Для него зарезервированы порты ввода-вывода 3D0h – 3DFh, имеющие назначение, показанные в таблице 4.2.
Таблица 4.2 – Порты ввода/вывода
Порт |
Операция |
Описание |
3D4h |
запись |
регистр индекса ЭЛТ. Используется для выбора регристра контроллера ЭЛТ. Для записи регистра ЭЛТ Rn нужно выполнить команды: out 3D4h,n и 3D5h,данные (n - номер регистра) |
3D5h |
запись\чтение |
Регистр данных ЭЛТ. Позволяет записывать все регистры ЭЛТ и читать регистры R12-R17 |
3D8h |
запись |
Регистр режимов дисплея. |
3D9h |
запись |
Регистр выбора цветов. Выбор палитры задает набор основных цветов в графическом режиме. Палитра 0 - зеленый\красный\коричневый, палитра 1 - бирюзовый\сиреневый\светло-серый |
3DAh |
чтение |
Регистр состояния дисплея. |
3DBh |
запись\чтение |
Вывод любого байта выключает триггер светового пера. |
3DCh |
запись\чтение |
Вывод любого байта включает триггер светового пера. |
Рисунок 4.1 - Регистр режимов работы дисплея.
Рисунок 4.2 - Регистр работы дисплея
4.2 Режим работы дисплея
Все видеосистемы персональных компьютеров, за исключением адаптера MDA, могут работать в двух основных режимах – текстовом и графическом. В текстовом режиме экран разделяется на отдельные символьные позиции, в каждой из которых выводится один символ.
В видеобуфере каждой символьной позиции соответствует два байта . Байт с четным адресом содержит ASCII-код символа, а соседний байт с большим нечетным адресом содержит атрибуты последовательности , которая отображается на прямоугольные координаты (столбец, строка) экрана.
В двух наиболее распространенных форматах текстового режима не экране формируется 25 текстовых строк , содержащих по 40 или 80 символов. Таким образом, емкость видеобуфера, необходимая для заполнения экрана, составляет 2000 байт (25 строк * 40 символов *2 байта) или 4000 байт ( 25 строк * 80 символов * 2 байта ). Эту область называют страницей. Если емкость видеобуфера превышает размер одной страницы, в нём можно организовывать несколько страниц.
Стартовый адрес видеобуфера для текстовых режимов адаптеров EGA, MCGA, VGA, SuperVGA и с графическим сопроцессором одинаков – В800:0000.
Соответствие цветов атрибутам зависит от типа видеоадаптера. Структура байта атрибутов для CGA адаптера изображена на рисунке 3. таким образом, цвет фона может варьироваться от 0 до 7, а цвет символа с учетом яркости – от 0 до 0Fh. Значение атрибута задается формулой: 16*(цвет фона) + цвет символа (плюс 128 для мерцания символа).
При использовании CGA адаптера и монохромного дисплея цвет символа и фона передается яркостью символа и фона соответственно.
Рисунок 4.3 - Структура байта атрибутов для CGA адаптера
(0,0) (0,39) или (0,79)
X
Экран
(24,0) (24,39) или (24,79)
Y
Рисунок 4.4 – График CGA адаптера
Таблица 4.3 – Задание цвета в адаптере CGA
Номер |
Цвет |
Номер |
Цвет |
0 |
Черный |
8 |
Серый |
1 |
Синий |
9 |
Ярко-синий |
2 |
Зеленый |
А |
Ярко-зеленый |
3 |
Бирюзовый |
В |
Голубой |
4 |
Красный |
С |
Алый |
5 |
Сиреневый |
D |
Розовый |
6 |
Коричневый |
E |
Желтый |
7 |
Светло-серый |
F |
Белый |
Видеопамять CGA располагается в адресах ОЗУ B8000h – BFFFFh. CGA имеет 2 типа текстовых режимов: 25 строк по 40 символов и по 80 символов в строке. В режимах 25 х 40 одна страница занимает 800h байтов, поэтому видеопамять состоит из 8 страниц. В режимах 25 х 80 страница занимает 1000h байтов и видеопамять состоит из 4 страниц.
Адрес кода символа в текстовых режимах равен:
B800h: n*P+m*L+2*C, адрес атрибута на единицу больше. Здесь L – номер строки (0 – 24), C – номер столбца (0 – 79 или 0 – 39), m = 2 * количество столбцов режима, n = 800h при m=80 и 1000h при m=160, Р – номер страницы (0-7 или 0-3).
CGA имеет два типа графических режимов: цветной режим, имеющий разрешение 320 точек по горизонтали на 200 точек по вертикали, и черно-белый режим с разрешением 640 точек на 200 точек. В режиме 320 х 200 каждый пиксель задается двумя битами, кодирующими его цвет; в режиме 620 х 200 цвет пикселя задается одним битом (белый/черный). В графических режимах один экран требует 16К видеопамяти, поэтому имеется одна страница видеопамяти, которая размещается в областях B8000h – BFFFFh. Эта страница расслоена на две области: область с адреса B8000h содержит пиксели, имеющие четные номера строк; область с адреса ВА000h содержит пиксели из нечетных строк. Поэтому адрес байта, содержащего точку с координатами (X,Y), равен в цветном режиме B800h : 2000h * (Y % 2) + 80 * int(Y/2) + int(X/4), а номера соответствующих битов в этом байте равны 7 – 2 * (X % 4) И 6 – 2 * (X %4). Здесь Х – горизонтальная позиция точки (0 – 319), Y – ее вертикальная позиция (0 – 199), знак % обозначает остаток от деления одного числа на другое.
Адрес байта, содержащего точку с координатами (X,Y), равен в черно-белом режиме B800h : 2000h * (Y % 2) + 80 * int(Y/2) + int(X/8), а номер соответствующего бита в этом байте равен 7 – (X % 8). Здесь Х – горизонтальная позиция точки (0 – 639), Y – ее вертикальная позиция (0 – 199)
4.3 Задание
Напишите программу, которая выводит на экран дисплея строку символов (ФАМИЛИЯ ИМЯ ОТЧЕСТВО), в строке с номером L, начиная с колонки С. Атрибуты символов должны циклически (во времени) изменяться от А1 до А2 с задержкой Deley мсек.
№ варианта |
L |
C |
A1 |
A2 |
Deley |
1 |
10 |
14 |
00h |
0Fh |
550 |
Рисунок 4.4 – Блок - схема основной программы
Основная программа
Программа выводит на экран в текстовом режиме строку «Вальков Антон Петрович» в 6-ю строку 6-й столбец 0-й страницы в режиме 160 строк. Каждая буква выводится с задержкой 680 мсек. Строка выводится 15 раз с разными атрибутами.
Stac segment
db 64 dup(0)
ends
data segment
Msg db
stQ db
ends
code segment
assume ds:data,cs:code,ss:stac
Start:
mov ax,data
mov ds,ax
mov es,ax
mov ax,0b800h
mov es,ax
mov ah,05h
mov al,0
int 10h
mov cx,4000
mov di,-2
m2:
add di,2
mov byte ptr es:di,' '
mov byte ptr es:di+1,15
loop m2
mov di,1626;160*10+14*2-2
lea cx,Stq
lea dx,Msg
sub cx,dx;
mov si,-1
m1:
inc si
add di,2
mov al,byte ptr Msg[si]
mov byte ptr es:di,al
loop m1
mov bl,0Fh
m0:
inc bl
mov di,1627;
lea cx,Stq
lea dx,Msg
sub cx,dx;
m4:
cmp bl,70h
jne m5
mov bl,00h
m5:
add di,2
mov byte ptr es:di,bl
loop m4
call delay
mov ah, 02h
int 16h
and al, 10000000b
jz m0
mov ax,4c00h
int 21h
delay proc near
mov ah,01h
mov cx,0
mov dx,0
int 1ah
again:
mov ah,00h
int 1ah
cmp dx,9
jle again
ret
delay endp
ends
END Start
Рисунок 4.5 – Результат работы программы
ЗАКЛЮЧЕНИЕ
Микропроцессорная технология потенциально имеет много назначений: создание персональных электронных партнеров, интеллектуализация (в известном смысле "оживление") всей техносферы, усиление и защита функций организма с помощью персональных медико-кибернетических устройств, в том числе вживляемых в организм...
В результате эволюции электронной технологии от "микро" к "нано" и ее слияния с "генной", вероятно, будет достигнуто состояние, при котором станет возможным синтез в массовых количествах любых технических устройств. Однако вряд ли в этом состоит основная цель будущей нано-технологии. Она, по всей вероятности, сможет синтезировать структуры, способные к эволюции и саморазвитию.
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ:
1. Гуров В.В., Рыбаков А.А. Лабораторный практикум "Разработка микропроцессорных систем на основе однокристальных микроконтроллеров". - М.: МИФИ, 2000.
2. Шнитман В. Современные высокопроизводительные компьютеры.
3. Информационно-аналитические материалы Центра Информационных Технологий, 1996.
4. Преснухин Л.Н. Микропроцессоры.
5. Гивоне Д., Россер Р. Микропроцессоры и микрокомпьютеры.
6. Пузанков Д.В. Микропроцессорные системы.
7. Микропроцессорные устройства систем управления Автор: Иванов Ю.И., Югай В.Л.
8. Основы микропроцессорной техники Новиков Ю.В. , Скоробогатов П.К.
9. Л.М. Гольденберг. Цифровые устройства и микропроцессорные системы. 10 10 . http://www.dailytechinfo.org – сайт новинок в информационных технологиях
|