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
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.
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten