Автор работы: Пользователь скрыл имя, 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 кодынын қосымша кестесі.............................................
Қорытынды ...........................................................................
MOV | AH,7 | ;функция номері |
INT | 21H | ;символды енгізуді күтеміз |
CMP | AL,0 | ;кеңейтілген кодты тексеру |
JE | EXTENDED.CODE | ;иә, онда ерекше
процедураға
;әйтпесе символ кодын AL-ге |
;
_ _ _ _ _ кеңейтілген кодты
өңдеу процедурасы
EXTENDED_CODE: | INT | 21H | ;екінші код байтын аламыз |
CMP | AL,75 | ;«стрелка-солға» тексереміз | |
JNE | C_R | ;егер жоқ болса,келесі тексеру | |
JMP | CURSOR_LEFT | ;егер иә болса,келесі процедураға | |
C_R | CMP | AL,77 | ;ары қарай тексереміз |
BIOS MS DOS функциялары сияқты процедураларды
барлық мүмкіндіктермен қамтамасыз етеді.
0 ді АН-қа орналастырып 16Н үзілісін шақырамыз.
Функция символ енгізілуін күтіп, оны
AL-ге қайтарады. Бұл жағдайда кеңейтілген
кодтар бір үзілісте өңделеді. Егер AL-де
0 орналасса, AH-та кеңейтілген код номері
болады.Ctrl+Breaк өңделмейді.
;_ _
_ _ _ перне басылуын күту.
MOV | AH,O | ;Енгізуді күту функциясының нөмері |
INT | 16H | ;енгізілген кодты алмасу |
CMP | AL,O | ;кеңейтілген кодқа тексеру |
JE | EXTENDED_CODE | ;егер иә,онда арнайы процедура |
;әйтпесе А символ AL-ге |
;_ _ _ _ _ кеңейтілген
код процедурасының өңделуі.
EXTENDED_CODE: | CMP | AH 75 | ;AH-тан кеңейтілген код аламыз |
;т.с.с |
1.5. Экранда перне басылуы мен жаңғырықты күту
Әдетте
мәтін мен мәліметтер енгізгенде,
енгізілген символдар жаңғырығы
экранға шығарылады. Бұл кезде
каретқаға қайту символдары курсордың
бағытымен орын ауыстырады, ASCII символдарының
коды сияқты бейнеленбейді. Жаңғырықты
беру алдын-ала курсор орналастырып, мәтіннің
автоматты түрде келесі жолға орын аыстырған
позициясында болады. Келесі жолға көшу
арнайы кодты қажет етпейді, себебі символдар
дисплей жадысының буферінде орналасады.
Жады дисплейдің 25 жолын да қамтиды.
ОРТАША ДЕҢГЕЙ
Егер
пернетақта буфері бос болса, 1 функциясы
21үзілісі символдың енгізілуін күтеді,
кейін оны экранға курсордың
ағымдағы орнына шығарады. Ctrl+Breaк өңделеді,
сондықтан Ctrl+Breaк өңдеу процедурасы жұмыс
істей алады. Енгізілген символ AL-ге қайтарылады.
Кеңейтілген кодты енгізгенде AL де ASCII0
болады.
; _ _ _
_ _енгізілген символды алу
MOV | AH, 1 | ; функция номері |
INT | 21H | ; перне басылуын күту |
CMP | AL,0 | ; кеңейтілген код |
JE | EXTENDED_CODE | ; иә, онда арнайы
процедура
;әйтпесе символ AL де орналасқан |
; _ _ _
_ _кеңейтілген кодты өңдеу процедурасы
INT | 21H | ; AL да код номерін аламыз |
CMP | AL,77 | ; «курсор-оңға» тексеру |
JNE | C_R | ; жоқ, келесіні тексеру |
JMP | CURSOR_RIGHT | ; иә,процедураға жіберу |
C_R: CMP | AL,75 | ; т.с.с..... |
Бұл
функция <Esc> пернесінің әрекеттерін
қабылдамайды. Перне табуляциясы интерпретенцияланады,
<Enter> клавишасы ағымдағы жолдың бірінші
позициясына көшеді.
1.6. Символды
күтусіз қабылдау
Кейбір
нақты уақытта тоқтаусыз жұмыс
істейтін бағдарламалар перненің басылуын
күте алмайды, олар пернетақта буферінен
символдарды бағдарламаға қолайлы,
яғни бағдарламаға қажет уақытта
ғана қабылдайды. Мысалы, ойын бағдарламасында
процессордың пернетақтадан код енгізілуін
күтуі,экрандағы бейнені тоқтатып қояр
еді.
ОРТАША
ДЕҢГЕЙ
6 функциясы
21Н үзілісі бұл енгізілген
символды күтусіз алудың
MOV | AH, 6 | ; DOS функциясының номері |
MOV | DL,OFFH | ; пернетақтадан сұраныс енгізу |
INT | 21H | ;символды алу |
JZ | NO_CHAR | ; символ жоқ болса, ауысу |
CMP | AL, 0 | ; кеңейтілген кодқа тексеру |
JE | EXTENDED_CODE | ;иә,арнайы процедура
;әйтпесе ASCII кодын AL-ге орнату |
EXTENDED_CODE | INT 21H | ;кеңейтілген код номерін аламыз |
1.7. Символдар жолын алу
ОРТАША
ДЕҢГЕЙ
жаңғырықты териналға шығара отырып ОАН функциясын 21Н үзілісі 254 символдан тұратын жолды шығарады. Бұл процедура кареткаға қайту пернесі басылғанша символдарды енгізеді. DS:DX жадысы жолдың орналасу адресінкөрсетеді. Жолға енгізілген символдардың бірінші байты байттар саны болуы керек. Жол енгізілгеннен кейін, екінші байт нақты енгізілген символдардың санын көрсетеді. Жолдың өзі үшінші байттан басталады.
Жолды
жеткілікті ұзындықта жасап, қосымша
екі бит дискрипторға және бір
қосымша бит кареткаға қайту
үшін қосу керек. Жолдың максималды ұзындығын
алған кезде, міндетті түрде кареткаға
қайтатын қосымша бір байт алу керек. Кареткаға
қайту коды ASCII-13 соңғы символ болып енгізіледі.
Бірақ,ол жол дискриптордың екінші байтына
орналастыратын функция болып есептелінбейді.
Осылайша, 50 символды жол алу үшін ASCII
51 бірінші байтына 53 байт жады орналастыру
керек.
; _ _
_ _ _ мәліметтер сегменттері
STRING | DB 53 DUP(?) | ;50 символдық жолға аумақ |
; _ _
_ _ _пернетақтадан жолды алу
LEA | DX,STRING | ; DS:DX жол адресін көрсету |
MOV | BX,DX | ; BX-те адресті көрсету |
MOV | AL,51 | ; жол ұзындығын орнату(+1 CRүшін ) |
MOV | [BX],AL | ; дискриптордың 1-ші байтына жібереміз |
MOV | AH, OAH | ; функция номері |
INT | 21H | ;жолды алу |
; _ _
_ _ _жолдың ұзындығын тексеру
MOV | AH,[BX]+1 | Енді ұзындық AH-та орналасқан |
Бұл процедура MS DOS жолының редактрлеу мүмкіндіктерін пайдалануға болады. «стрелка -солға» пернесі экрандағы символдарды жадыға орналастырмай өшіреді. Табуляция пернесі жұмыс істейді. Кеңейтілген кодтар қолданылмайды. Терминалда оң жаң шетке жеткен кезде жол, келесі жолғакөшеді,ал оң жақ төменгі шетке жеткенде экран бір жол үстіге көтеріледі. Көбірек символ енгізгенде, артық символдар енгізілмей динамик дыбысы қосылады.
MS
DOS-та жаңғырықты терминалға шығармай
да «жолды» алу әрекеттері бар. 3FH функциясы
21р үзілісі- бұл ортақ мәнді енгізу функциясы,әдетте
дисктік операцияларда қолданылады. Ол
үшін алдын-ала анықталған кодтық сан
болып файл (file handle) дискрипторын қажет
етеді, ол операциялық жүйеде қондырғының
мәнән анықтауда қолданылады. Пернетақтада
0 дискрипторы қолданылады, ол ВХ-қа орналасуы
керек. DS:DX-қа жол орналасатын адресті
көрсетіп, ал СХ-қа жолдың максималды ұзындығын
енгізіп, функция шақырамыз
; _ _
_ _ _жолды жаңғырықсыз оқу
MOV | AH,3FX | ; функция номері |
MOV | BX,0 | ; дискриптор файлының номері |
LEA | DX,STRING_BUFFER | ; жолды енгізетін буферге сілтеме |
MOV | CX, 100 | ; жолдың максималды ұзындығы |
INT | 21H | ; енгізуді күту |
Жолды енгізу кареткаға қайту пернесін басқаннан кейін анықталады, осы кезде DOS жол соңына екі символ қосады: кареткаға қайту және жолды ауыстыру (ASCII 13 және ASCII 10). Қосымша символдарды қосқаннан кейін, максималды жол ұзындығын 100 деп көрсетсек те, ол 102 байтқа дейін жадыдан орын алуы мүмкін. Енгізілген жол ұзындығы АХ-қа қайтады және бұл мән өзіне 2 шектеуші символды қосады.
1.8. Қайтақосқыш пернелерді тексеру/орнату статусы
0040:0017 және
0040:0018 жады ұяшығында орналасқан
2байт биттерден тұрады, олар перне
статусын мына түрде
Бит | Перне | Бит =1болғандағы мән | |
0040:0017 | 7 | INSERT | Қою режимі қосулы |
6 | CAPSLOCK | CAPSLOCK режимі қосулы | |
5 | NUMLOCK | NUMLOCK режимі қосулы | |
4 | SCROLLLOSK | Перне басылып тұр | |
3 | ALT | Перне басылып тұр | |
2 | CTRL | Перне басылып тұр | |
1 | сол SHIFT | Перне басылып тұр | |
0 | оң SHIFT | Перне басылып тұр | |
0040:0018 | 7 | INSERT | Перне басылып тұр |
6 | CAPSLOCK | Перне басылып тұр | |
5 | NUMLOCK | Перне басылып тұр | |
4 | SCROLLLOSK | Перне басылып тұр | |
3 | CTRL+ NUMLOCK | CTRL+ NUMLOCK режимі қосулы |