Argone
04.04.2005, 20:50
Hallo,
Also ich schreibe gerade ein Interrupt für mein kleines OS, jedoch funktioniert dies einfach nicht, ich versuche einen String nach es:di einzulesen doch anstatt mehrere Zeichen einzulesen startet der PC nach Eingabe eines Zeichens neu.
Ich benutze FASM 1.60
Danke schonmal im Vorraus
;String einlesen
;Input: es:di = Zieladresse, ah = 5
;Output: Bildschirm, di unverändert
funct5:
push ax
push bx
push dx
push di
mov dx,di ;für später speichern
cld;rechts->links
mov bx,7 ;attribut für die Zeichenausgabe
funct5_lp:
xor ah,ah ;Zeichen aus dem Tastaturpuffer holen bzw. warten bis eine Taste gedrückt wird
int 16h
mov ah,0eh ;Zeichenausgabe (Int 10h)
cmp al,8 ;Backspace?
je funct5_1
cmp al,0dh ;Enter?
je funct5_ret
stosb
int 10h ;Zeichen ausgeben
jmp funct5_lp
funct5_1:;backspace behandeln
cmp di,dx ;ist der cursor bereits am Anfang?
je funct5_lp ;dann mach Nichts
dec di
mov al,8
int 10h ;ausgeben
mov al,' '
int 10h ;ausgeben
mov al,8
int 10h ;ausgeben
jmp funct5_lp
funct5_ret:
mov byte [di],0 ;den String mit einem Nullbyte beenden
pop di
pop dx
pop bx
pop ax
iret ;und zurück
Also ich schreibe gerade ein Interrupt für mein kleines OS, jedoch funktioniert dies einfach nicht, ich versuche einen String nach es:di einzulesen doch anstatt mehrere Zeichen einzulesen startet der PC nach Eingabe eines Zeichens neu.
Ich benutze FASM 1.60
Danke schonmal im Vorraus
;String einlesen
;Input: es:di = Zieladresse, ah = 5
;Output: Bildschirm, di unverändert
funct5:
push ax
push bx
push dx
push di
mov dx,di ;für später speichern
cld;rechts->links
mov bx,7 ;attribut für die Zeichenausgabe
funct5_lp:
xor ah,ah ;Zeichen aus dem Tastaturpuffer holen bzw. warten bis eine Taste gedrückt wird
int 16h
mov ah,0eh ;Zeichenausgabe (Int 10h)
cmp al,8 ;Backspace?
je funct5_1
cmp al,0dh ;Enter?
je funct5_ret
stosb
int 10h ;Zeichen ausgeben
jmp funct5_lp
funct5_1:;backspace behandeln
cmp di,dx ;ist der cursor bereits am Anfang?
je funct5_lp ;dann mach Nichts
dec di
mov al,8
int 10h ;ausgeben
mov al,' '
int 10h ;ausgeben
mov al,8
int 10h ;ausgeben
jmp funct5_lp
funct5_ret:
mov byte [di],0 ;den String mit einem Nullbyte beenden
pop di
pop dx
pop bx
pop ax
iret ;und zurück