Autor Thema: Variablen Zeichenketten zuweisen  (Gelesen 4907 mal)

bscreator

  • Gast
Gespeichert
« am: 18. June 2004, 10:34 »
Hi Leute,
wie kann man unter NASM Variablen oder Segmenten zur Laufzeit Strings zuweisen ?

Mein erster Einfall war:
mov si,'Hallo'

allerdings war der nicht von Erfolg gekrönt.
Wie mach ich´s richtig?

bscreator

  • Gast
Gespeichert
« Antwort #1 am: 18. June 2004, 11:38 »
Das obige Problem ist erledigt.

Das aktuelle Problem:

Bei der unteren Funktion (CMPAS) wird ein Array mit Tastatureingaben
(Input) mit einem in SI befindlichen String verglichen. Wenn das
aktuelle Zeichen der Tastatureingabe mit dem aktuellen Zeichen
des zu vergleichenden Strings übereinstimmt, dann überprüfe nächstes
Element, sonst Ende.

...
msg_Gleich db ' =GLEICH',13,10,0
msg_Ungleich db ' =UNGLEICH',13,10,0
Eingabe db 'Hallo',0
msg_Shell db 'Input : ',0
...


;----------------------------------------------------------------
;Funktion zur Überprüfung auf Gleichheit
;----------------------------------------------------------------
CMPAS:             ;Compare Array with String
mov al,[Input+bx]  ;Aktuelles Zeichen von Tastaturarray
mov ah,[si+bx]     ;Aktuelles Zeichen von String
cmp al,ah          ;Stimmt aktuelles Zeichen von Tastaturarray mit
                   ;aktuellem Zeichen des Strings überein?
jne short Ungleich ;nein, springe zu "Ungleich"
cmp bx,0           ;Vergleich, ob Arrayende erreicht
je short Gleich    ;alle Zeichen wurden überprüft (bx=0), daher Gleich
dec bx             ;nächstes Element
jmp CMPAS          ;nächster Vergleich


;-------------Eingaben gleich---------------------
Gleich:
mov si,msg_Gleich
call WriteString

;-------------Eingaben ungleich--------------------
Ungleich:
mov si,msg_Ungleich
call WriteString

;-----------------------------
;Ausschnitt vom Hauptquellcode:

Shell:
mov si,msg_shell  
call WriteString    ;"Input :" ausgeben
mov bx,0            ;Array-Zeiger auf Anfang (für Tastaturarray)
call GetAndSet      ;Tastatureingaben
mov si,Eingabe      ;SI den String "Hallo" zuweisen
call CMPAS          ;Vergleich durchführen
mov bx,0            ;Array-Zeiger auf Anfang (für Arrayelemente initialisieren)
call ClearKeyboardBUffer ;alle Arrayelemente mit 0 initialisieren
jmp Shell
;-----------------------------

Der Vergleich funktioniert. Bei einer anderen Tastatureingabe
als Hallo (bspw. Hall) erscheint:

Input : Hall =UNGLEICH


Bei der richtigen Eingabe (Hallo) erscheint:
Input : Hallo =GLEICH
=UNGLEICH

Warum erscheint bei der richtigen Tastatureingabe unten =UNGLEICH,
obwohl doch zuerst =GLEICH erscheint ?

Gruss,bscreator

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #2 am: 18. June 2004, 12:45 »
Du springst ja zur Marke GLEICH.
Und wenn der Code darunter abgearbeitet wurde läuft er weiter und kommt unweigerlich zur Marke UNGLEICH und arbeitet den Code da auch ab :)

Musst also am Ende von GLEICH noch einen jmp setzen der wieder zur Shell hinspringt.
----------------------
Redakteur bei LowLevel

bscreator

  • Gast
Gespeichert
« Antwort #3 am: 18. June 2004, 19:30 »
Einwandfrei, danke TeeJay

 

Einloggen