Hallo,
hab ein kleines Programm geschrieben, das Tastatureingaben mit dem String "exit" vergleicht. Das Programm soll erst beendet werden, wenn "exit" eingegeben wurde.
Problem :
Es erscheint zwar "Press any key to continue..." (Programm beendet) aber der vorherige String msg ("richtige Eingabe") wird nicht ausgegeben.
Finde leider keinen Fehler, wisst ihr wo der Fehler liegt ?
Hier der komplette Source:
BITS 16
ORG 0x0100
jmp start
command db 0
msg db 10,'richtige Eingabe',13,10,0
com_end db 'exit',0
start:
call input
lea si,[com_end] ;Lade "exit" in DS:SI
call compare ;Vergleiche Tastatureingabe mit "exit"
cmp al,1 ;AL=1 ?
je exit_func ;falls ja, springe zu Funktion exit_func
jmp start
;*************************************
;Funktion für Tastenein- und -ausgaben
;*************************************
input:
xor di,di
input_loop:
mov ah,0x00 ;Funktion Tastatureingabe
int 0x16
cmp al,0x0D ;Carriage-Return ?
je input_end ;Falls ja, Ende
mov [command+di],al ;Zeichen in command schreiben
mov ah,0x0E
mov bx,0x0007
int 0x10
inc di ;nächstes Byte von command
jmp input_loop
input_end:
mov al,0
mov [command+di],al ;0 ans Stringende hängen
ret
;***************************************
;***************************************
;Funktion zum Vergleichen zweier Strings
;***************************************
compare:
xor di,di ;DI=0
compare_loop:
lodsb ;Lade Byte von String com_end
mov ah,[command+di] ;Lade Byte von command
cmp ah,al ;Buchstaben gleich ?
jne compare_false ;falls nein, Ende
cmp al,0 ;Byte = 0
je compare_true ;falls ja -> Stringende erreicht -> Strings gleich
inc di ;nächstes Byte in command auswählen
jmp compare_loop
compare_true:
mov al,1
ret
compare_false:
mov al,0
ret
;***************************************
;***************************************
;Funktion zum Ausgeben eines Strings
;(dieselbe wie in lowlevel, Ausgabe 1)
;***************************************
print_string:
lodsb
or al,al
jz print_string_end
mov ah,0x0E
mov bx,0x0007
int 0x10
jmp print_string
print_string_end:
ret
;***************************************
;***************************************
;Funktion exit_func
;***************************************
exit_func:
mov si,msg
call print_string
retf
;***************************************
Vielen Dank,
bsc