Автор работы: Пользователь скрыл имя, 20 Декабря 2011 в 14:11, курсовая работа
Жүйелік платада орналасқан А микросхемасының интерфейсына пернетақтаның әрбір пернесін басқанда скан-код шығарылады. Скан-код дегеніміз бір байтты сан, кіші 7 биті әрбір пернеге меншіктелген идентификациялық номер, АТ дан басқа барлық машиналарда үлкен биттің коды перненің басылғанын (бит=1,басу коды) немесе жіберілгенін көрсетеді (бит=0,жіерілді).
Кіріспе...................................................................................
1 Негізгі бөлім..........................................................................
1.1 Пернетақтаны басқару...............................................................
1.2 Пернетақта буферін тазалау.........................................................
1.3 Буфердегі символдарды тексеру...................................................
1.4 Символ енгізілуін күту және оны экранға бейнелеу.................
1.5 Экранда перне басылуы мен жаңғырықты күту.........................
1.6 Символдарды күтусіз қабылдау....................................................
1.7 Символдар жолы ашу.................................................................
1.8 Пернетақтадан процедураның жазылуын енгізу.........................
1.9 Пернетақта үзілісін қайта бағдарламалау.................................
1.10 Скан-кодтың қосалқы кестесі...................................................
1.11 ASCII кодынын қосымша кестесі.............................................
Қорытынды ...........................................................................
; _ _ _ _ _бағдарлама басында үзіліс орнатамыз
CLI | ;үзіліске шек қою | |
PUSH | DS | ;регистрды сақтау |
MOV | AX,SEG NEW_KEYBOARD | ; DS: DX сілтеме жасау керек |
MOV | DS,AX | ;өңдеу процедурасына |
MOV | DX,OFFESET NEW_KEYBOARD | ;үзіліске |
MOV | AL,9 | ;үзіліс векторы номері |
MOV | AH,25H | ;DOS функциясының номері |
INT | 21H | ;үзіліс векторын ауыстырамыз |
POP | DS | ;регистрды қалпына келтіру |
STI | ;үзілісті іске қосу |
; _ _
_ _ _пернетақта үзілісі
NEW_KEYBOARD | PROG | FAR | ;барлық өзгерісті сақтау |
PUSH | AX | ;регистрлер | |
PUSH | BX | ; | |
PUSH | CX | ; | |
PUSH | DI | ; | |
PUSH | ES | ; |
; _ _
_ _ _скан-кодты алып растау сигналын
жібереміз
IN | AL,60H | ;А портынан скан-код аламыз |
MOV | AH,AL | ;көшірмесін АН-қа орналастырамыз |
PUSH | AX | ;скан-кодты сақтаймыз |
IN | AL,61H | ;В портының жағдайын оқимыз |
OR | AL,10000000B | ;7 битін орнатамын |
OUT | 61H,AL | ;өзгерген байтты портқа жібереміз |
AND | AL,01111111B | ; 7 битін шығарамыз |
OUT | 61H,AL | ; В портының жағдайын қайтарамыз |
; _ _
_ _ _ES BIOS мәліметтер облысына нұсқайды
MOV | AX,40H | ; сегментті орнатамыз |
MOV | ES,AX | ; |
POP | AX | ;скан-кодты стектен қайтарамыз |
; _ _
_ _ _жылжу пернесін тексеру
CMP | AL,42 | ;сол жақ жылжу басылған ба? | |
JNE | KEY_UP | ;жоқ-келесіні қараймыз | |
MOV | BL,1 | ;иә-бит статусын өзгертеміз | |
OR | ES:[17H],BL | ;регистр статусын өзгертеміз | |
JMP | OUIT | ;процедурадан шығу | |
KEY_UP | CMP | AL,170 | ;сол жақ жылжу жіберілді ме? |
JNE | NEXTKEY | ;жоқ- келесіні қараймыз | |
MOV | BL,11111110B | ;иә-бит статусын өзгертеміз | |
AND | ES:[17H],BL | ; регистр статусын өзгертеміз | |
JMP | OUIT | ; процедурадан шығу | |
NEXTKEY | ;басқа қайтақосқыштарды қарау |
; _ _
_ _ _бұл символды перне-скан-кодты
интерпретациялайды
TEST | AL,1000000B | ; пернені жіберу коды ма? | |
JNZ | QUIT | ;иә-процедурадан шығу | |
MOV | BL,ES:[17H] | ;әйтпесе байт статусын аламыз | |
TEST | BL,0000011B | ; жылжу перенсі басылған ба? | |
JZ | CONVERT_CODE | ;жоқ-ары қарай жүреміз | |
ADD | AL,100 | ;иә-онда бас әріп | |
CONVERT_CODE | MOV | BX,OFFEST TABLE | ; кестені дайындаймыз |
XLAT | TABLE | ;скан-кодты ASCII-ға өзгертеміз | |
CMP | AL,0 | ; 0 қайтарылды ма? | |
JE | QUIT | ;иә-шығу |
; _ _
_ _ _перне коды дайын, пернетақта
буферінің жадысын тексереміз
MOV | BX,1AH | ;нұсқағыш сілтемесі (басына) | |
MOV | CX,ES:[BX] | ; онын мәнін аламыз | |
MOV | DI, ES:[BX]+2 | ;нұсқағыштың соңын аламыз | |
CMP | CX,60 | ; нұсқағыш буфердің басында ма? | |
JE | HIGH_END | ;иә-арнайы жағдайғакөшеміз | |
INC | CX | ;нұсқағыш басын үлкейтеміз | |
INC | CX | ; 2-ге | |
CMP | CX,DI | ;нұсқағыш соңымен салыстырамыз | |
JE | QUIT | ;егер тең болса,буфер толы | |
JMP | GO_AHEAD | ;әйтпесе символ қоямыз | |
HIGH_END | CMP | DI,30 | ;арнайы жағдайды тексеру |
JE | OUIT | ;егер буфер толы болса,шығу |
; _ _
_ _ _буфертолы болмаса,оған символ
қоямыз
GO_AHEAD | MOV | ES:[DL],AL | ;символды соңғы позицияға орналастырамыз |
CMP | DI,60 | ; нұсқағыш буфер соңында ма? | |
JNE | NO_WRAP | ;жоқ-2-ні қосамыз | |
MOV | DI,28 | ;әйтпесе нұсқағыш соңы 28+2 | |
NO_WRAP | ADD | DI,2 | ;соңының жаңа мәнін аламыз |
MOV | ES:[BX]+2,DI | ;мәліметтер облысына жібереміз |
; _ _
_ _ _үзілістің соңы
QUIT | POP | ES | ;өгерісті қалпына келтіру |
POP | DI | ;регистрлер | |
POP | CX | ; | |
POP | BX | ; | |
POP | AX | ; | |
MOV | AL,20H | ; соңы туралы сигнал | |
OUT | 20H,AL | ; аппараттық үзілісте | |
IRET | ; үзілістен қайту | ||
NEW_KEYBOARD | END P |
1.10. Скан-кодтың
қосалқы кестесі
Перне | Басу коды | Перне | Басу коды | Перне | Басу коды |
«1» | 2 | «T» | 20 | «L» | 38 |
«2» | 3 | «Y» | 21 | «;» | 39 |
«3» | 4 | «U» | 22 | «’» | 40 |
«4» | 5 | «I» | 23 | «”» | 41 |
«5» | 6 | «O» | 24 | «\» | 43 |
«6» | 7 | «P» | 25 | «Z» | 44 |
«7» | 8 | «[» | 26 | «X» | 45 |
«8» | 9 | «]» | 27 | «C» | 46 |
«9» | 10 | «A» | 30 | «V» | 47 |
«0» | 11 | «S» | 31 | «B» | 48 |
«-» | 12 | «D» | 32 | «N» | 49 |
«=» | 13 | «F» | 33 | «M» | 50 |
«Q» | 16 | «G» | 34 | «,» | 51 |
«W» | 17 | «H» | 35 | «.» | 52 |
«E» | 18 | «J» | 36 | «/» | 53 |
«R» | 19 | «K» | 37 | пробел | 57 |
Басқару
пернелері
Esc-1 | Ctrl-29 | Alt-56 |
BackSpace-14 | Left shift-42 | CapsLock-58 |
Tab-15 | Right shift-42 | NumLock-58 |
Enter-28 | PtrSc-55 | ScrollLock-70 |
Функционалды
пернелер
F1-59 | F5-63 | F9-67 |
F2-60 | F6-64 | F10-68 |
F3-61 | F7-65 | |
F4-62 | F8-66 |
Қосымша
пернетақта пернелері
«7»-71 | «5»-76 | «3»-81 |
«8»-72 | «6»-77 | «0»-82 |
«9»-73 | «+»-78 | «.»-83 |
«-»-74 | «1»-79 | Sys Req-132(АТ да ғана) |
«4»-75 | «2»-80 | мнимая-55(PCjr) |
1.11. ASCII
кодынын қосымша кестесі
ASCII-дің
1 ден 255-ке дейінгі коды пернетақтадан
енгізіледі, Alt пернесін басып тұрып енгізсе,пернені
босатқанда кодтар енеді.
Символ | 10-дық | 16-лық | 2-лік | Символ | 10-дық | 16-лық | 2-лік | |||||
(Null) | 0 | 00 | 00000000 | 0 | 48 | 30 | 00110000 | |||||
1 | 01 | 00000001 | 1 | 49 | 31 | 00110001 | ||||||
2 | 02 | 00000010 | 2 | 50 | 32 | 00110010 | ||||||
3 | 03 | 00000011 | 3 | 51 | 33 | 00110011 | ||||||
4 | 04 | 00000100 | 4 | 52 | 34 | 00110100 | ||||||
5 | 05 | 00000101 | 5 | 53 | 35 | 00110101 | ||||||
6 | 06 | 00000110 | 6 | 54 | 36 | 00110110 | ||||||
7 | 07 | 00000111 | 7 | 55 | 37 | 00110111 | ||||||
8 | 08 | 00001000 | 8 | 56 | 38 | 00111000 | ||||||
9 | 09 | 00001001 | 9 | 57 | 39 | 00111001 | ||||||
10 | 0A | 00001010 | : | 58 | 3A | 00111010 | ||||||
11 | 0B | 00001011 | ; | 59 | 3B | 00111011 | ||||||
12 | 0C | 00001100 | < | 60 | 3C | 00111100 | ||||||
13 | 0D | 00001101 | = | 61 | 3D | 00111101 | ||||||
14 | 0E | 00001110 | > | 62 | 3E | 00111110 | ||||||
15 | 0F | 00001111 | ? | 63 | 3F | 00111111 | ||||||
16 | 10 | 00010000 | @ | 64 | 40 | 01000000 | ||||||
17 | 11 | 00010001 | A | 65 | 41 | 01000001 | ||||||
18 | 12 | 00010010 | B | 66 | 42 | 01000010 | ||||||
19 | 13 | 00010011 | C | 67 | 43 | 01000011 | ||||||
20 | 14 | 00010100 | D | 68 | 44 | 01000100 | ||||||
21 | 15 | 00010101 | E | 69 | 45 | 01000101 | ||||||
22 | 16 | 00010110 | F | 70 | 46 | 01000110 | ||||||
23 | 17 | 00010111 | G | 71 | 47 | 01000111 | ||||||
24 | 18 | 00011000 | H | 72 | 48 | 01001000 | ||||||
25 | 19 | 00011001 | I | 73 | 49 | 01001001 | ||||||
26 | 1A | 00011010 | J | 74 | 4A | 01001010 | ||||||
27 | 1B | 00011011 | K | 75 | 4B | 01001011 | ||||||
28 | 1C | 00011100 | L | 76 | 4C | 01001100 | ||||||
29 | 1D | 00011001 | M | 77 | 4D | 01001101 | ||||||
30 | 1E | 00011110 | N | 78 | 4E | 010011110 | ||||||
31 | 1F | 00011111 | O | 79 | 4F | 01001111 | ||||||
Пробел | 32 | 20 | 00100000 | P | 80 | 50 | 01010000 | |||||
! | 33 | 21 | 00100001 | Q | 81 | 51 | 01010001 | |||||
“ | 34 | 22 | 00100010 | R | 82 | 52 | 01010010 | |||||
# | 35 | 23 | 00100011 | S | 83 | 53 | 01010011 | |||||
$ | 36 | 24 | 00100100 | T | 84 | 54 | 01010100 | |||||
% | 37 | 25 | 00100101 | U | 85 | 55 | 01010101 | |||||
& | 38 | 26 | 00100110 | V | 86 | 56 | 01010110 | |||||
‘ | 39 | 27 | 00100111 | W | 87 | 57 | 0100111 | |||||
( | 40 | 28 | 00101000 | X | 88 | 58 | 01011000 | |||||
) | 41 | 29 | 00101001 | Y | 89 | 59 | 01011001 | |||||
* | 42 | 2A | 00101010 | Z | 90 | 5A | 01011010 | |||||
+ | 43 | 2B | 00101011 | [ | 91 | 5B | 01011011 | |||||
‘ | 44 | 2C | 0010100 | \ | 92 | 5C | 01011100 | |||||
- | 45 | 2D | 00101101 | ] | 93 | 5D | 01011101 | |||||
. | 46 | 2E | 00101110 | ^ | 94 | 5E | 0101110 | |||||
/ | 47 | 2F | 00101111 | _ | 95 | 5F | 01011111 | |||||
Символ | 10-дық | 16-лық | 2-лік | Символ | 10-дық | 16-лық | 2-лік | |||||
. | 96 | 60 | 01100000 | Щ | 153 | 99 | 10011001 | |||||
a | 97 | 61 | 01100001 | Ъ | 154 | 9A | 10011010 | |||||
b | 98 | 62 | 01100010 | Ы | 155 | 9B | 10011011 | |||||
c | 99 | 63 | 01100011 | Ь | 156 | 9C | 10011100 | |||||
d | 100 | 64 | 01100100 | Э | 157 | 9D | 10011101 | |||||
e | 101 | 65 | 01100101 | Ю | 158 | 9E | 10011110 | |||||
f | 102 | 66 | 01100110 | Я | 159 | 9F | 10011111 | |||||
g | 103 | 67 | 01100111 | а | 160 | A0 | 10111111 | |||||
h | 104 | 68 | 01101000 | б | 161 | A1 | 10100001 | |||||
i | 105 | 69 | 01101001 | в | 162 | A2 | 10100010 | |||||
j | 106 | 6A | 01101010 | г | 163 | A3 | 10100011 | |||||
k | 107 | 6B | 01101011 | д | 164 | A4 | 10100100 | |||||
l | 108 | 6C | 01101100 | ж | 165 | A5 | 10100101 | |||||
m | 109 | 6D | 01101101 | з | 166 | A6 | 10100110 | |||||
n | 110 | 6E | 01101110 | и | 167 | A7 | 10100111 | |||||
o | 111 | 6F | 01101111 | й | 168 | A8 | 10101000 | |||||
p | 112 | 70 | 01110000 | к | 169 | A9 | 10101001 | |||||
q | 113 | 71 | 01110010 | л | 170 | AA | 01001010 | |||||
r | 114 | 72 | 01110010 | м | 171 | AB | 10101011 | |||||
s | 115 | 73 | 01110011 | н | 172 | AC | 10101100 | |||||
t | 116 | 74 | 01110100 | о | 173 | AD | 10101101 | |||||
u | 117 | 75 | 01110101 | п | 174 | AE | 10101110 | |||||
v | 118 | 76 | 01110110 | - | 175 | AF | 10101111 | |||||
w | 119 | 77 | 01110111 | - | 176 | B0 | 10110000 | |||||
x | 120 | 78 | 01111000 | - | 177 | B1 | 10110001 | |||||
y | 121 | 79 | 01111001 | ¦ | 178 | B2 | 10110010 | |||||
z | 122 | 7A | 01111010 | + | 179 | B3 | 10110011 | |||||
{ | 123 | 7B | 01111011 | ¦ | 180 | B4 | 10110100 | |||||
| | 124 | 7C | 0111100 | ¦ | 181 | B5 | 10110101 | |||||
} | 125 | 7D | 01111101 | ¬ | 182 | B6 | 10110110 | |||||
~ | 126 | 7E | 0111110 | ¬ | 183 | B7 | 10110111 | |||||
127 | 7F | 0111111 | ¦ | 184 | B8 | 10111000 | ||||||
А | 128 | 80 | 10000000 | ¦ | 185 | B9 | 10111001 | |||||
Б | 129 | 81 | 10000001 | ¬ | 186 | BA | 10111010 | |||||
В | 130 | 82 | 10000010 | - | 187 | BB | 10111011 | |||||
Г | 131 | 83 | 1000011 | - | 188 | BC | 10111100 | |||||
Д | 132 | 84 | 10000100 | - | 189 | BD | 10111101 | |||||
Е | 133 | 85 | 10000101 | ¬ | 190 | BE | 10111110 | |||||
Ж | 134 | 86 | 10000110 | L | 191 | BF | 10111111 | |||||
З | 135 | 87 | 10000111 | + | 192 | C0 | 11000000 | |||||
И | 136 | 88 | 10001000 | T | 193 | C1 | 11000001 | |||||
Й | 137 | 89 | 10001001 | + | 194 | C2 | 11000010 | |||||
К | 138 | 8A | 10001010 | - | 195 | C3 | 11000011 | |||||
Л | 139 | 8B | 10001011 | + | 196 | C4 | 11001000 | |||||
М | 140 | 8C | 10001100 | ¦ | 197 | C5 | 11000101 | |||||
Н | 141 | 8D | 10001101 | ¦ | 198 | C6 | 11000110 | |||||
О | 142 | 8E | 10001110 | L | 199 | C7 | 11000111 | |||||
П | 143 | 8F | 10001111 | г | 200 | C8 | 11001000 | |||||
Р | 144 | 90 | 10010000 | ¦ | 201 | C9 | 11001001 | |||||
С | 145 | 91 | 10010001 | Т | 202 | CA | 11001010 | |||||
Т | 146 | 92 | 10010010 | ¦ | 203 | CB | 11001011 | |||||
У | 147 | 93 | 10010011 | = | 204 | CC | 11001100 | |||||
Ф | 148 | 94 | 10010100 | + | 205 | CD | 11001101 | |||||
Х | 149 | 95 | 10010101 | ¦ | 206 | CE | 11001110 | |||||
Ц | 150 | 96 | 10010110 | ¦ | 207 | CF | 11001111 | |||||
Ч | 151 | 97 | 10010111 | ¦ | 208 | D0 | 11010000 | |||||
Ш | 152 | 98 | 10011000 | Т | 209 | D1 | 11010001 | |||||
Символ | 10-дық | 16-лық | 2-лік | Символ | 10-дық | 16-лық | 2-лік | |||||
T | 210 | D2 | 11010010 | щ | 233 | E9 | 11101001 | |||||
L | 211 | D3 | 11010011 | ъ | 234 | EA | 11101010 | |||||
L | 212 | D4 | 11010100 | ы | 235 | EB | 11101011 | |||||
- | 213 | D5 | 11010101 | ь | 236 | EC | 11101100 | |||||
г | 214 | D6 | 11010110 | э | 237 | ED | 11101101 | |||||
+ | 215 | D7 | 11010111 | ю | 238 | EE | 11101110 | |||||
+ | 216 | D8 | 11011000 | я | 239 | EF | 11101111 | |||||
- | 217 | D9 | 11011001 | Е | 240 | F0 | 11110000 | |||||
- | 218 | DA | 11011010 | е | 241 | F1 | 11110001 | |||||
- | 219 | DB | 11011011 | € | 242 | F2 | 11110010 | |||||
- | 220 | DC | 11011100 | ε | 243 | F3 | 11110011 | |||||
¦ | 221 | DD | 11011101 | Ї | 244 | F4 | 11110100 | |||||
¦ | 222 | DE | 11011110 | ї | 245 | F5 | 11110101 | |||||
- | 223 | DF | 11011111 | Ỳ | 246 | F6 | 11110110 | |||||
р | 224 | E0 | 11100000 | ỳ | 247 | F7 | 11110111 | |||||
с | 225 | E1 | 11100001 | º | 248 | F8 | 11111000 | |||||
т | 226 | E2 | 11100010 | · | 249 | F9 | 11111001 | |||||
у | 227 | E3 | 11100011 | • | 250 | FA | 11111010 | |||||
ф | 228 | E4 | 11100100 | v | 251 | FB | 11111011 | |||||
х | 229 | E5 | 11100101 | № | 252 | FC | 11111100 | |||||
ц | 230 | E6 | 11100110 | ¤ | 253 | FD | 11111101 | |||||
ч | 231 | E7 | 11100111 | ¦ | 254 | FE | 11111110 | |||||
ш | 232 | E8 | 11101000 | 255 | FF | 11111111 |