Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Rookie am 15. February 2017, 19:43

Titel: Frage zum Sourcecode von Artikel IVT (Interrupt Vector Table)
Beitrag von: Rookie am 15. February 2017, 19:43
Hallo,

Ich hab ein paar Fragen zum Beispiel, wie man eine Division durch Null abfängt (im Artikel IVT). Ich hab dazu einfach mal einen dummen Kernel gemacht, der nur eine Meldung ausgibt, das Makro verwenden soll und das Ganze dann anhand einer Division durch Null testen soll:


mov ax, 0x0800
mov ds, ax
mov es, ax
start:
xor bx, bx

;  ... hier ist der Startcode ...
IVT.Handlerwahl 0x00, IRQ_0x00
;  ... hier kommt dann noch irgendein Code ...

IRQ_0x00:   ;Handler für IRQ 0
;  ... hier kann ein Hinweistext geschreiben werden o.ä.  ...
iret


;Testen anhand einer Division durch Null
xor ax, ax
div ax


%macro IVTHandlerwahl 2
push ax
push es
xor ax, ax
mov es, ax
cli
mov WORD [es:%1*4], %2
mov WORD [es:%1*4+2], cs
sti
pop es
pop ax
%endmacro

end:
jmp end

Leider kommt beim assemblieren die Meldung
Zitat
error: parser: instruction expected
und zwar  beim Aufruf des Makros in der Zeile : IVT.Handlerwahl 0x00, IRQ_0x00
Könnt ihr mir sagen, wie ich das Makro richtig aufrufen kann und welchen Code ich wo einfügen muss, damit er bei einer Division durch Null z.B. zum Anfang des "Kernels  :-D " springt ?

Vielen Dank !   





 
Titel: Re: Frage zum Sourcecode von Artikel IVT (Interrupt Vector Table)
Beitrag von: kevin am 15. February 2017, 20:28
Du musst das Makro erst definieren, bevor du es benutzt, nicht umgekehrt.

Und den Punkt solltest du bei der Benutzung noch rausmachen, damit es auch der richtige Makroname ist. ;)
Titel: Re: Frage zum Sourcecode von Artikel IVT (Interrupt Vector Table)
Beitrag von: Rookie am 15. February 2017, 21:44
Zitat
Du musst das Makro erst definieren, bevor du es benutzt, nicht umgekehrt.
Stimmt, habs eben festgestellt, danke !