Ja oder Nein in ASM?



  • Hy,

    Ich möchte eine art von if(bool_wert == true);.
    Ich komme leider nicht weiter.
    Kann mir jemand sagen was hier falsch ist?:

    Begin:
    	call br
    	MOV SI, cmder			; Pointer zum String
    	call print			; Prozedur Stringausgabe
    	cmp al, '1'
    	JNE .loadfilete		
    	call wkey
    loop Begin
    .loadfilete:
    
    	mov si, trylf
    	print2:
    	cld			; Strings in Richtung hoehere Adresse auslesen
    	lodsb			; Zeichen von ds:si in al laden
    	cmp al, 0x00
    	je end_print2	; wenn Zeichenkette zuende (0), dann zum Funktionsende springen
    	mov ah, 0x0E		; Interrupt 10h Funktion Zeichen ausgeben
    	int 0x10		; Zeichen ausgeben
    	jmp print2
    	end_print2:			
    	mov al, '0'
    
    JMP NEAR Begin
    

    Die Funktion .loadfilete soll nur bedingt gestartet werden.

    Danke

    RS



  • hmmm

    cmp al, ';1'

    meinst du da nicht eher
    cmp al, '1' ???

    ';1' sind ja schliesslich zwei zeichen = 2Byte = 16bit..



  • Ja klar. Hab ich auch in meinem Code so stehen.
    Nur beim Copy & Paste hatte ich wohl einen alten Codeteil erwischt.
    Irgendwie habe ich das gefühl das nach dem Jump zum Beginn AL wieder zurückgesetzt wird.



  • Auf jeden Fall vergleichst du AL mit dem Wert '1', was dem dezimalwert 49 entspricht. Wolltest du eventuell mit 1 (also ohne ') vergleichen?



  • Bedeutet das das ich mit '' einen String vergleiche und ohne '' eine Zahl?



  • naja '1' ist ein ASCII Zeichen TriP.. shcon sagte. dessen dezimalwert ist 49 und ist der Index in der Asciitabelle.

    cmp al, '1' ist also das gleiche wie
    cmp al, 49d

    ps: mit dem d hinter der 49 bin ich mir nich sicher.. mein halt dass es dezimal ist nicht hex oder sonstwas 🙂



  • Ich danke Vielmals.


Anmelden zum Antworten