Autor Thema: Eingabe im Real Mode  (Gelesen 7123 mal)

syxce

  • Beiträge: 45
    • Profil anzeigen
Gespeichert
« am: 27. December 2005, 16:18 »
Hallo,
wenn ich im Real Mode jetzt einen Buchstaben einlese wo wird der gespeichert.
Ich habe folgendes Problem, ich möchte das wenn ein "r" eingeben wird der computer rebootet und wenn ein "n" eingegeben wird das er "hallo" ausgibt.
Ich verwende folgenden Code zum einlesen eines Buchstaben:

readchar:
mov ah, 0
int 0x16

Wo wird der nun gespeichert damit ich mit:
cmp buchstabenadresse, 'r'
ermitteln kann ob es übereinstimmt.

Danke

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 27. December 2005, 16:26 »
der buchstabe steht in al. das sollte aber auch in der dokumentation stehen, aus der du deine information hast, dass du einen buchstaben mit int 0x16 einlesen kannst. sonst empfehle ich ralf brown's interrupt list (-> google)
Dieser Text wird unter jedem Beitrag angezeigt.

syxce

  • Beiträge: 45
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 27. December 2005, 16:41 »
Ok ich hätte nun folgendes probiert:

call getkey
mov dl, 'r'
cmp al, dl
je gleich
jmp ungleich


er gibt aber nur kurz meine Eingabe aus und rebootet dann, wiso,

getkey:

getkey:
mov ah, 0
int 0x16
mov ah, 0x0e
int 0x10

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 27. December 2005, 17:22 »
Schreib am besten den ganzen Code hin; bis jetzt habe ich nichts entdeckt, was einen Neustart verursachen könnte.

syxce

  • Beiträge: 45
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 27. December 2005, 18:37 »
Jetzt bricht Bochs immer mit der Meldung "prefetch: RIP > CS.limit" ab


Gelöst

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 27. December 2005, 18:40 »
Das ret in getkey fehlt.^^

syxce

  • Beiträge: 45
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 27. December 2005, 18:42 »
Ok danke, aber jetzt gibt er beide Meldungen aus, also "Gleich" und "Ungleich" dann fordert er mich erneut zur eingabe auf und bricht dann nach der eingabe mit der Meldung "IRET: top 6 bytes of stack not within stack limits" ab  :(

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 27. December 2005, 18:50 »
Nach gleich steht kein jump oder sowas, daher wird der Code nach gleich auch ausgeführt.

syxce

  • Beiträge: 45
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 27. December 2005, 22:25 »
Danke das funktioniert jetzt.
Jedoch habe ich gleich ein weiteres Problem, nun will ich einen String einlesen und vergleichen, ich erhalte jedoch immer die Ausgabe "Ungleich", hier der Code:

mov ax, 0x1000
mov ds, ax
mov es, ax

start:
mov si, msg
call putstr

;mov si, msg1
;call putstr
;call getkey
;mov bl, 'r'
;cmp al, bl
;je gleich
;jmp ungleich

call read_str
mov dl, check
cmp dl, al
je gleich
jne ungleich


;################

msg db "Welcome to an OS Kernel",13,10,0
msg1 db "Gib etwas ein: ",13,10,0
msg2 db "Gleich",13,10,0
msg3 db "Ungleich",13,10,0
check db "Hallo",13,10,0

gleich:
mov si, msg2
call putstr

jmp $

ungleich:
mov si, msg3
call putstr

jmp $

putstr:
lodsb
or al, al
jz short putstrend
mov ah, 0x0E
mov bx, 0x0007
int 0x10
jmp putstr
putstrend:
retn

return:
ret

read_str:
mov ah,0
int 16h
cmp al,13
JE return
mov ah,0eh
int 10h
mov [bx],al
inc bx
jmp read_str

getkey:
mov ah, 0
int 0x16
mov ah, 0x0e
int 0x10
retn


times 512-($-$$) db 0

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #9 am: 28. December 2005, 02:58 »
Ich verstehe nicht warum es so viele Leute gibt die überhaupt keine Ahnung von Assembler haben, dann aber ein OS schreiben wollen. An dem Code sieht man das z.B. wieder. Da ist so gut wie alles falsch. Und das was nicht falsch ist wurde einfach kopiert. Auch wenn du unbedingt ein OS schreiben willst. Das ist ja nicht falsch. Aber du solltest dazu erstmal Assembler können. Schau mal bei www.amazon.de und dort bei der Suche Assembler Grundlagen. Dort gibt es ein schönes Buch. Auch wenn dort nicht die OS Programmierung besprochen wird, wird einem dort Assembler beigebracht. Glaub mir du bist erfolgreicher wenn du dir erst mal dieses Buch holst und ein paar Monate damit Assembler lernst. Dann bist du erst bereit dafür ein OS zu schreiben. Sorry wenn ich jetzt nicht den Code so verändere wie du es gerne hättest. Aber ich glaube das würde einfach nichts bringen. Ich würde meine Zeit verschwenden und du würdest nichts verstehen. Das kann sich ändern wenn du dir ein schönes Assembler Buch holst.

bitmaster
In the Future everyone will need OS-64!!!

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 28. December 2005, 10:55 »
Zitat von: bitmaster
Ich verstehe nicht warum es so viele Leute gibt die überhaupt keine Ahnung von Assembler haben, dann aber ein OS schreiben wollen. An dem Code sieht man das z.B. wieder. Da ist so gut wie alles falsch. Und das was nicht falsch ist wurde einfach kopiert. Auch wenn du unbedingt ein OS schreiben willst. Das ist ja nicht falsch. Aber du solltest dazu erstmal Assembler können. Schau mal bei www.amazon.de und dort bei der Suche Assembler Grundlagen. Dort gibt es ein schönes Buch. Auch wenn dort nicht die OS Programmierung besprochen wird, wird einem dort Assembler beigebracht. Glaub mir du bist erfolgreicher wenn du dir erst mal dieses Buch holst und ein paar Monate damit Assembler lernst. Dann bist du erst bereit dafür ein OS zu schreiben. Sorry wenn ich jetzt nicht den Code so verändere wie du es gerne hättest. Aber ich glaube das würde einfach nichts bringen. Ich würde meine Zeit verschwenden und du würdest nichts verstehen. Das kann sich ändern wenn du dir ein schönes Assembler Buch holst.

bitmaster


Learning by doing. Wir sind hier nicht im OS-Design, sondern im Lowlevel-Coding-Forum. Und zum Lowlevel-Coding gehört halt auch ASM-Technik. OS-dev hat ja einen gewissen Reiz, den man bei anderen Programmierbereichnen nicht so schnell findet (programmieren ist allgemein reizvoll, aber OS-dev umso mehr). Vielleicht würde der, der sein zwar klägliches OS hat und nichts von Asm versteht, wenn er sich nicht mehr direkt mit OS-dev befasst, schnell mal die Lust verlieren. Solange man sich mit den Techniken hier befasst, kann man auch die Faszination aufrechterhalten. Und jeder hat mal klein angefangen. Sogar Linus hat als erstes mit Basic programmiert.

PS. Das was bitmaster sagt, ist nicht falsch! Du hast vollkommen recht, dass gute (oder sogar tiefgreifende) ASM-Kenntnisse unentbehrlich sind!

 

Einloggen