Autor Thema: Problem mit idiv und div  (Gelesen 4450 mal)

Thunder

  • Beiträge: 24
    • Profil anzeigen
Gespeichert
« am: 27. March 2010, 10:27 »
Hallo,

Ich habe nun die Funktion putchar aus meinem Asm-Kernel umgebaut, sodass nach jeder Ausgabe eines Zeichens geprüft wird, ob gescrollt werden soll. Die Funktion arbeitet daher mit idiv bzw. div um die aktuelle Zeile auszurechnen.

Das Problem: idiv bzw. div ruft bei mir eine Exception auf (IDT und ISR funktionieren theoretisch schon), allerdings gibt der Exceptionhandler selbst auch einen String aus, was wieder eine Exception auslöst ...
Ich nehme an, dass sich der Kernel am Ende selbst überschreibt und neustartet.

Gibt es da irgendeine Erklärung?

Code:
mov eax,[CONSOLE_POS] ; aktuelle Position
mov ebx,80
idiv ebx ; oder div
cmp eax,24
jbe noscroll
memmove (TextBufferStart+160),TextBufferStart,(TextBufferLength-160) ; memmove ist ein Macro. TextBufferStart und TextBufferLength sind Konstanten
mov dword [CONSOLE_POS],TextBufferEnd-160 ; ebenfalls eine Konstante
noscroll:

mfg Thunder

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 27. March 2010, 11:39 »
Du solltest wohl edx auf 0 setzen, sonst wird das Ergebnis zu groß, falls in edx ein ungünstiger Wert steht (da edx:eax durch ebx geteilt wird).
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Thunder

  • Beiträge: 24
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 27. March 2010, 12:58 »
Ah, danke!
Es funktioniert zwar noch immer nicht, aber es stürzt nicht mehr ab. Den Rest sollte ich schon irgendwie schaffen.

 

Einloggen