Assembler: Stack overflow bei div

Gast #4735845
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?
Gast
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)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.