Autor Thema: Frage zum Sourcecode von Artikel IVT (Interrupt Vector Table)  (Gelesen 10309 mal)

Rookie

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
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 !   





 
« Letzte Änderung: 15. February 2017, 21:45 von Rookie »

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 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. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Rookie

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 15. February 2017, 21:44 »
Zitat
Du musst das Makro erst definieren, bevor du es benutzt, nicht umgekehrt.
Stimmt, habs eben festgestellt, danke !

 

Einloggen