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

Автор работы: Пользователь скрыл имя, 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 файл

Жанерке.doc

— 529.50 Кб (Скачать документ)
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 режимі қосулы

Информация о работе Пернетақтаны басқару