Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: lobmann am 05. May 2004, 19:27
-
Wollt ma kurz mein Code vorstellen um die idt im PMode zu erstellen der Vorteil
ist das man die idt wenn sie einmal initialisiert ist stückweise bestücken kann ohne das es bei nem Interrupt oder ner Exception nen total Absturz gibt
_idttable:
times 256*8 db 0
_idt:
IDTLimit dw 0
IDTBase dd 0
initirq:
mov ecx, 256
mov edi, _idttable
cld
initirq2:
mov eax, ignoreint
stosw
xor eax, eax
mov eax, 1000b ; Vorrausgesetzt der Code für den Handler steht im ersten Segment
stosw
xor eax,eax
stosb
xor eax,eax
mov eax, 0x8e
stosb
mov eax, ignoreint
shr eax, 16
stosw
loop initirq2
mov [IDTLimit], word 256*8-1
mov eax, 0x10000
add eax, _idttable
mov [IDTBase], eax
lidt [_idt]
ignoreint:
iret
-
Danke lobmann!
-
Da:
xor eax, eax
mov eax, 1000b
Und da:
xor eax,eax
mov eax, 0x8e
Kann man das xor auch weglassen, erst null setzten und dann mit Werten füllen ist sinnlos.
-
Mann könnte aber auch schreiben:
xor eax,eax
mov al, 0x8E
\:D/
oder:
mov eax,0xE0000008
rol eax,4
:lol:
oder:
push dword 0xE8
pop eax
.... viele Wege führen nach Rom (...bzw. nach eax), aber
mov eax, 0x8e
ist natürlich am einfachsten!
](*,)