masm division überlauf
Ich versuche dividieren von zwei zahlen in der Montage. Ich arbeite aus der Irvine-Montage für intel-Computern Buch und ich kann es nicht machen, die Teilung der Arbeit für das Leben von mir.
Hier ist mein code
.code
main PROC
call division
exit
main ENDP
division PROC
mov eax, 4
mov ebx, 2
div ebx
call WriteDec
ret
divison ENDP
END main
Wo WriteDec sollte schreiben, was Zahl ist in den eax-register (sollte der quotient nach der Teilung nennen). Statt jedes mal wenn ich es starten von visual studio stürzt ab (macht das Programm kompilieren, jedoch).
- Können Sie Schritt für Schritt durch es in der Visual Studio-debugger? Wie weit wollen Sie erhalten, wenn Sie Schritt in jedem Unterricht?
- Nicht behandelte Ausnahme bei 0x00401075 in Project.exe: 0xC0000095: Integer-überlauf. Passiert direkt nach dem aufrufen von div.
- Wenn Sie die Teilung durch 2 und du bist interessiert, in der Leistung, möchten Sie vielleicht zu prüfen, mit SHR.
- Wie können Sie Schritt für Schritt durch die einzelnen Montage-Anweisung mit Visual Studio-debugger? Ich habe noch nicht dachte, dieses heraus nach ein paar Google-suchen.
- Halten Sie ändern Sie den Namen des Menüpunktes und die shortcut-Taste, um dorthin zu gelangen. Suchen Sie nach etwas wie "Ansicht " Demontage". Es ist eine Sicht, mit einem register-Fenster, ein Speicher-Fenster, stack viewer, Demontage, etc. Für VS 2012 hier sind die Anweisungen: msdn.microsoft.com/en-us/library/a3cwf295.aspx
- Gleichwertig sind Anweisungen für VS 2010?
- Sicherlich finden Sie unter google.com/search?q=vs+2010+Demontage
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie null erweitern Sie Ihre EDX-register vor der division:
den
;set edx to zero
ist ein Kommentar in MASM. Ich weiß nicht, ob es wird funktionieren, wenn Sie mit inline Assembler in C, also nicht kopieren, wenn Sie sind 🙂Ja, müssen Sie
edx
auf null.Der einfachste Weg, dies zu tun ist:
ich denke, der oben genannten Gründe ist richtig, da wenn u unterteilen von eax ebx beide sind 32-bit zahlen, aber die Dividende muss 64-bit-divisor ist 32 bit, und so ist es der Auffassung, edx als msb...u machen edx-0 oder anstatt 3bx verwenden Sie nur bx..so u teilen sich eine 32bit-Zahl durch eine 16-bit-Zahl