mf_2
2004-04-10, 17:45:26
Hallo,
ich hab ein Problem.
Ich löse den Interrupt 16h mit der Funktion 00h aus.
Dann soll der ASCII-Rückgabewert mit 55h ( Code für ein "u" )verglichen werden. Wenn der Wert gleich u ist soll im programm fortgefahren werden, wenn nicht soll zum anfang zurückgesprungen werden. allerdings reagiert der pc auf garnichts mehr, nachdem er den kernel geladen hat.
ich kann ihn dann nur mit strg+alt+entf neustarten.
die routine fürs auslesen des zeichens im tastaturpuffer und ggf. auf ein neues zeichen warten heisst lesen, die routine, die ausgeführt werden soll, wenn ein u gedrückt wurde, heisst reset.
hier der quelltext:
-------------------------START-----------------
mov ax, 1000h
mov ds, ax
mov es, ax
start:
mov si, nachricht
call schreiben
call lesen
jmp reset
nachricht db "Eine Taste druecken, um neu zu starten...",13,10,0
zahl db 55h
schreiben:
lodsb
or al, al
jz short schreiben_d
mov ah, 0x0E
mov bx, 0x0007
int 0x10
jmp schreiben
schreiben_d:
retn
lesen:
mov ah, 0
int 016h
cmp al,55h
jne lesen
ret
reset:
db 0Eah
dw 0000h
dw 0FFFFh
------------------------ENDE----------
p.s. wenn ich die zeilen
cmp al,55h
jne lesen
rauslasse, geht das script perfekt.
ich hab das aus nem asm-tutorial und wollte damit meine ersten eigenen gehversuche in assembler wagen.
könnt ihr mir weiterhelfen?
ich hab ein Problem.
Ich löse den Interrupt 16h mit der Funktion 00h aus.
Dann soll der ASCII-Rückgabewert mit 55h ( Code für ein "u" )verglichen werden. Wenn der Wert gleich u ist soll im programm fortgefahren werden, wenn nicht soll zum anfang zurückgesprungen werden. allerdings reagiert der pc auf garnichts mehr, nachdem er den kernel geladen hat.
ich kann ihn dann nur mit strg+alt+entf neustarten.
die routine fürs auslesen des zeichens im tastaturpuffer und ggf. auf ein neues zeichen warten heisst lesen, die routine, die ausgeführt werden soll, wenn ein u gedrückt wurde, heisst reset.
hier der quelltext:
-------------------------START-----------------
mov ax, 1000h
mov ds, ax
mov es, ax
start:
mov si, nachricht
call schreiben
call lesen
jmp reset
nachricht db "Eine Taste druecken, um neu zu starten...",13,10,0
zahl db 55h
schreiben:
lodsb
or al, al
jz short schreiben_d
mov ah, 0x0E
mov bx, 0x0007
int 0x10
jmp schreiben
schreiben_d:
retn
lesen:
mov ah, 0
int 016h
cmp al,55h
jne lesen
ret
reset:
db 0Eah
dw 0000h
dw 0FFFFh
------------------------ENDE----------
p.s. wenn ich die zeilen
cmp al,55h
jne lesen
rauslasse, geht das script perfekt.
ich hab das aus nem asm-tutorial und wollte damit meine ersten eigenen gehversuche in assembler wagen.
könnt ihr mir weiterhelfen?