9
« am: 01. August 2006, 16:31 »
MOin
ich schon wieder
ich möchte einen string in eine Variable schreiben [unbestimmte länge]
und habe mir dazu folgenden code geschreiben
[str_get ist meine funktion um den string zu erstellen]
mov ax, 1000h ; Segmentregister updaten
mov ds, ax
mov es, ax
start:
mov si, msg ; gben sie ihren namen ein:
call str_print
mov SI, thxname
call str_get
mov si, msg2 ; ihr name ist:
call str_print
mov si, thxname
call str_print
mov si, msg3 ; Press any key
call getkey
jmp restart
msg db "Bitte geben Sie ihren namen ein: ", 0
msg2 db 13, 10, "ihr name ist: ", 0
msg3 db "Press any key to reboot dein system", 0
thxname db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
; ^^ habe ich erst mal gemacht damit ich
; sicher sein kann das speicher platz für 11 Zeichen da ist
; Stringausgabe
str_print:
lodsb ; Byte laden
or al,al
jz short str_print_end ; 0-Byte? -> Ende!
mov ah,0Eh ; Funktion 0x0E
mov bx,0007h ; Atrribut-Byte
int 10h ; schreiben
jmp str_print ; n?chstes Byte
str_print_end:
retn
; Text eingabe Enter = Beenden
str_get:
mov ah, 00h ; Funktion 00h
int 16h ; Ausfüren
mov bl, 1Ch ; Enter
cmp al, bl
je short str_get_end ; Wenn Enter dann beenden
mov [DS:SI], al ; Speichere Zeichen
inc SI
mov ah, 0Eh ; Ausgabe
mov bx, 0007h
int 10h
jmp str_get ; Neustart
str_get_end: ; String mit 0 Beenden
inc SI
mov al, 00h
mov [DS:SI], al
retn
; Warte auf einen Tastendruck
getkey:
mov ah, 00h ; Funktion 0
int 16h ; Ausf?hren
ret
restart:
db 0EAh
dw 0000h
dw 0FFFFh
aber leider macht der code icht das was er soll
weil wenn ich nach der eingabe meines namens die Enter taste drücke springt der corser einfach an den anfang der zeile und läst mich die zeile einfach üeberschreiben