Автор работы: Пользователь скрыл имя, 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 кодынын қосымша кестесі.............................................
Қорытынды ...........................................................................
Кіріспе....................... |
||
1 | Негізгі бөлім......................... |
|
1.1 | Пернетақтаны
басқару....................... |
|
1.2 | Пернетақта
буферін тазалау............... |
|
1.3 | Буфердегі символдарды
тексеру....................... |
|
1.4 | Символ енгізілуін
күту және оны экранға бейнелеу.......... |
|
1.5 | Экранда перне басылуы мен жаңғырықты күту......................... | |
1.6 | Символдарды күтусіз
қабылдау...................... |
|
1.7 | Символдар жолы
ашу........................... |
|
1.8 | Пернетақтадан
процедураның жазылуын енгізу........................ |
|
1.9 | Пернетақта
үзілісін қайта бағдарламалау........... |
|
1.10 | Скан-кодтың қосалқы
кестесі....................... |
|
1.11 | ASCII кодынын қосымша
кестесі....................... |
|
Қорытынды .............................. |
Жоспары
1.1.
Пернетақтаны басқару
Жүйелік платада орналасқан А микросхемасының интерфейсына пернетақтаның әрбір пернесін басқанда скан-код шығарылады. Скан-код дегеніміз бір байтты сан, кіші 7 биті әрбір пернеге меншіктелген идентификациялық номер, АТ дан басқа барлық машиналарда үлкен биттің коды перненің басылғанын (бит=1,басу коды) немесе жіберілгенін көрсетеді (бит=0,жіерілді). Мысалы, 7 битті скан код пернелері В-48, немесе 110000 екілік жүйеде. Сол перне басылғанда, онда А портына 10110000 коды жіберіледі, ал босатқанда -00110000 коды. Осылайша әрбір пернені басу 8255 микросхемасында 2 рет тіркеледі. Және әрбір жолы 8255 микросхемасы пернетақтаға растау әмірін жіберіп отырады. Ал АТ біраз басқаша жұмыс істейді, ол екі жағдайда да бірдей скан-код жіберіп, бірақ FOH кодымен пернелер босатылғанда алмастырып отырады.
Скан-код А портына берілген кезде пернетақтада үзіліс болады (int 9). Процессор бірден өз жұмысын тоқтатады да, скан-кодты анализдайтын процедураны орындайды. Жылжу пернесі немесе қайта қосқыштан код келгенде статус өзгерісі жадыға жазылады. Басқа жағдайларда перне басылған кезде скан-код символ кодына трансформацияланады (әйтпесе скан-кодты шығарып тастайды).
Әрине
енгізілген кодты дұрыс алу
үшін жылжу пернелері мен
Кодты символдың екі түрі болады, ASCII және «кеңейтілген». ASCII кодтары- байтты сандар, олар IBM PC-ке негізделген ASCII кеңейтілген кодтар теріміне сәйкес келеді. IBM PC-та бұл теру- теру машинкасының қарапайым символдарын, сонымен қатар арнайы әріптер және псевдографика символдарын да қолданады. Сонымен қатар ASCII коды құрамында 32 басқару коды бар, экранға басқа символдар сияқты шықпай, олар приферинді құрылғыларға командаларды жіберу үшін қолданылады. Бірақ, олардың әрқайсында дисплей жадысының тікелей адресациясы арқылы экранға шығарылатын символдар меншіктелген.
Кодты символдардың екінші түрі «кеңейтілген». Олар белгілі бір пернелерге немесе клавиша комбинацияларына меншіктелген, мысалы:Alt пернесімен комбинацияланатын пернелер және функционалды пернелер. Кеңейтілген кодтар ұзындығы 2 байт, оның бірінші байты әрқашан ASCII 0 болады. Екінші байт-кеңейтілген код номері.
Мысалы:
0:30 коды Alt+A-ға сәйкес келеді. Бастапқы
ноль берілген кодының қай теруге
жататынын анықтауға
Арнайы
командаларды орындап бірақ,
Кодты
еңгізуге сұрату жіберместен
бұрын, бағдарлама пернетақта
буферіндегі керексіз
Буфер циклдық тізбек түрінде құрылған, оны FIFO буфері деп те атайды. Барлық буферлер сияқты ол да жадының үзіліссіз аймағында орналастырылады. Бірақ «жолдың басы» сақталатын арнайы жады ұяшығы болмайды. Оның орнына ағымдағы уақытта буферде сақталған екі нұсқағыш символды жолдың басы және соңы деген позицияда болады. Пернені жаңадан басқанда, алдыңғы басылған перне кодының соңына жаңа код тіркеледі.
Буфердің бос аумағы толған соң , жаңа символдар тізбектің басынан бастап қайта тіркеледі. Сондықтан буфердегі жолдың басында символдық адрестер соңына қарағанда көп болады. Буфер жадысы толған соң , жаңадан енгізілген символдар қабылданбайды,пернетақтада үзіліс болып, динамиктен дыбыс шығады.
Алғашқы енгізілген символға басындағы нұсқағышты орналастырғанда, соңғы енгізілген символға соңғы нұсқағыш орнап, олар тепе-теңдіккүйде болады. Екі нұсқағыш тең болған кезде, буфер бос болады.
15 символды
толық енгізу үшін 2 байтты 16-шы
позиция және <ENTER> пернесіне сәйкес
скан-код 28 керек. Буфердің 32-ші байты 0040:001А
және 0040:001С адрестерінде орналасқан. Әрбі
нұсағшқа 2байт меншіктелгенімен, кіші
байт қана қолданылады. BIOS мәліметтер
облысында сәйкес нұсқағыштар мәндері
30-дан 60-қа дейін өзгереді. Буферді тазалау
үшін 0040:001С ұяшығына 0040:001А ұяшығының мәндерін
теңестіру керек. Егер бағдарламаны аяқтау
алдында бұл командаларды дұрыс орындаса,
MS DOS-та басқаруға оралғанда, символдар
есептеліп, автоматты түрде басқа бағдарлама
жүктелуі мүмкін.
ОРТАША
ДЕҢГЕЙ
ОС функциясы
21Н үзілісі пернеақтадан енгізілген
1,6,7,8 және А (осы бөлімде сипатталған)
барлық функцияларды орындайды, алдымен
пернетақта буферін тазалайды. Ол үшін
енгізу функциясының номерін AL-ге (яғни
1-ге) орналастыру керек.
; _ _ _ _
_ пернені басу алдындағы буферді тазалау
MOV | AH, OCH | ;DOS OCH функциясын таңдаймыз |
MOV | AL,1 | ; символды енгізу функциясын таңдаймыз |
INT | 21H | ; буферді тазалап, енгізуді күту |
ТӨМЕНГІ
ДЕҢГЕЙ
Жоғарғы
деңгейдегі сияқты нұсқағыштардың басы
мен соңын теңестіреміз. Пернетақта
үзіліске ұшырамау үшін модификациялау
кезінде нұсқағыштар үзілісін тоқтатып
қоямыз.
;_ _
_ _ _ нұсқағыштардың басы мен соңының
мәндерін туралу
CLI | ; үзілісті тоқтатамыз | |
SUB | AX, AX | ; регистрді нольге келтіреміз |
MOV | ES, AX | ; қосушы сегмент жады басынан бастап |
MOV | AL, ES:[41AH] | ; буфер басына нұсқағыш аламыз |
MOV | ES:[41CH], AL | ; буфер соңына жібереміз |
STI | ; үзілісті аяқтаймыз |
1.3.
Буфедегі символдарды тексеру
Пернетақта
буферінен сиволдарды өшірмей де,
пернетақтадан енгізу болған/болмағанын
тексеруге болады. Буфер ағымдағы
уақытта жадыда орналасқан символдар
тізбегінің басы мен аяғын көрсететін
2 түрлі нұсқағыш пайдаланады. Олардың
мәндері тең болғанда, буфер бос болады.
Тек 0040:001А және 0040:001С ұяшықтарының мәнін
салыстыру керек.
ОРТАША
ДЕҢГЕЙ
Пернетақта
буфері бос болғанда OFFH мәндерін AL регистырына
ОВН функциясы 21Н үзілісі қайтарады.
; _ _
_ _ _буфердегі символдарды тексеру
MOV | AH, 1 | ;функция номері |
INT | 16H | ; 21Н үзілісін шақырамыз |
CMP | AL, OFFH | ; OFFH-пен салыстырамыз |
JZ | GET_KEYSTROKE | ; буфер бос болмаса ауысу |
; _ _
_ _ _ буфердегі символдарды қайталап
тексеру
MOV | AH,1 | ;функция номері |
INT | 16H | ; символды тексеру |
JZ | NO_CHARACTER | ; ZF=1болса,ауысу |
; _ _
_ _ _ енгізілген символды көру
CMP | AL, 0 | ; бұл кеңейтілген код па? |
JE | EXTENDED_CODE | ; егер иә, онда басқа бұрымға көшу |
ТӨМЕНГІ ДЕҢГЕЙ
Жоғарғы
деңгейдегі сияқты нұсқағыштарды салыстырамыз
; _ _
_ _ _ нұсқағыштардың басы мен соңын
салыстыру
MOV | AX,0 | ; қосымша сегментті орнатамыз |
MOV | ES, AX | ; жадының басына |
MOV | AL, ES:[41AH] | ; бір нұсқағыш аламыз |
MOV | AH,ES:[41CH] | ; басқа нұсқағыш аламыз |
CMP | AH, AL | ; салыстырамыз |
JNE | GET_KEYSTROKE | ; егер тең болмаса енгізу процедурасына көшу |
1.4.
Символ енгізілуін күту және оны экранға
бейнелеу
Әдетте енгізілген символдар экранға не басылғанын көру үшін бейнеленеді. Кейде автоматты жаңғырық экранда қажет емес. Мысалы, мәзір пунктін пернені басу арқылы бейнелеуге болады. Кейде енгізілген символдарды экранға шықпастан бұрын қателікке тексеру керек.
Кеңейтілген кодты өңдейтін әрбір бағдарлама автоматты жаңғырықты пайдалану керек, себебі бұл кезде алғашқы байт (ASCIIO) коды символдар арасына бос орын (пробел) қалдырып экранға шығарады.
ОРТАША
ДЕҢГЕЙ
Егер
буфер бос болса, 7 және 8 функцияларын
21Н үзілісі символ енгізілуін
күтеді. Бұл кезде 8 функциясы Ctrl+Break пернелер
комбинациясын анықтайды, ал 7 функциясы
оған әсер етпейді. Екі жағдайда да символ
AL-ге қайтады. AL ASCLL кодын меншіктеген кезде
кеңейтілген код болады. Үзілісті қайталағанда
AL-да екінші кеңейтілген код шығады.
;
_ _ _ _ _ енгізілген символды
аламыз