Периферийные устройства и интерфейсы периферийных устройств
Связь компьютера с внешним миром. Эффективность использования вычислительной системы. Ввод и вывод информации. Основные приемы программирования на Ассемблере периферийных устройств компьютера. Скан-коды для клавиш. Регистры контроллера клавиатуры.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 15.02.2012 |
Размер файла | 56,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
РОССИЙСКОЙ ФЕДЕРАЦИИ
ВОЛЖСКИЙ УНИВЕРСИТЕТ им. В.Н.ТАТИЩЕВА
С.В. КРАСНОВ, В.Ф. ЛАРИНА
Периферийные устройства
Лабораторный практикум
по дисциплинам
«Периферийные устройства» и «Интерфейсы периферийных устройств»
Тольятти 2006
ББК 32. 973
С.В.Краснов, В.Ф.Ларина. Периферийные устройства: лабораторный практикум. -Тольятти: Волжский университет им. В.Н.Татищева, 2006.- 72 с.
Содержит примеры использования языка Ассемблер при программировании работы клавиатуры, мыши, аудио- и видеосистем, дисков. Каждый пример сопровождается кратким изложением теоретического материала.
Для студентов специальностей 230101 (220100) «Вычислительные машины, комплексы, системы и сети» и 230201 (071900) «Информационные системы».
Рецензент: канд.техн.наук, доцент Куралесова Н.О.
Утверждено Ученым советом ВУиТ 30.12.2006
© ВОЛЖСКИЙ УНИВЕРСИТЕТ им. В.Н.ТАТИЩЕВА, 2006
ВВЕДЕНИЕ
Периферийные устройства связывают компьютер с внешним миром, осуществляя ввод и вывод информации. Эффективность использования вычислительной системы в целом в значительной степени зависит от эффективности функционирования “периферии”.
Ассемблер является одним из самых старых из существующих на сегодня языков. Когда-то это был основной язык, но со временем появились более удобные средства общения с компьютером. Тем не менее язык не стал «мертвым» языком. Ассемблер, по словам В.Ю. Пирогова, - “это язык процессора и, следовательно, он будет нужен до тех пор, пока будут существовать процессоры” [11]. Являясь, по сути, символическим представлением машинного языка, Ассемблер позволяет в случае необходимости разрабатывать высокоэффективные программы, решая проблемы, связанные, в частности, с аппаратурой компьютера. Особенно ценен он в особых случаях, когда существуют жесткие ограничения на использование памяти или программа “критична” по времени.
Общепризнано, что в базовой подготовке программистов в качестве фундамента выступают знания принципов работы компьютера, его архитектуры и языка Ассемблер [15].
Целью данного лабораторного практикума является ознакомление с основными приемами программирования на Ассемблере периферийных устройств компьютера. Лабораторный практикум содержит теоретические сведения и подробно прокомментированные примеры использования языка Ассемблер при программировании работы клавиатуры, мыши, аудио- и видеосистем, дисков, а также для работы с файлами. При необходимости получения более подробной информации по каждому из затронутых вопросов можно обратиться к литературным источникам, ссылки на которые приводятся по мере изложения материала. В конце каждого раздела представлены задачи, предназначенные для самостоятельного решения.
Лабораторная работа 1. ОРГАНИЗАЦИЯ ВВОДА ДАННЫХ И УПРАВЛЕНИЕ КЛАВИАТУРОЙ
1.1 Цель работы
Изучение приемов ввода информации с клавиатуры и управление клавиатурой с помощью ее контроллера.
1.2 Теоретические сведения
Скан-код клавиши или комбинации клавиш - это номер, идентифицирующий их положение на клавиатуре (таблицы 1.1 и 1.2). Размер скан-кода - 1 байт.
Система представления символов в персональных компьютерах базируется на Американском стандартном коде для обмена информацией ASCII (American Standard Code for Information Interchange), включающем управляющие символы, используемые в коммуникационных протоколах для передачи команд периферийным устройствам (таблица 1.3), символы пишущей машинки - цифры, буквы и специальные знаки - и символы псевдографики (таблица 1.4). Размер ASCII-кода - 1 байт.
ASCII-код не связан напрямую со скан-кодом, так как одной и той же клавише могут соответствовать несколько символов - значений кода ASCII.
Расширенный код вырабатывается при нажатии функциональных клавиш и комбинаций управляющих и символьных клавиш, которые не имеют представляющего их символа ASCII [4, 5]. Он имеет размер 2 байта, при этом первый байт всегда ASCII_0 (null), а второй байт содержит соответствующий скан-код (см. таблицу 1.2).
Клавиатура - основное устройство ввода. Это совокупность механических датчиков, воспринимающих давление на клавиши и замыкающих электрическую цепь. Клавиатура имеет программируемый контроллер i8042. Его функции состоят в приеме скан-кодов от клавиатуры и управлении ее состоянием. Интерпретацией скан-кода занимается основной процессор.
Таблица 1.1 - Скан-коды для клавиш алфавитно-цифровой группы [8]
Скан-код клавиши |
Символ в режиме |
Скан-код клавиши |
Символ в режиме |
|||
латинском |
русском |
латинском |
русском |
|||
01h |
Esc |
1Eh |
A a |
Ф ф |
||
02h |
1 ! |
1 ! |
1Fh |
S s |
Ы ы |
|
03h |
2 @ |
2 « |
20h |
D d |
В в |
|
04h |
3 # |
3 № |
21h |
F f |
А а |
|
05h |
4 $ |
4 ; |
22h |
G g |
П п |
|
06h |
5 % |
5 % |
23h |
H h |
Р р |
|
07h |
6 ^ |
6 : |
24h |
J j |
О о |
|
08h |
7 & |
7 ? |
25h |
K k |
Л л |
|
09h |
8 * |
8 * |
26h |
L l |
Д д |
|
0Ah |
9 ( |
9 ( |
27h |
: ; |
Ж ж |
|
0Bh |
0 ) |
0 ) |
28h |
“ ` |
Э э |
|
0Ch |
- _ |
29h |
` ~ |
E ё |
||
0Dh |
= + |
2Ah |
Shift Left |
|||
0Eh |
BackSpace |
2Bh |
| \ |
/ \ |
||
0Fh |
Tab |
2Ch |
Z z |
Я я |
||
10h |
Q q |
Й й |
2Dh |
X x |
Ч ч |
|
11h |
W w |
Ц ц |
2Eh |
C c |
С с |
|
12h |
E e |
У у |
2Fh |
V v |
М м |
|
13h |
R r |
К к |
30h |
B b |
И и |
|
14h |
T t |
Е е |
31h |
N n |
Т т |
|
15h |
Y y |
Н н |
32h |
M m |
Ь ь |
|
16h |
U u |
Г г |
33h |
< , |
Б б |
|
17h |
I i |
Ш ш |
34h |
> . |
Ю ю |
|
18h |
O o |
Щ щ |
35h |
? / |
, . |
|
19h |
P p |
З з |
36h |
Shift Right |
||
1Ah |
{ [ |
Х х |
38h |
Alt |
||
1Bh |
} ] |
Ъ ъ |
39h |
Пробел |
||
1Ch |
Enter |
3Ah |
CapsLock |
|||
1Dh |
Ctrl |
Таблица 1.2 - Скан-коды для клавиш функциональной, дополнительной и цифровой групп, а также для комбинаций клавиш [8]
Скан-код |
Клавиша или комбинация клавиш |
Скан-код |
Клавиша или комбинация клавиш |
Скан-код |
Клавиша или комбинация клавиш |
|
3Bh |
F1 |
54h |
Shift+F1 |
72h |
PrintScreen |
|
3Ch |
F2 |
55h |
Shift+F2 |
46h |
Scroll Lock |
|
3Dh |
F3 |
56h |
Shift+F3 |
45h |
Num Lock |
|
3Eh |
F4 |
57h |
Shift+F4 |
37h |
[*] |
|
3Fh |
F5 |
58h |
Shift+F5 |
4Ah |
[-] |
|
40h |
F6 |
59h |
Shift+F6 |
4Eh |
[+] |
|
41h |
F7 |
5Ah |
Shift+F7 |
52h |
Insert [Ins, 0] |
|
42h |
F8 |
5Bh |
Shift+F8 |
53h |
Delete [Del, .] |
|
43h |
F9 |
5Ch |
Shift+F9 |
47h |
Home [7] |
|
44h |
F10 |
5Dh |
Shift+F10 |
4Fh |
End [1] |
|
85h |
F11 |
87h |
Shift+F11 |
49h |
PgUp [9] |
|
86h |
F12 |
88h |
Shift+F12 |
51h |
PgDn [3] |
|
68h |
Alt+F1 |
5Eh |
Ctrl+F1 |
48h |
^ [8] |
|
69h |
Alt+F2 |
5Fh |
Ctrl+F2 |
4Bh |
< [4] |
|
6Ah |
Alt+F3 |
60h |
Ctrl+F3 |
50h |
v [2] |
|
6Bh |
Alt+F4 |
61h |
Ctrl+F4 |
4Dh |
> [6] |
|
6Ch |
Alt+F5 |
62h |
Ctrl+F5 |
4Ch |
[5] |
|
6Dh |
Alt+F6 |
63h |
Ctrl+F6 |
73h |
Ctrl+< |
|
6Eh |
Alt+F7 |
64h |
Ctrl+F7 |
74h |
Ctrl+> |
|
6Fh |
Alt+F8 |
65h |
Ctrl+F8 |
75h |
Ctrl+End |
|
70h |
Alt+F9 |
66h |
Ctrl+F9 |
77h |
Ctrl+Home |
|
71h |
Alt+F10 |
67h |
Ctrl+F10 |
1Ch |
Ctrl+PgUp |
|
8Bh |
Alt+F11 |
89h |
Ctrl+F11 |
5Fh |
Ctrl+PgDn |
|
8Ch |
Alt+F12 |
8Ah |
Ctrl+F12 |
|||
78h |
Alt+1 |
7Ch |
Alt+5 |
80h |
Alt+9 |
|
79h |
Alt+2 |
7Dh |
Alt+6 |
81h |
Alt+0 |
|
7Ah |
Alt+3 |
7Eh |
Alt+7 |
|||
7Bh |
Alt+4 |
7Fh |
Alt+8 |
Примечание - Символ в квадратных скобках соответствует клавишам на цифровой клавиатуре.
Таблица 1.3 - Управляющие символы ASCII [8]
DEC |
HEX |
Имя |
Назначение |
DEC |
HEX |
Имя |
Назначение |
|
0 |
00 |
NUL |
Нулевой ( пустой ) символ |
16 |
10 |
DLE |
Завершение сеанса связи |
|
1 |
01 |
SOH |
Начало заголовка |
17 |
11 |
DC1 |
Управление устройством 1 |
|
2 |
02 |
STX |
Начало текста |
18 |
12 |
DC2 |
Управление устройством 2 |
|
3 |
03 |
ETX |
Конец текста |
19 |
13 |
DC3 |
Управление устройством 3 |
|
4 |
04 |
EOT |
Конец передачи |
20 |
14 |
DC4 |
Управление устройством 4 |
|
5 |
05 |
ENQ |
Запрос подтверждения |
21 |
15 |
NAK |
Ошибка передачи |
|
6 |
06 |
ACK |
Подтверждение (квитирование ) |
22 |
16 |
SYN |
Холостой ход передатчика |
|
7 |
07 |
BEL |
Звонок |
23 |
17 |
ETB |
Конец передачи блока |
|
8 |
08 |
BS |
Шаг назад ( возврат на одну позицию) |
24 |
18 |
CAN |
Отмена |
|
9 |
09 |
HT |
Горизонтальная табуляция (TAB ) |
25 |
19 |
EM |
Конец носителя данных |
|
10 |
0A |
LF |
Перевод строки |
26 |
1A |
SUB |
Подстановка (замена символа) |
|
11 |
0B |
VT |
Вертикальная табуляция |
27 |
1B |
ESC |
Переход ( посылка сложной команды) |
|
12 |
0C |
FF |
Перевод страницы |
28 |
1C |
FS |
Разделитель файлов |
|
13 |
0D |
CR |
Возврат каретки (ENTER) |
29 |
1D |
GS |
Разделитель групп |
|
14 |
0E |
SO |
Переход на нижний регистр |
30 |
1E |
RS |
Разделитель записей |
|
15 |
0F |
SI |
Переход на верхний регистр |
31 |
1F |
US |
Разделитель полей |
|
127 |
7F |
DEL |
Удаление символа |
Таблица 1.4 - Символы ASCII
dec |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
||
hex |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
||
0 |
0 |
nul |
O |
O |
¦ |
¦ |
¦ |
¦ |
? |
? |
ЎЫ |
? |
> |
+ |
d |
d |
_ |
|
16 |
1 |
> |
< |
¦ |
! |
¶ |
§ |
- |
? |
^ |
v |
> |
< |
? |
Ўк |
^ |
Ў |
|
32 |
2 |
пробел |
! |
" |
# |
$ |
% |
& |
' |
( |
) |
* |
+ |
, |
- |
. |
/ |
|
48 |
3 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
: |
; |
< |
= |
> |
? |
|
64 |
4 |
@ |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
|
80 |
5 |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
[ |
\ |
] |
^ |
_ |
|
96 |
6 |
` |
a |
b |
c |
d |
e |
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
|
112 |
7 |
p |
q |
r |
s |
t |
u |
v |
w |
x |
y |
z |
{ |
¦ |
} |
~ |
¦ |
|
128 |
8 |
А |
Б |
В |
Г |
Д |
Е |
Ж |
З |
И |
Й |
К |
Л |
М |
Н |
О |
П |
|
144 |
9 |
Р |
С |
Т |
У |
Ф |
Х |
Ц |
Ч |
Ш |
Щ |
Ъ |
Ы |
Ь |
Э |
Ю |
Я |
|
160 |
A |
а |
б |
в |
г |
д |
е |
ж |
з |
и |
й |
к |
л |
м |
н |
о |
п |
|
176 |
B |
- |
- |
- |
¦ |
+ |
¦ |
¦ |
¬ |
¬ |
¦ |
¦ |
¬ |
- |
- |
- |
¬ |
|
192 |
C |
L |
+ |
T |
+ |
- |
+ |
¦ |
¦ |
L |
г |
¦ |
T |
¦ |
= |
+ |
¦ |
|
206 |
D |
¦ |
T |
T |
L |
L |
- |
г |
+ |
+ |
- |
- |
- |
- |
¦ |
¦ |
- |
|
224 |
E |
р |
с |
т |
у |
ф |
х |
ц |
ч |
ш |
щ |
ъ |
ы |
ь |
э |
ю |
я |
|
240 |
F |
Ё |
ё |
Є |
є |
? |
ї |
Ў |
ў |
° |
* |
• |
v |
№ |
¤ |
¦ |
Примечания
1 В 16-ричной системе счисления номера строк (столбец hex) соответствуют первой цифре в коде символа, столбцов (строка hex) - второй. Например, код большой латинской буквы А - 41h.
2 Для получения кода в 10-тичной системе счисления следует к соответствующей величине из столбца dec прибавить число из строки dec. Таким образом, код большой латинской буквы А: 64+1=65.
Контроллер связан с процессором 8-битной шиной данных и двумя 8-битными портами: ввода и вывода (таблица 1.5).
Таблица 1.5 - Регистры контроллера клавиатуры [8]
Порт |
Режим работы |
Назначение |
|
60h |
Чтение / Запись |
Регистр данных / команд |
|
64h |
Чтение |
Регистр состоянияБит 7 - ошибка четностиБит 6 - тайм-аут приемника/общий тайм-аутБит 5 - тайм-аут передатчикаБит 4 - состояние «замка» клавиатурыБит 3 - признак записи команды / данныхБит 2 - признак типа последнего общесистемного сбросаБит 1 - признак наличия данных во входном буфере:0 - входной буфер свободен (готовность к приему команды / данных)1 - входной буфер полонБит 0 - признак наличия данных в выходном буфере:0 - выходной буфер свободен1 - выходной буфер полон |
Схема программирования контроллера клавиатуры
а) Запрет прерывания
CLI
б) Ожидание готовности контроллера к приему команды / данных
xor CX, CX ; CX - счетчик количества повторений цикла
выход по счетчику более чем через 65 тысяч повторов
wait1: in AL, 64h ; чтение регистра состояния
test AL, 00000010b ; анализ бита №1 - входной буфер свободен?
loopnz wait1 ; если бит №1 не нуль (буфер не освободился ) и CX?0,
; переход на метку wait1
jnz err ; анализ причины выхода из цикла:
; если бит №1 не нуль (буфер так и не освободился),
;переход на метку err
………
err: …… ; действия при ошибке
в) Отправка команды
mov AL, <команда>
out 60h, AL
г) Если в команде больше одного байта или нужно дополнительно передать параметры, то необходимо:
1) дождаться готовности контроллера к приему (повторить п. б), так как входной буфер может быть занят отправленной командой
2) отправить следующий байт (аналогично п. в).
д) Разрешение прерываний
STI
Некоторые команды контроллера клавиатуры
Команда EDh. Управление светодиодами (индикаторами состояния) клавиатуры
Позволяет включать и отключать светодиоды CapsLock, NumLock и ScrollLock. Команда двухбайтная - следующий за кодом команды байт имеет формат:
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Содержимое |
0 |
0 |
0 |
0 |
0 |
CapsLock |
NumLock |
ScrollLock |
=1 - включить
=0 - выключить
компьютер периферийный программирование ассемблер
Команда EEh. Эхо-диагностика.
В ответ микропроцессор выдает код EEh. Используется при возникновении ошибок в работе клавиатуры.
Прочие команды подробно описаны в литературе [8, 11].
Два байта состояния клавиатуры записываются в область данных BIOS по адресам 0000h:0417h (0040h:0017h) и 0000h:0418h (0040h:0018h) [6]. В таблице 1.6 представлены форматы указанных байтов.
Таблица 1.6 - Форматы байтов состояния клавиатуры
Бит № |
Формат байта |
||
0000h:0417h |
0000h:0418h |
||
Если бит=1, нажата клавиша (включен режим): |
|||
0 |
Shift правая |
Ctrl левая |
|
1 |
Shift левая |
Alt левая |
|
2 |
Ctrl любая |
Ctrl правая |
|
3 |
Alt любая |
Alt правая |
|
4 |
ScrollLock |
ScrollLock |
|
5 |
NumLock |
NumLock |
|
6 |
CapsLock |
CapsLock |
|
7 |
Insert |
SysReq |
ПРИМЕР Протестировать состояние индикатора NumLock.
Comment * Чтобы прочитать байт состояния, необходимо в команде указать его полный адрес 0000h:0417h, так как по умолчанию данные сегментируются по регистру DS, что по условию задачи неприемлемо. В связи с ограничениями, налагаемыми командой mov на типы операндов, пересылка нуля в сегментный регистр ES выполняется за несколько шагов*
xor AX, AX ; 0 AX
mov ES, AX; ; AX ES , т.е. 0 ES
mov AL, ES:[417h] ; в AL - байт состояния
test AL, 100000b ; анализ бита № 5
jz net ; если бит = 0 (NumLock выключен), переход на метку net
; иначе (NumLock включен) - переход на следующую команду
………… действия, если NumLock включен
net:…………. действия, если NumLock выключен
Основное назначение прерывания BIOS INT 16h - работа с буфером и байтами состояния клавиатуры. Буфер клавиатуры - это кольцевой буфер, используемый для хранения кодов пятнадцати введенных символов. Ряд функций INT 16h представлен в таблице 1.7.
Таблица 1.7 - Функции BIOS - прерывание INT 16h
Вход |
Назначение |
Выход |
Примечание |
|
AH = 0h1) |
1. Ждать нажатия клавиши (если буфер клавиатуры пуст) 2. Прочитать код введенного символа и удалить его из буфера клавиатуры |
AL - ASCII-код введен- ного символа AH - скан-код или AL = 0 AH - скан-код |
Введенный символ не отображается |
|
ПРИМЕР При нажатии клавиши СТРЕЛКА-ВЛЕВО (расширенный код 0:4Bh) перейти на метку strela, иначе - на метку nestrela. mov ah, 0 int 16h : вызов функции 0 прерывания 16h cmp al, 0 ; al=0? (это расширенный код?) jne nestrela ; если AL 0 на nestrela ; если AL = 0 (код расширенный) - переход на следующую команду cmp ah, 4Bh ; второй байт кода = 4Bh? (это СТРЕЛКА-ВЛЕВО?) jne nestrela ; если AH 4Bh на nestrela, ; иначе на следующую команду strela: ……….…. nestrela: …………. |
||||
AH = 1h2) |
Проверка наличия символа в буфере клавиатуры (символ не удаляется из буфера) |
Если символ есть: ZF = 0 AL и AH - как у функции 0h Если символа нет: ZF = 1 |
||
AH = 2h3) |
Получить состояние переключающих клавиш |
AL - байт состояния переключающих клавиш (совпадает с байтом 0000h:0417h) |
||
ПРИМЕР Протестировать состояние индикатора NumLockmov ah,2int 16h ; в AL - байт состоянияtest al, 100000b ; анализ бита № 5jz net ; если бит =0 (NumLock выключен), переход на метку net; иначе (NumLock включен) - переход на следующую команду ………… действия, если NumLock включен net:………. действия, если NumLock выключен |
Примечания - Обрабатывает только комбинации, использующие клавиши 84_клавишной клавиатуры. Для 101/105-клавишных и 122-клавишных клавиатур применяются соответственно функции:
1) 10h, 20h
2) 11h, 21h
3) 12h, 22h
Подробнее о специальных функциях, обслуживающих расширенные клавиатуры, - в [8].
Клавиатурные функции MS DOS работают со стандартными устройствами ввода-вывода (таблица 1.8).
Таблица 1.8 - Некоторые функции прерывания INT 21h
Вход |
Назначение |
Выход |
Примечание |
|
Функции ввода |
||||
АН = 1h |
1. Ждать нажатия клавиши. 2. Прочитать код введенного символа |
AL - ASCII-код символа Если AL=0 (признак символа с расширенным кодом), вызвать вторично для получения скан-кода |
Функции отличаются по признаку «Эхо» и реакции на нажатие Ctrl_Break: Функция ЭХО Ctrl-Break 1h + + 7h - - 8h - + |
|
АН = 7h |
||||
АН = 8h |
||||
ПРИМЕР При нажатии клавиши СТРЕЛКА-ВЛЕВО (расширенный код 0:4Bh) перейти на метку strela, иначе на метку nestrela. mov ah, 1 int 21h : вызов функции 1 прерывания 21h cmp al, 0 ; al=0? (это расширенный код?) jne nestrela ; если AL 0 на nestrela ; если AL = 0 (код расширенный) - переход на следующую команду Int 21h ; вторичный вызов, в AL второй байт cmp al, 4Bh ; второй байт кода = 4Bh? (это СТРЕЛКА-ВЛЕВО?) jne nestrela ; если AH 4Bh на nestrela, ; иначе (это СТРЕЛКА-ВЛЕВО!!!) на следующую команду strela: ………. ……….. nestrela: ………….. |
||||
АН =Аh DX - начальный адрес буфера памяти, куда будет записана строка |
Чтение строки в память |
Структура буфера памяти: 1-й байт - максимальная длина строки, включая ENTER, - указывает программист 2-й байт - фактическая длина (без ENTER) - заполняет система после ввода строки с 3-го байта - сама строка |
||
АН =Bh |
Чтение состояния клавиатуры |
AL = FFh - буфер пуст AL = 0 - буфер не пуст |
||
Функции вывода |
||||
АН =2h DL - код символа |
Вывод символа |
AL - код последнего записанного символа (исключение: если DL=9 - табуляция, то AL=20h) [6] |
Функции отличаются по реакции на нажатие Ctrl_Break: Функция Ctrl-Break 2h + 6h - |
|
АН =6h DL - код символа |
||||
АН =9h DX - начальный адрес строки (в конце строки - $) |
Вывод строки |
AL-код последнего символа - $ (AL=24h) [6] |
Примечание - Многие функции модифицируют содержимое регистра AL, что необходимо учитывать при использовании в программе прерывания INT 21h
1.3 Пример
Формулировка задачи.
Разработать программу, которая предлагает пользователю нажать клавишу либо сочетание клавиш, после чего анализирует сложившуюся ситуацию и выполняет следующие действия:
- если введен символ w, включается индикатор CapsLock, индикаторы NumLock и ScrollLock отключаются, после чего программа завершается;
- при вводе сочетания CTRL+F1 пользователю предлагается дополнительно ввести любой символ отдельно либо в сочетании с левой клавишей SHIFT, после чего выводится сообщение «Левая клавиша SHIFT была (не была) нажата» и программа завершает работу;
- если введен любой не указанный выше символ, программа выводит слово «КОНЕЦ» и завершает работу.
Постановка задачи
Программа должна состоять из блоков, выполняющих функции:
- вывод приглашения к нажатию любой клавиши;
- ввод символа с помощью прерывания INT 21h и его идентификация;
- выполнение действий в зависимости от того, какой символ введен:
1) если w - работа с индикаторами клавиатуры (блок 1);
2) если Ctrl+F1 - предлагается ввести любой символ отдельно либо в сочетании с левой клавишей SHIFT; после анализа ситуации выводится сообщение «Левая клавиша SHIFT была (не была) нажата» (блок 2);
3) если любой другой символ, выводится сообщение «Конец»;
- задержка до нажатия любой клавиши (используется прерывание INT 16h) перед выходом из программы для того, чтобы пользователь имел возможность прочитать сообщение, и завершение работы программы.
Конкретизация работы блоков
Блок 1 - реализация алгоритма программирования контроллера клавиатуры.
Блок 2:
- вывод приглашения к нажатию клавиши Shift отдельно либо в сочетании с любой другой;
- получение байта состояния клавиатуры с адресом 0000h:0417h (обращением к памяти);
- тестирование бита № 1, который отслеживает текущее состояние левой клавиши SHIFT, и вывод соответствующего сообщения.
Листинг программы
model small
.stack 100h
.data
Press db 10, 13, 'Нажмите любую клавишу $'
PressShift db 10, 13, 'Нажмите клавишу отдельно либо с левым Shift$'
ShiftDa db 10, 13, 'Левый Shift был нажат$'
ShiftNet db 10, 13, 'Левый Shift не был нажат$'
konec db 10, 13, 'Конец','$'
error db 10, 13, 'Ошибка контроллера$'
.code
start:
mov ax, @data
mov ds, ax
; вывод приглашения
lea dx, Press
mov ah, 9h
int 21h
; ожидание нажатия клавиши, считывание кода (без “Эхо”)
mov ah, 8h
int 21h ; в AL код введенного символа (первый байт)
; Идентификация введенного кода:
cmp al, 0 ; AL = 0? (код расширенный?)
jne ascii ; если нет на метку ascii
; если да (код расширенный) на следующую команду
int 21h ; вторичный вызов для получения в AL второго байта кода
cmp al, 5Eh ;сравнение второго байта кода со скан-кодом Ctrl+F1
jne kon ; если не равно (расширенный, но не Ctrl+F1),
; переход на метку kon
; равно, т.е. введен Ctrl+F1 !!!
******************** БЛОК 2 *******************************
вывод приглашения
lea dx, PressShift
mov ah, 9h
int 21h
; ожидание нажатия клавиши, считывание кода
mov ah, 0
int 16h
считывание байта состояния в AL (см. п. 1.3.5)
xor ax, ax
mov es, ax
mov al, es:[417h]
тестирование бита №1 (выяснение состояния левого Shift)
test al, 10b
jz net Shift не нажат на метку net
; Shift нажат
lea dx, ShiftDa в dx начальный адрес сообщения ShiftDa
jmp vivod переход на vivod
net:
lea dx, ShiftNet в dx начальный адрес сообщения ShiftNet
vivod: вывод нужного сообщения
mov ah, 9h
int 21h
БЛОК 2 завершен выход
jmp exit
;******** *************************************************
в al код 'w' ?
ascii: cmp al, 'w'
jne kon нет (это и не 'w', и не Ctrl+F1) на метку kon
; в al код 'w' !!!
************************ БЛОК 1 ************************
работа с контроллером клавиатуры (см. подробно в п. 1.3.3)
cli
xor cx, cx
wait1:
in al, 64h
test al, 10b
loopnz wait1
jnz er
mov al, 0EDh
out 60h, al
xor cx, cx
wait2:
in al, 64h
test al, 10b
loopnz wait2
jnz er
отправка второго байта (см. формат байта в п.1.2.4)
mov al, 100b
out 60h, al
sti
БЛОК 1 завершен выход
jmp exit
;******** ***************************************************
kon:
lea dx, konec вывод сообщения «Конец»
mov ah, 9h
int 21h
jmp exit
er: вывод сообщения « Ошибка контроллера »
lea dx, error
mov ah, 9h
int 21h
exit:
mov ah, 0 задержка до нажатия любой клавиши
int 16h
mov ax, 4C00h завершение программы
int 21h
end start
1.4 Задания для самостоятельной работы
Составить программу, выполняющую перечисленные действия. Если нажата не указанная в задании клавиша, завершить программу после вывода сообщения «Программа завершена».
а) При нажатии клавиши HOME включить индикатор NumLock и отключить индикаторы ScrollLock и CapsLock. Если введен символ 0, 2 или 4, вывести на дисплей его значение, увеличенное в два раза.
б) Если введен символ d, подсчитать количество включенных индикаторов клавиатуры. При нажатии клавиши PgUp отключить все индикаторы клавиатуры.
в) Если введен символ 1, включить и после некоторой задержки отключить все индикаторы клавиатуры.
г) Если нажата СТРЕЛКА ВВЕРХ, вывести сообщение «НАЖМИТЕ КЛАВИШУ ВКЛЮЧЕНИЯ ЛЮБОГО ИНДИКАТОРА КЛАВИАТУРЫ» (предварительно они вручную должны быть отключены). В ответ на нажатие клавиши проанализировать ситуацию и вывести сообщение «ВКЛЮЧЕН индикатор ScrollLock (или NumLock, или CapsLock)».
д) Если нажата любая функциональная клавиша, выключить ScrollLock, не изменяя состояние остальных индикаторов.
е) Если нажата клавиша СТРЕЛКА-ВНИЗ, вывести на монитор сообщение: «ВЫБЕРИТЕ НОМЕР ИНДИКАТОРА КЛАВИАТУРЫ, КОТОРЫЙ ХОТИТЕ ОТКЛЮЧИТЬ (остальные будут включены): 1 - NumLock . ». После ввода пользователем номера отключить выбранный индикатор.
Размещено на Allbest.ru
Подобные документы
Основные виды периферийных устройств в персональных компьютерах. Классификация периферийных устройств. Устройства ввода, вывода и хранения информации. Передача информации с помощью периферийных устройств. Организация сетей на основе программных средств.
контрольная работа [1,7 M], добавлен 11.11.2014Классификация и основные определения периферийных устройств. Устройства ввода и вывода информации, памяти, мультимедиа, связи, защиты электропитания. Интерфейсы подключения периферийных устройств. Рекомендации и правила эксплуатации компьютерной техники.
курсовая работа [582,1 K], добавлен 06.09.2014Составные части компьютера. Подключение периферийных устройств ввода и вывода информации в ПК: клавиатуры, мыши, сканера, веб-камеры, модемов, монитора, принтера, мультимедийного проектора, аудиосистемы. Порядок их настройки и установление драйверов.
контрольная работа [385,2 K], добавлен 09.12.2013Подключение периферийных устройств. Виды передачи информации. Параллельные и последовательные интерфейсы. Представление о времени и синхронизации (асинхронные, синхронные и изохронные сигналы передачи данных). Особенности беспроводных интерфейсов.
курс лекций [1,9 M], добавлен 27.04.2015Участие регистров ввода-вывода в работе периферийных устройств. Отражение состояния периферийных устройств в состоянии разрядов регистров состояния. Перечень имен и номеров регистров ввода-вывода, управления и состояния микроконтроллеров разных типов.
курсовая работа [171,2 K], добавлен 22.08.2010Принцип действия, назначение периферийных устройств персонального компьютера. Основные функции форматирования текста в редакторе Microsoft Word. Создание, ведение и обработка данных в Microsoft Access. Понятие о мастерах и шаблонах MS PowerPoint.
контрольная работа [1,3 M], добавлен 14.01.2013Назначение и группы периферийных устройств. Назначение внешних накопителей, флэш-карты, модема. Периферийные устройства вывода (мониторы, принтеры, аудиосистема) и ввода информации (клавиатура, сканер, графический планшет). Манипуляторы и Web-камеры.
реферат [898,6 K], добавлен 09.12.2010Изучение видов и функций периферийных устройств, с помощью которых компьютер обменивается информацией с внешним миром. Классификация устройств ввода-вывода информации. Приборы местоуказания (манипуляторы), сканеры, мониторы, принтеры, микрофоны, наушники.
контрольная работа [359,1 K], добавлен 10.03.2011Компоновка частей компьютера и связь между ними. Понятие архитектуры персонального компьютера, принципы фон Неймана. Назначение, функции базовых программных средств, исполняемая программа. Виды, назначение, функции, специфика периферийных устройств.
контрольная работа [433,2 K], добавлен 23.09.2009Описание нестандартных компьютерных периферийных устройств: компактного принтера, мыши для 3D-дизайнеров, графического планшета, проекционной инфракрасной клавиатуры, 3D-принтера. Их внешний вид, возможности, способы использования и характеристики.
реферат [1,0 M], добавлен 20.10.2014