2016-03-29 8 views
0

Ich habe definiert num1, num2 und remainder Variablen wie DWORD. Ich bekomme 2 Nummern vom Benutzer, die num1 sind, und num2. Ich versuche, num1 durch num2 zu teilen. Die Zahlen Ich verwende sind num1 = 37 und num2 = 5Rest von DIV ist nicht in EDX

sub edx,edx ; Zero edx 
mov eax,num1 
mov ebx,num2 
div ebx 
mov remainder,edx 
mov edx, OFFSET remainder 
call WriteInt 

Aus irgendeinem Grund auf 7 druckt, die der Quotient ist, nicht der Rest. Was mache ich hier falsch?

+4

Wenn das Irvine32 ist, dann erfordert 'WriteInt', dass der zu druckende Wert in _EAX_ liegt. _EAX_ wurde auf den Quotienten gesetzt, als Ihre DIV-Anweisung ausgeführt wurde. Entfernen Sie 'mov rest, edx' ' mov edx, OFFSET Rest' und geben Sie dann den Befehl 'mov eax, edx' ein. Das würde den Rest in _EAX_ verschieben und WriteInt sollte das ausdrucken. –

+0

Deshalb verwenden wir Debugger, um Registerwerte zu betrachten. Sie hätten gesehen, dass 'edx' richtig war, und es war der Druckcode, der ein Problem hatte. –

Antwort

1

Verwenden Sie dies.

mov edx,0 ; Zero edx 
mov eax,num1 
mov ebx,num2 
div ebx  
mov eax,edx  ; EAX = reminder 
call WriteDec ; Display 2 
Verwandte Themen