Hallo, ich habe folgenden Programmcode: .data D equ 10 ; Teiler Zahl DW 76 ; Zahl ERG DW 0 ; Ergebnis ; ------------------------------------------------------------------------ -- .stack 16 ; ------------------------------------------------------------------------ -- .code .startup mov ax,zahl mov bx,D div bx add AL,AH and ax,00FFh add AX,30h mov ERG,AX .exit und das Problem, dass ein Stack overflow bei div bx kommt. Woher kommt dieser und wie löse ich das?
Lis mal unter DIV in der Befehlsreferenz nach, DIV BX teilt ein Doubleword (in DX,AX) durch BX Ergebniss (AX Rest in DX), DIV BL teilt ein Word aus AX durch das Byte BL und Plaziert Ergebniss in AL und Rest in AH.
Ich hätte ja jetzt div bl erwartet. Aber kannst du Teiler und Ergebnis nicht auch gleich so nennen, oder ist der Assembler (oder die Denke) noch aus der 8 Bit - Ära?
rbx schrieb: > Ich hätte ja jetzt div bl erwartet. Aber kannst du Teiler und Ergebnis > nicht auch gleich so nennen, oder ist der Assembler (oder die Denke) > noch aus der 8 Bit - Ära? Naja, DIV BL und DIV BX unterscheiden sich zwar nicht mathematisch, aber DIV BX benötigt ja zusätzlich zum AX und BX Register noch DX für das Highword des Ausgangswertes und den Rest der Division im Ergebniss, man möchte bei Word/Byte ja kein zusätzliches Word Register unnötigerweise manipulieren (bzw. vor der Div. PUSHen und danach POPen)
xor dx,dx ; clear dx, -> REST mov ax,Zahl cwd ; convert word to doubleword mov bx,D div bx mov ERG,ax mov REST,dx
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.