Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem mit asm div

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
_Gorgon



Anmeldungsdatum: 04.01.2008
Beiträge: 16
Wohnort: Heidelberg

BeitragVerfasst am: 23.02.2008, 01:50    Titel: Problem mit asm div Antworten mit Zitat

Hi..
ich habe eine recht n00bige Frage!
Aber warum zum Teufel zickt der div Befehl?! Der Inline Assembler kommt mir schon recht seltsam vor... unter nasm funktioniert alles einwandfrei!

Code:
Dim TestVar1 As UShort = 1234
Dim TestVar2 As UShort = 125
Dim RetVar1 As UByte = 0
Dim RetVar2 As UByte = 0

Asm   
   mov ax, word[TestVar1]
   mov bx, word[TestVar2]
   'div bx   
   mov byte[RetVar1], ah
   mov byte[RetVar2], al
End Asm
   
? "ah: "; RetVar1
? "al: "; RetVar2

Sleep


Sobald man den div Befehl hinzufügt stürtzt das Programm ab und der nette Doktor Watson erscheint im Taskmanager^^

Gruß Georg
_________________
Who is general failure
and why is he reading my harddisk?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 23.02.2008, 15:56    Titel: Antworten mit Zitat

Hi Georg,
das kann daran liegen, das du 'div bx' (16Bit DIV) statt 'div bl' (8Bit DIV) verwendest, obwohl bei mir keine Fehlermeldung erscheint.
Code:
Dividend  Divisor Quotient  Rest
 ax         8 Bit     al     ah
 dx:ax     16 Bit     ax     dx
 edx:eax   32 Bit     eax    edx

als 16 Bit Division:
Code:
Dim TestVar1 As UShort = 1234
Dim TestVar2 As UShort = 125
Dim RetVar1 As UShort = 0
Dim RetVar2 As UShort = 0

Asm
  mov ax, Word Ptr[TestVar1]
  mov dx, 0
  mov bx, Word Ptr[TestVar2]
  div bx
  mov Word Ptr[RetVar1], ax
  mov Word Ptr[RetVar2], dx
End Asm

? "ax: "; RetVar1
? "dx: "; RetVar2

Sleep

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
_Gorgon



Anmeldungsdatum: 04.01.2008
Beiträge: 16
Wohnort: Heidelberg

BeitragVerfasst am: 23.02.2008, 23:52    Titel: Antworten mit Zitat

dank deinem Code hab ich es jetzt herausgefunden..
Der Fehler im Programm kommt dann, wenn man zuvor dx nicht auf 0 gesetzt hat.

Das kommt wahrscheinlich daher, dass durch dx:ax geteilt wird, was ich einfach vergessen hatte.. kenn Assembler noch nicht so lang..

Ich zitiere aus dem Nasm Tutorial aus Wikibooks:
Zitat:
Da das Ergebnis nur im 16-Bit breiten AX Register gespeichert wird, kann es passieren, dass ein Überlauf stattfindet, weil das Ergebnis nicht mehr in das Register passt. [...] Wenn die CPU auf einen solchen Überlauf stößt, löst sie eine Divide Error Exception aus. Dies führt dazu, dass der Interrupt 0 aufgerufen und eine Routine des Betriebssystems ausgeführt wird. Diese gibt die Fehlermeldung "Überlauf bei Division" aus und beendet das Programm. Auch die Divison durch 0 führt zum Aufruf der Divide Error Exception.


Gruß Gorgon

PS: Da saß der BUG mal wieder vorm Rechner grinsen
_________________
Who is general failure
and why is he reading my harddisk?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz