Автор работы: Пользователь скрыл имя, 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 кодынын қосымша кестесі.............................................
Қорытынды ...........................................................................
Қалған биттер қолданылмайды.
Пернетақтада үзіліс болғанда,буферден ешқандай символ оқылмасада, қосқыш пернелердің біреуі басылғанда-ақ биттар статусы жаңартылады. Осы 8 перненің ішінде кодты буферге орналастыратын INS бұл дұрыс ереже (INS статусын орнату буферде символға бос орын жоқ болса да ауысады). CTRL+ NUMLOCK тоқтату режимі іске қосылғанда 0040:0018 адресінен 3 биті 1 ге орналасады, бұл жағдайда бағдарлама тоқтатылады.
Пернетақтадағы
үзіліс статустың биттерді басылған
пернелерді интерпретациялаудың алдында
тексереді,сондықтан бағдарлама биттердің
біреуін аыстырғанда,оның нәтижесі
сәйкес пернені физикалық шертудегідей
болады. Енгізу сәйкес типте болу үшін
NUMLOCK және CAPSLOCK пернелері жағдайлары қайта
орнатылады.
ОРТАША
ДЕҢГЕЙ
2 функциясы
16Н үзілісі-статустық белгі
;_ _ _ _ _
қою пернесінің статусын тексеру.
MOV | AH,2 | ; функция номері |
INT | 16H | ; статус байтын алу |
TEST | AH,10000000B | ; 7 битті тексеру |
JZ | INSERT_OFF | ; егер 0 болса, INSERT қосулы |
ТӨМЕНГІ ДЕҢГЕЙ
Бұл мысалда
қою режимі орнатылады
SUB | AX,AX | ; қосымша сегмент орнатамыз |
MOV | ES,AX | ; жады басы |
MOV | AH,10000000D | ; 7 битін орнатуға дайындау |
OR | ES:(417H),AL | ; статус байтын өзгертеміз |
1.8. Пернетақтадан
процедураның жазылуын енгізу
Пернетақтада қолданылатын код системасы жай интерпретатцияға берілмейді. Кодтар 1 немесе 2 байт ұзындықта болуы мүмкін. Пернелердің барлық комбинациясы әмбебап код бермейді, сондықтан оларды ажырату үшін қосымша күш қажет. ASCLL кодтары да, кеңейтілген кодтар да жай біріктірулер мен қателікті тексере алмайды.
Орташа деңгей.
Бұл мысал алдыңғыдан төрт жақты жағдайды Ctrl+H, Ctrl+M тану методымен ерекшеленеді. Бұл жерде пернені басқан кезде немесе Ctrl пернесімен комбинацияланған пернелерді басқан кезде көрсетілген код енгізіледі ма? деген сұрақ туғанда скан код тексеріледі. Бұл статус бетін тексергеннен дұрыс метод болып табылады, себебі скан код пернетақта буферінде сақталады, ал бит статусын орнату өзгертілуі мүмкін.
; _ _
_ _ _ басылған перненің кодын алу
және оны тексеру
NEXT | MOV | AH,0 | ;BIOS пернетақтасынан енгізу функциясы |
INT | 16H | ; Енгізілген кодты алу | |
CMP | AL,0 | ; кеңейтілген кодтқа тексеру | |
JE | EXTENDET_CODE | ; иә, арнайы процедураға жіберу | |
CMP | AL,32 | ; басқару символына тексеру | |
JL | CONTROL_CODE | ; егер иә, онда арнайы процедураға жіберу | |
CMP | AL,65 | ; егер символ теру машинкасына ендесе | |
JL | NEXT | ; келесін аламыз | |
CMP | AL,123 | ||
JL | NEXT |
; _ _
_ _ _ енді AL-дағы символды өңдейміз.
STOSB | ;ES:DI адресіндегі символды есте сақтау | |
MOV | AH,2 | ;экранға шығатын символ функциясын шығу |
MOV | DL,AL | ;шығарудан бұрын символды DL–ге орнату |
INT | 21H | ;оны экранға шығарамыз |
. | ||
JMP | NEXT | ;келесі символға көшеміз |
; _ _
_ _ _ кодты басқаратын анализаторлар
CONTROL_CODE: | CMP | AL,13 | ; ASCII 13 коды ма? |
JNE | TAB | ; жоқ, келесі тексеру | |
CMP | AH,28 | ; әйтпесе <CR> скан-код тексеру | |
JNE | C_M | ;жоқ,онда Ctrl+M | |
CALL | CARRIAGE_RET | ;кареткаға қайтуды өңдеу | |
JMP | NEXT | ; келесі символға көшу | |
C_M: | CALL | CTRL_M | ; Ctrl-M өңдеу |
JMP | NEXT | ; келесі символға көшу | |
TAB: | CMP | AL,9 | ; табуляцияға тексеру |
CMP | AL,10 | ; басқаларын тексеру | |
REJECT | JMP | NEXT | ;келесі символға көшу |
; _ _
_ _ _ кеңейтілген код анализі (2 байт
коды АН-та орналасады)
EXTENDED_CODE: | CMP | AH,71 | ; төменгі шекті тексеру |
JL | REJECT | ; егер кіші болса, онда келесі символға | |
CMP | AH,81 | ; жоғары шекті тексеру | |
JL | REJECT | ; егер үлкен болса, онда келесі символ |
; _ _
_ _ _ курсорды басқаратын символ
АН-та орналасқан, өңдеу
CMP | AH,72 | ; «курсор-үстіге»? | |
JL | C_U | ; егер иә, онда процедураға көшу | |
CMP | AH,80 | ; «курсор-төмен»? | |
JL | C_D | ; егер иә, онда процедураға көшу | |
C_U | CALL | CURSOR_UP | ;сәйкес процедураны шақыру |
JMP | NEXT | ; келесі символға көшу | |
C_D | CALL | CURSOR_DOWN | ;сәйкес процедураны шақыру |
JMP | NEXT | ; келесі символға көшу |
1.9. Пернетақта
үзілісін қайта бағдарламалау
Микропроцессор пернетақтасы скан коды 8255 микросхемасының А портына орналастырылғанда 9 үзілісі шақырылады. Бұл үзілістің атқаратын қызметі қайта қосқыш пернесін жағдайына жүгіне отырып скан кодты символға айналдыру және оны пернетақта буферіне орналастыру. Егер скан код қайта қосқыш пернесіне сәйкес келсе пернетақта буферіне сәйкес келеді. Бірақ бұл жағдайға <Ins> пернесіне қатысты емес, мұның орнына статус байтын өзгертеді, ол байттар BIOS мәліметтер обылысында орналасқан. DOS және BIOS «пернетақтадан енгізу» үзілісі болып табылады. Шынында оларға перненің басылуы сезілмейді. Анығырақ айтсақ олар енгізген перненің интерпритациясын оқиды. Оны 9 үзіліс қамтамасыз етеді. PCJR 62 пернесінен 82 пернелік протоколға және басқа да IBM PC-ларымен пайдаланылатын енгізілгендерді өңдеу үшін арнайы процедураларды қолданады. Бұл процедура нәтижесі әдеттегідей жұмысын атқаратын 9 үзіліске жіберіледі. Пернетақта үзілісінен 3 негізгі қадамды атап айтуға болады
Бірінші
скан код басылған басу
коды басшылығына анализданады.
АТ-дан басқа барлық
Статустарында байтқа сәйкес
өзгерістер енгізілетін қайта
қосқыш пернелерінен басқа,
Енгізілген символ
Аяғында
код номерлері пернетақта буферіне
орналастырылады. Процедура алдыиен
буферде келесі символға орын бар
екенін тексереді. 0040:001А жады ұяшығында
буфер басына нұсқағыш бар, ал 0040-001С буфер
соңын көрсетеді. Бұл нұсқағыштар BIOS мәлімметтер
облысында орналасады, ол 40Н сегментінен
басталады да, 30-60 диапазон аралығында
болады. Жаңа символ буфер ұяшығына үлкен
адрестермен қойылады, ал жоғарғы шекараға
жеткен кезде, келесі символ буфердің
төменгі шегіне орналасады.
ТӨМЕНГІ
ДЕҢГЕЙ
; _ _
_ _ _ мәліметер сегментінде
TABLE | DB | 16 DUP (0) | ;алғашқы 16 битті өткіземіз |
DB | ‘Qwertyuiop’, 0.0.0.0. | ;пернетақтаның жоғарғы қатары | |
DB | ‘asdfghjkl’,0.0.0.0.0 | ;пернетақтаның ортаңғы қаттары | |
DB | ‘zxcvbnm’ | ; пернетақтаның төменгі қаттары | |
DB | 16 DUP (0) | ;жоғарғы регистрға дейінгі босату | |
DB | ‘QWERTYUIOP’,0.0.0.0 | ;сол символдар жоғарыда | |
DB | ‘ASDFGHJKL’,0.0.0.0.0 | ;регистрда | |
DB | ‘ZXCVBNM’ | ; |