Пернетақтаны басқару



Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
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).
Процессор бірден өз жұмысын тоқтатады да, скан-кодты анализдайтын
процедураны орындайды. Жылжу пернесі немесе қайта қосқыштан код келгенде
статус өзгерісі жадыға жазылады. Басқа жағдайларда перне басылған кезде
скан-код символ кодына трансформацияланады (әйтпесе скан-кодты шығарып
тастайды).

Әрине енгізілген кодты дұрыс алу үшін жылжу пернелері мен қайта
қосқыштардың нұсқамаларын анықтап алады. Осыдан кейін өңдеуге жіберілген
код жады аумағы болып табылатын пернетақта буферіне барып
орналасады,бағдарлама басқа операцияларды орындап жатқан кезде пернетақта
буфері 15 символға дейін жадыда сақтай алады.

Кодты символдың екі түрі болады, ASCII және кеңейтілген. ASCII
кодтары- байтты сандар, олар IBM PC-ке негізделген ASCII кеңейтілген
кодтар теріміне сәйкес келеді. IBM PC-та бұл теру- теру машинкасының
қарапайым символдарын, сонымен қатар арнайы әріптер және псевдографика
символдарын да қолданады. Сонымен қатар ASCII коды құрамында 32 басқару
коды бар, экранға басқа символдар сияқты шықпай, олар приферинді
құрылғыларға командаларды жіберу үшін қолданылады. Бірақ, олардың
әрқайсында дисплей жадысының тікелей адресациясы арқылы экранға
шығарылатын символдар меншіктелген.

Кодты символдардың екінші түрі кеңейтілген. Олар белгілі бір
пернелерге немесе клавиша комбинацияларына меншіктелген, мысалы:Alt
пернесімен комбинацияланатын пернелер және функционалды пернелер.
Кеңейтілген кодтар ұзындығы 2 байт, оның бірінші байты әрқашан ASCII 0
болады. Екінші байт-кеңейтілген код номері.

Мысалы: 0:30 коды Alt+A-ға сәйкес келеді. Бастапқы ноль берілген
кодының қай теруге жататынын анықтауға көмектеседі.

Арнайы командаларды орындап бірақ, скан-кодты генерация жасамайтын
да бірнеше перне комбинациялары бар. Оларға Ctrl-Break,Ctrl-Alt-
Del,Prtse, АТ үшін Ctrl-Alt-стрелка солға, стрелка оңға-Caps Lock,Ins
жатады.Ал қалған пернелерді басқанда, егер олар бағдарламада арнайы
қызмет атқарса интерпретация жасалуы керек. Мысалы: курсорды оңға
жылжыту, онда бағдарламада осы эффектке жететіндей кодтар болу керек.

2. . Пернетақта буферін тазалау

Кодты еңгізуге сұрату жіберместен бұрын, бағдарлама пернетақта
буферіндегі керексіз символдарды өшіруі керек.Символдардың 1 байтты ASCII
коды немесе 2 байтты кеңейтілген код екеніне қарамастан, буфер жадыда
15 символға дейін сақтай алады. Осылайша буфер перненің әрбір басылуына
жадыдан 2 байт орын алып отырады.Бір байтты кодтар үшін бірінші байт
ASCII коды, екіншісі перненің скан-коды, ал кеңейтілген кодтар үшін
бірінші байт ASCII 0, ал екіншісі кеңейтілген код номері болады. Бұл код
негізінде перне скан-кодымен сәйкес келіп отырады, бірақ ылғи емес,
себебі кейбір пернелер басқа кодтардан айырмашылығы болу үшін жылжу
пернелерімен комбинацияланады.

Буфер циклдық тізбек түрінде құрылған, оны 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-да екінші кеңейтілген код шығады.

; _ _ _ _ _ енгізілген символды аламыз

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Н үзілісі бұл енгізілген символды күтусіз алудың жалғыз жолы.
Бұл функция экранға жаңғырық шығармайды және Ctrl+Breaк-ты анықтамайды.
Үзілісті шақырмас бұрын OFFH-ты DL-ге орналастыру керек. Әйтпесе 6
функциясы экранға DL-да орналасқан символдарды шығара бастайды. Пернетақта
буфері бос болса нөлдік жалауша 1-ге орналастырылады. Егер символ
қабылданса, ол AL-ға орналасады. ASCII коды кеңейтілген кодты
идентификациялайды, код номерін алу үшін үзліс қайталануы тиіс.
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 режимі
қосулы

Қалған биттер қолданылмайды.
Пернетақтада үзіліс болғанда,буферден ешқандай символ оқылмасада,
қосқыш пернелердің біреуі басылғанда-ақ биттар статусы жаңартылады. Осы 8
перненің ішінде кодты буферге орналастыратын INS бұл дұрыс ереже (INS
статусын орнату буферде символға бос орын жоқ болса да ауысады). CTRL+
NUMLOCK тоқтату режимі іске қосылғанда 0040:0018 адресінен 3 биті 1 ге
орналасады, бұл жағдайда бағдарлама тоқтатылады.
Пернетақтадағы үзіліс статустың биттерді басылған пернелерді
интерпретациялаудың алдында тексереді,сондықтан бағдарлама биттердің
біреуін аыстырғанда,оның нәтижесі сәйкес пернені физикалық шертудегідей
болады. Енгізу сәйкес типте болу үшін NUMLOCK және CAPSLOCK пернелері
жағдайлары қайта орнатылады.

ОРТАША ДЕҢГЕЙ

2 функциясы 16Н үзілісі-статустық белгі бір байтына жол ашады. Ол 0040:0017
адресіндегі байт, байт AL-ге қайтарылады

;_ _ _ _ _ қою пернесінің статусын тексеру.

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 ; егер символ теру машинкасына
... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Пернетақтаны басқару туралы
Дербес компьютер құрамы
Әмбебaп моделдейтін бaғдaрлaмaлaрды пaйдaлaну тиімділігі. MatCad
“Ипподром”
Медицинадағы бұлтты есептеу
Параллель және сериялық порттардың тарихы
Компьютер құрылымдары
Жүйелік программалаудың негізгі ұғымдары мен анықтамалары жайлы ақпарат
Компьютерлік ойындардың зияны
Дербес компьютердің ақпараттық қамтамасыздандыруы
Пәндер