Überlauf der Division

8

Ich versuche, zwei Zahlen in Assembly zu teilen. Ich arbeite aus der Irvine Versammlung für Intel Computer Buch aus und ich kann Division Arbeit für das Leben von mir nicht machen.

Hier ist mein Code

%Vor%

Wobei WriteDec schreiben sollte, welche Zahl sich im eax Register befindet (sollte nach dem Divisionsaufruf auf den Quotienten gesetzt werden). Stattdessen stürzt Visual Studio bei jedem Programmabsturz ab (das Programm kompiliert jedoch).

    
Help I'm in college 13.02.2010, 00:21
quelle

3 Antworten

14

Sie müssen Ihr EDX-Register vor der Division auf Null setzen:

%Vor%

Der ;set edx to zero ist ein Kommentar in MASM. Ich weiß nicht, ob es funktioniert, wenn Sie Inline-Assembly in C verwenden, also kopieren Sie es nicht, wenn Sie:)

    
slugster 13.02.2010, 00:28
quelle
4

Ja, Sie müssen edx auf Null setzen.

Der einfachste Weg dies zu tun ist:

%Vor%     
Pianodervish 22.05.2010 01:20
quelle
0

Ich denke, der oben genannte Grund ist richtig, denn wenn du eax durch ebx dividierst, sind beide 32-Bit-Zahlen, aber der Dividend muss 64-Bit-Teiler 32 Bit sein und so betrachtet er edx als das msb ... du kannst edx machen 0 oder anstatt 3bx zu verwenden, benutze nur bx .. auf diese Weise teilst du eine 32-Bit-Nummer durch eine 16-Bit-Nummer

    
ruchir patwa 01.03.2010 12:58
quelle

Tags und Links