Assembler und C OS
-
lesen: mov ah, 00h int 016h cmp al, 27 je reset ;Sprung, wenn al=27 cmp al, 13 je NewLine ;Sprung wenn al=13 ;<==hier kommts hin, wenn al weder 27 noch 13 ist. (ESC/Return) ;und was folgt da unten? richtig: das gleiche, wie wenn al=13 waere... NewLine: mov si, prompt call schreiben ;was soll das hier bewirken? ;das ZF ist beim Verlassen der Prozedur "schreiben" IMMER gesetzt. ;nun wird also nach echochar gesprungen, was aber sowieso die naechste Anweisung waere, die hier ausgefuehrt wuerde. ;=> Es ist 1. Sinnlos hier einen bedingten Sprung hinzusetzen und 2. ist das ZIEL dieses Sprungs unsinnig! je EchoChar EchoChar: mov ah, 0x0E mov bx, 0x0007 int 10h ;und was soll das hier bewirken? ;das ZF ist auch hier immer gesetzt => da wuerde es ein normaler jmp auch tun... je lesen reset: db 0Eah dw 0000h dw 0FFFFh
Sry, aber irgendwie habe ich den Eindruck, dass wir so auf keinen gruenen Zweig kommen.
Ich wuerde dir doch eher empfehlen, dass du dir erstmal ein ASM-Tutorial mit den Basics durchliest (Hallo Welt-Programme etc.) und hierbei aufpasst, dass du ausnahmslos alles richtig verstehst.
zB. Aus den Asm-FAQ => ASM TUTORIALS => unter Intel Syntax Assembler Tutorials => ab "Assembler - Einführung 1"
Die Codebeispiele nachher sind zwar fuer TASM, aber da die OpCodes die gleichen sind (die Assembler-Instruktionen sind andere!), denke ich, dass man das um die Basics zu lernen auf NASM uebertragen koennen sollte.Sollte dort etwas nicht klar sein, kannst du hier ja immernoch fragen.
(zB. falls du einen code absolut nicht uebertragen kannst)
-
TriPhoenix schrieb:
Nun, gedacht ists nur für mich bzw. es wird wohl kaum jemand nutzen sonst
Aber den Code kannste gerne angucken:
http://a.triphoenix.de/trios-pre-alpha-0.0.1.tar.bz2Hi die tar.bz2 kann mein WinZIP net entpacken, kannst du büdde eine ZIP machen? Würd mir sehr gerne deinen Memory Manager angucken
-
falsches Betriebssystem und mangelnde tools
-
lesen:
mov ah, 00h
int 016hcmp al, 27
je resetcmp al, 13
je NewLinejmp lesen
NewLine:
mov si, prompt
call schreibenEchoChar:
mov ah, 0x0E
mov bx, 0x0007
int 10h
jmp lesenreset:
db 0Eah
dw 0000h
dw 0FFFFhprompt db 13, 10, 'C:\>', 0
Sollte jetzt doch so funktionieren, oder?
Der Pc stürzt aber dann ab, sobald der Text (nachricht 1- 4)
angezeigt wird.
-
könntet ihr mir bitte helfen?
was ist hier noch falsch?
-
Hi.
Mit diesen spaerlichen Informationen ist dir einfach nicht zu helfen
Was heisst diesmal "der PC stuerzt ab"?
Dein Code ist immerhin noch kein Windows, wo ein Absturz tausend Gruende haben kann - hier ist eine genaue Beschreibung wichtig, um den Fehler schnell einzugrenzen.So sehe ich deinem Code als moegliches Manko nur an, dass der Code direkt unter dem Label "EchoChar" nur ausgefuehrt wird, wenn die Returntaste gedrueckt wurde.
-
Im Kernel steht doch ziemlich am Anfang (siehe Seite 2)
nachricht1, nachricht2, nachricht3Diese werden angezeigt, wenn das OS gestartet ist, der PC ängt sich aber dann sofort auf und macht gar nichts mehr und reagiert auch gar nicht mehr.
-
Ich habe mir die aktuellsten Versionen deines hier geposteten Codes kopiert/assembliert und werde das mal genauer unter die Lupe nehmen, sobald mein TestPC sich mal wieder einkriegt.
-
So, neue Festplatte rein - neues Programm zum "Disketten unbrauchbar machen" geschrieben und tatsaechlich noch eine Diskette gefunden, deren Sektor 1 und 2 noch intakt waren.
Da habe ich dieses "OS" draufkopiert und es lief so weit alles problemlos:
Bei ESC => Neustart und bei ENTER => Naechste Zeile und "C:\>" ausgegeben.
Auf andere Tasten wird wie bereits gesagt in der letzten Version deines Codes nicht reagiert.Hast du ausser im Code unter "lesen" wirklich sonst nirgendwo am Code veraenderungen vorgenommen?
*Wilde Vermutung* Vielleicht auch schonmal mit einer anderen Diskette probiert?
-
ja probiere es nochmal mit neuer diskette.
danke für die mühe.
-
DANKE!Hat wirklich an der Diskette gelegen!
-
wie lautet der Zahlencode für die F2-Taste?
Gibt es in Assembler eine Sleep_Funktion?
Könntet ihr mir sagen, wie das funktioniert?
DANKE!
-
Servus schrieb:
wie lautet der Zahlencode für die F2-Taste?
Die Tastaturcodes kannst du dir holen, indem du dir testhalber mal die Rueckgabewerte der BIOS-Funktion int 16h,00 ansiehst.
Habe hier mal ein entsprechendes Programm geschrieben.Servus schrieb:
Gibt es in Assembler eine Sleep_Funktion?
Nein, nicht direkt.
Im RM ist wohl die geschickteste Moeglichkeit, eine bestimmte Zeit zu warten, die Daten an Addresse 0000:046C auszulesen und zu schauen, ob sie sich aendern (Aenderung jede Sekunde 21*).
-
Danke.
Probier das Programm gleich mal aus.