Периферийные устройства и интерфейсы периферийных устройств

Связь компьютера с внешним миром. Эффективность использования вычислительной системы. Ввод и вывод информации. Основные приемы программирования на Ассемблере периферийных устройств компьютера. Скан-коды для клавиш. Регистры контроллера клавиатуры.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 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)

ПРИМЕР Протестировать состояние индикатора NumLock

mov ah,2

int 16h ; в AL - байт состояния

test al, 100000b ; анализ бита № 5

jz 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.