Zahlen vergleichen
-
Hi,
gibt es einen Assemblerbefehl zum vergleichen von zwei Zahlen (50h < 68h)?
Danke für eure Hilfe.
-
Hi.
[Irronie]
Nein, so etwas gibt es nicht, das geht nur in Hochsprachen. :p
[/Irronie]Der OpCode "cmp" fuer compare sollte wohl das erlegiden, was du suchst.
Hiermit werden erstmal 2 Werte miteinadner verglichen und die Flags entsprechend gesetzt.
Folgende Operandenkombinationen sind moeglich:
cmp reg, [mem]
cmp reg, immediate
cmp reg, reg
Dh. du kannst keine zwei Speichereintraege oder direkt angegebene Zahlen miteinander vergleichen.Dazu gibt es dann noch eine ganze Batterie von bedingten Spruengen, wie zB. je (jump if equal) und jb/ja fuer jump if below/above.
Das ganze kann wahlweise noch mit einem "n" kombiniert werden, also zB. "jne => jump if not equal.Zum besseren Verstaendnis kann ich dazu noch die FAQ empfehlen:
C/C++ Forum :: FAQ - Assembler :: ASM TUTORIALS
-
Hi,
ich habe folgendes Beispiel programmiert:
Segm SEGMENT ASSUME CS:Segm,DS:Segm,SS:Stackseg Ausgabe: mov ax,Segm mov ds,ax mov ah,01 int 21h cmp al,5h jc KLEIN jnc GROSS KLEIN: mov dx,OFFSET K mov ah,9 int 21h mov ah,4Ch int 21h GROSS: mov dx,OFFSET G mov ah,9 int 21h mov ah,4Ch int 21h ;************************ Zeichenketten ******************************** ; K: DB 'kleiner','$' G: DB 'größer','$' ; Segm ENDS ; Stackseg SEGMENT STACK 'Stack' Stackseg ENDS ; END
Das Programm soll prüfen, ob die Eingabe kleiner oder größer als 5 ist. Leider gibt es nicht das richtige Ergebnis aus. Wo liegt mein Fehler?
Die Ausgabe lautet stets "größer".
-
Die Funktion 01h gibt einen char in al zurueck (ASCII-Code).
05h waere das Zeichen "".
Wenn du nun zB. "4" eingibst, wird in al also 34h zurueckgeliefert.Damit dein Programm funktioniert, muesstest du folglich erstmal pruefen, ob ueberhaupt eine Dezimalziffer eingegeben wurde (ASCII 30h bis 39h) und dann 30h von al abziehen um den tatsaechlichen Zahlwert zu erhalten.
Vielleicht dazu auch nochmal eine ASCII-Tabelle beaeugen...
-
@Nobuo T
Danke für deinen Hinweis. Er hat mir wirklich weitergeholfen.