1 / 17

Tutoriaal 7 : Sleutelbord onderbrekings Fout in boek. Valskermtoets

Tutoriaal 7 : Sleutelbord onderbrekings Fout in boek. Valskermtoets. Tutoriaal 7 1 Onderskep onderbreking 9. 2 Lees die sleutelbord skandeerkode wanneer 'n sleutel gedruk word. 3 As dit 'n sleutel in die boonste ry sleutels ("1" tot "0") is,

Télécharger la présentation

Tutoriaal 7 : Sleutelbord onderbrekings Fout in boek. Valskermtoets

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tutoriaal 7 : Sleutelbord onderbrekings Fout in boek. Valskermtoets RS245-2003-Lesing 15

  2. Tutoriaal 7 1 Onderskep onderbreking 9. 2 Lees die sleutelbord skandeerkode wanneer 'n sleutel gedruk word. 3 As dit 'n sleutel in die boonste ry sleutels ("1" tot "0") is, plaas die die ASCII kode "A" (tot "J") in die BIOS sleutelbordbuffer in plaas van "1" (tot "0"). 4 As dit enige ander sleutel is, word die oorspronklike int 09H prosedure geroep om dit te hanteer. 5 Maak die program "resident". Die hoeveelheid geheue wat benodig word, kan uit die .MAP lêer verkry word. RS245-2003-Lesing 15

  3. Hoofprogram Onderbreking tipe 9 begin Lees skandeerkode N Roep oorspronklike int 9 "1" tot "0" ? Bewaar int 9 afset en segment J Gee "keyboard Ack" Plaas eie int 9 afset en segmentadres in onderbrekingstabel Skryf Skandeerkode en ASCII kode in Bios sleutebordbuffer en opdateer "Tail" Maak "resident en keer terug na Windows CMD-venster Stel 8959 in kennis: onderbreking is verby iret RS245-2003-Lesing 15

  4. 1 Onderskepping van die hardeware-onderbreking no 9. Die adres van die funksie wat uitgevoer word wanneer 'n sleutel gedruk word is dus in die onderbrekingstabel by adres 9x4 =36 Ons plaas nou ons eie funksie se adres in die tabel en bewaar die vorige een in twee 16 bis veranderlikes ('Offs' en 'Segm' ) RS245-2003-Lesing 15

  5. Nota: In Data-segment: Offs dw 00 Segm dw 00 mov ax,_DATA ;MASM32 se etiket vir vir die data segment mov es,ax ;es wys nou na die begin van _DATA xor cx,cx mov ds,cx ;ds wys na adres 0 mov bx,36 ;sleutelbord onderbreking no 9 x 4 cli ;stuit onderbrekings terwyl ons die tabel opdateer mov ax,[bx] ;gaan haal die huidige int 9 afsetadres mov es:Offs,ax; ;bewaar in ons datasegment in 'Offs' mov ax,[bx][2] ;gaan haal int 9 se segmentadres mov es:Segm,ax ;bewaar in ons datasegment in 'Segm' mov ax, keyInt ;ons eie ondebrekingsfunksie (met etiket keyint) mov [bx],ax;plaas dit in onderbrekingstabel mov ax,_TEXT ;MASM32 se etiket vir die code segment mov [bx][2],ax ;plaas dit in die onderbrekingstabel sti ;steun onderbrekings RS245-2003-Lesing 15

  6. Die sleutelbord se skanderingskode kan gelees word deur: in al,60H Keyboard "Ack" Die sleutelbord moet in kennis gestel word dat jy die kode gelees het voordat dit 'n volgende sleutel se kode beskikbaar sal stel. Stel die sleutelbord in kennis deur: in al,61H ; Wip die mees belangrike bis van poort 61H mov ah,al or al,80H out 61H,al mov al,ah out 61H,al RS245-2003-Lesing 15

  7. Opdatering van sleutelbordbuffer. Die sleutelbordbuffer is in Lesing 14 beskryf: BELANGRIK: segment = 40H, Head en Tail stoor slegs die afset. Int 9 is 'n hardeware onderbreking. Die 8259 onderbrekingshanteerder moet in kennis gestel word dat die onderbreking gediens is. Dit word gedoen deur: mov al,20H ;Stel 8259 in kennis dat onderbrekin afgehandel is out 20H,al Die oorspronklike int 9 prosedure doen dit natuurlik ook. Doen dit dus slegs as die oorspronklike onderbreking nie geroep gaan word nie. RS245-2003-Lesing 15

  8. 'n Onderbrekingsrosedure word normaalweg met 'n int-instruksie of hardeware onderbreking geroep. As jy 'n onderbrekingsprosedure will CALL moet jy eers 'n pushf doen aangesien die iret instruksie aan die einde van onderbrekingsprosedure 'n popf doen. Gestel jy het 'n onderbrekingsprosedure se adres gestoor by: Offs: dw 0 Segm: dw 0 dan kan jy dit CALL met pushf call dword ptr Offs ; NOTA ptr uitgelaat in Lesing 14 RS245-2003-Lesing 15

  9. Voorbeeld van .MAP lêer Gegenereer deur MASM32 Start Stop Length Name Class 00000H 00091H 00092H _TEXT CODE 00092H 00095H 00004H _DATA DATA 000A0H 00103H 00064H STACK STACK Origin Group 0009:0 DGROUP Program entry point at 0000:0000 Gebruik dus geheue 0 tot 103H, dus lengte 104H Tel 100H by vir "program segment prefix" Hierdie program kan dus volledig bevat word in 204H grepe. Die aantal paragrawe is 21H (20.4H opgerond) mov ax,3100H ;maak "resident" funksie mov dx,21H ;lengte in paragrawe int 21H ;DOS funksie RS245-2003-Lesing 15

  10. TABLE 6-1 in die handboek bevat 'n aantal drukfoute JG vind plaas as (Z or (S xor O))=0 JGE (S xor O) = 0 JL (S xor O) = 1 JLE (( S xor O) or Z)=1 RS245-2003-Lesing 15

  11. VRAAG 1 Aanvanklike waardes (Alle waardes is hex ) AX=1234 BX=5678 CX=0000 DX=0000 SP=0010 BP=0007 SI=0008 DI=0010 DS=2300 ES=2400 SS=2500 CS=2600 IP=0000 FlagsReg = 0000 Die instruksies voer sekwensieel uit. Bepaal die adresse waarna geskryf word en die nuwe data by hierdie adresse. INT 50 doen push flags push CS push IP int 50 push ax stosw mov [di],bx Die geheue adress wat verander is: 25000+000F, 25000+000E = flagsreg 25000+000D, 25000+000C = CS 25000+000B, 25000+000A = IP push ax 25000+000F, 25000+000E = ax of as aanvaar dat push ax binne die int 50 funksie is: 25000+0009, 25000+0008 = ax stosw 24000+0011, 24000+10=ax mov [di],bx 2300+0013,23000+0012=bx RS245-2003-Lesing 15

  12. VRAAG 2 (a) (i) ax = 0F39H, bx = 0F81H. Wat is die inhoud van ax en bx nadat die volgende instruksies uitgevoer is? (ii) Gee een instruksie wat dieselfde resultaat as die drie instruksies het. xor ax,bx xor bx,ax xor ax,bx (i) ax=0f81H bx=0f39H (ii) xchg ax,bx RS245-2003-Lesing 15

  13. 2 (b) (i) Gee een instruksie wat dieselfde resultaat sal hê as die gegewe groep. .(ii)Watter aanname moet gemaak word sodat u antwoord in (i) geldig is. push ax mov al,[si] mov es:[di],al inc si inc di pop ax (i) movsb (ii) direction flag = 0 RS245-2003-Lesing 15

  14. VRAAG 3 Beskryf die fout (indien enige) in elk van die volgende instruksies of groep instruksies. mul ax,bx mul bx more: mov cx,20H mov cx,20H moet buite loop wees mov [bx],ax inc bx inc bx loop more mov bx,[bx] Geen fout in al,3FDH Adres moet kleiner as 256 wees ret 9 Moet 'n ewe getal wees mov ax,[ds] Kan nie ds gebruik nie RS245-2003-Lesing 15

  15. Vraag 4 Vul die kommentaar vir elke groep instruksies in en verduidelik volledig wat die resultaat is wanneer die volgende program uitgevoer word. Dit skryf 10 rye van 10 spasies. Dit begin in kolom 60 , ry 10 en eindig by kolom 69 , ry 1. Aangesien die agtergrond attribuut blou is kry ons 'n blou 10x10 karakter blok op die skerm. Dit keer terug na Windows of DOS. RS245-2003-Lesing 15

  16. VRAAG 5 / QUESTION 5 Vul die kommentaar vir elke groep instruksies in en verduidelik volledig wat die resultaat is wanneer die volgende program uitgevoer word. Die program lees sleutelbord sleutels. As die sleutel tussen '1' en '9' is word die desimale ekwivalent bereken, met 150 vermenigvuldig en dan verdubbel. (Dus x300) (*) Hierdie resultaat word in 1234dcH (=1193180 ) gedeel en in die teller gelaai. Die vierkantsgolf sein frekwensie wat die teller opwek is dus gelyk aan die berekening (*) Die gonser word aangeskakel en gons teen die berekende frekwensie. Die program bly in 'n oneindige lus. RS245-2003-Lesing 15

  17. VRAAG 6 Skryf 'n samestellerfunksie wat die gemiddelde van twee getalle bereken sonder om die div of idiv instruksies te gebruik. Die getalle se waardes lê tussen -32768 en +32767. Wenk: Waak teen oorvloei. Die definisie in C is: int Krygemiddeld(int,int); Gebruik die cwd om die getalle uit te brei na 32 bisse. Tel bymekaar met behulp van add en adc. Deel deur 2 deur sar en rcr. RS245-2003-Lesing 15

More Related