Assembler - Probleme mit bedingten Sprunganweisungen

Hallo.

Ich versuch gerade ein wenig Assembler zu lernen, aber ich hab ein Problem mit der Sprunganweiung:

Code:
DOSSEG
.code
org 100h

start:

zahl1 db 15
zahl2 db 10
ergebnismul db 150
ergebnissub db 5 

mov al, zahl1
mov bh, zahl2

mul bh
mov ergebnismul, ax


cmp ax, ergebnismul 
je mul

mov dx, msg1
mov ah, 09h
int 21h

mul: 
mov dx, msg2
mov ah, 09h
int 21h


mov ah, 4ch
int 21h


msg1 dw " dieser text sollte nicht erscheinen wenn es funktioniert hat.", "$"
msg2 dw " die multiplikation hat funktioniert ergebnis ist 150 ", "$"

END

Ein sinnloses Programm aber wieso spring er nicht nach dem Vergleich des Ergebnisses auf mul hin? Ich hoffe ich hab für das Ergebniss das richtige Register benutzt. Was mach ich falsch?

Danke im Vorraus

mfg
BleedingSoul
 
Versuche mal eine andere Sprungmarke als mul zu nutzen.

Andernfalls nutze mal nur das ah oder al register für die Übergabe des Wertes von ergebnismul. ergebnismul ist ja auch nur 1 byte gross.
Du vergleichst ja praktisch ein Byte mit einem Word (AX).
Ich glaub das es daran liegt, bin aber zu faul es jetzt auszuprobieren. :)
 
Danke link.
Mit der anderen Sprungmarke hattest du recht! Ich kann es jetzt zumindest ohne Fehlermeldung assemblieren.
Gehen tuts immer noch nicht aber ich denke du hast recht und es liegt an dem Durcheinander mit den Registern.

Noch eine Frage: was ist eigentlich falsch an der Sprungmarke mul. Zu kurz? Die Groß und Kleinschreibung spielt ja beim Assembler keine Rolle.


mfg
BleedingSoul

Sorry, ich hab als ich die Frage gestellt hab nicht nachgedacht. Das Wort mul steht ja in Assembler für den Befehl des multiplizierens. Darum wird es auch nicht gehen.
 
Richtig HellKnight, aber ich hab's ja schon geschrieben das es nicht geht weil es ein Befehl ist.
Allerdings hab ich schon ein neues Problem mit den Sprünge:

Code:
DOSSEG

.code
org 100h

start:


mov dx, msg
mov ah, 09h
int 21h

mov ah, 01
int 21h

cmp dl, "a"
je sprunga
jne sprungn1

sprungn1:
cmp dl, "b"
je sprungb
jne sprungn2

sprungn2:
cmp dl, "c"
je sprungc
jne sprungn3

sprunga:

mov dx, msg1
mov ah, 09h
int 21h

mov ah,4ch
int 21h


sprungb:

mov dx, msg2
mov ah, 09
int 21h

mov ah, 4ch
int 21h

sprungc:

mov dx, msg3
mov ah, 09h
int 21h

mov ah, 4ch
int 21h

sprungn3:

mov dx, msg4
mov ah, 09
int 21h

mov ah, 4ch
int 21h



msg  db " gib ein zeichen ein ",10,13, "$"
msg1 db " das ist die meldung bei eingabe von a ",13,10, "$"
msg2 db " das ist die meldung bei eingabe von b ",13,10, "$"
msg3 db " das ist die meldung bei eingabe von c ",13,10, "$"
msg4 db " du hast weder a,b noch c eingegeben " ,13,10, "$"

END

Dieser Code müsste doch eigentlich gehen. Aber er spring immer auf " du hast weder a,b noch c eingegeben " also msg4 egal was ich eingebe, auch bei a.
Hat jemand ne Idee woran das liegt.

Danke

mfg
Bleeding
 
Hat sich erledingt, falsches Register genommen, dl statt al.
Das steht so in nem Tut.

Code:
DOSSEG
.Model small
.Stack 100h
.data
msgEingabe DB 13,10,"Bitte ein Zeichen eingeben: $"
msgWasA DB "Zeichen war ein großes A!",13,10,"$"
msgWasNotA DB "Sie haben kein großes A eingegeben!",13,10,"$"
.code
  mov ax,@data             ;.Data initialisieren
  mov ds,ax

Schleife:
  mov ah,09
  mov dx,offset msgEingabe ; String ausgeben 
  int 21h

  mov ah,01                ; Zeichen einlesen
  int 21h

  cmp dl, "A"              ; War Zeichen "A" ?
  je ZeichenWarA
  
  mov ah,09                ; Nein, daher String ausgeben ...
  mov dx,offset msgWasNotA ;
  int 21h                  ;
  jmp Schleife             ; ... und nach oben hüpfen

ZeichenWarA:               ; Ja, daher ebenfalls String ausgeben ...
  mov ah,09                ;
  mov dx,offset msgWasA    ;
  int 21h                  ;

  mov ah,4C                ; ... und Programm beenden
  int 21h
END

Ich nehme an es geht da weil er das ax Register ins Datensegment verschiebt.

Code:
.code
  mov ax,@data             ;.Data initialisieren
  mov ds,ax

Aber wozu macht er das überhaupt?

mfg
BleedingSoul
 
hi! hast du mal versucht nicht mit "a" sonder mit 'a' die eingabe abzufragen bwz. statt 'a' hierfür den hexcode abzufragen? ich denke es müsste dann gehen.
 
Zurück
Oben