Verander Interrupt in 16 bit Real af
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!
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