PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 8086 Assembler: Kernelproblem mit CMP


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?

Gnafoo
2004-04-10, 19:49:58
kenn mich nicht genau aus, aber vielleicht hilft dir das ja weiter:

http://cs.smith.edu/~thiebaut/ArtOfAssembly/CH13/CH13-3.html#HEADING3-87

sieht aber meiner Meinung von Prinzip genauso aus wie bei dir.
Allerdings vergleichst mit 55h und das ist ein großes U. Vielleicht liegt es ja daran, dass du entweder mit shift ein großes U schreiben musst, oder 75h für ein kleines u nehmen musst. (hatte sowas schonmal :D)

cu DerTod

mf_2
2004-04-10, 21:55:16
Thx, jetzt funzt es!