Vra

Ek probeer om my onderbreking tafel verander oor die sleutelbord onderbreking te neem. My einddoel is om my nuwe onderbreking roetine skryf, kopieer myself in RAM en maak die real-af onderbreking tafel punt om my.

Ek het gevind ewekansige voorbeeld kode aanlyn maar dit ontbreek verduidelikings oor hoe om die adres van die oorspronklike onderbreking kry. Hulle het eenvoudig veranderlikes in hul plek, en hoe om self in die geheue sit.

So my vraag is hoe kan ek uitvind of druk om my skerm die werklike mode onderbreking tafel?

en / of as iemand 'n goeie kode voorbeelde om dit te doen om óf sekere sleutels of beep op sekere sleutels Ek sal dit regtig waardeer skakel.

Dankie!

Was dit nuttig?

Oplossing

In 16-bit reële modus, die onderbreking tafel begin by adres 0, met 256 4 byte inskrywings. Elkeen van die 256 onderbreek vektore kry 'n 4 byte adres (segment + geneutraliseer) in daardie tafel.

http://en.wikipedia.org/wiki/Interrupt_descriptor_table het 'n paar meer besonderhede .

Ander wenke

As jou program loop onder DOS, jy kan (en waarskynlik moet) gebruik die DOS-voorsien API:

  MOV  AH,35H    ; function 35H is Get Vector
  MOV  Al,9      ; slot in IDT for keyboard interrupt
  INT  21H       ; call DOS, contents of old vector in ES:BX (save them somewhere)
   .
   .
  MOV  AH,25H    ; function 25H is Set Vector
  MOV  AL,9
  PUSH CS        ; the new vector is passed in DS:DX, so copy CS to DS
  POP  DS        :  (assuming your new handler is in the same seg as other code)
  MOV  DX,NewHandler
  INT 21H
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top