ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
762
762
EMPFEHLEN
-
05.02.11 09:36 #1
- Registriert seit
- Feb 2011
- Beiträge
- 33
Hallo, ich schreibe gerade an einem kleinem Betriebssystem, welches nur eine kleine Shell haben wird und einpaar kleine Funktionen. Also ich meine, es soll nichts großes werden, nur ein kleines zeilenbasiertes OS mit einpaar kleinen Befehlen. Es soll 100% in NASM geschrieben werden. Momentan habe ich den Bootloader und die Shell. Jetzt arbeite ich an meinen Befehlen. Diese Befehle werden zusammen mit den Kernel programmiert sein. also sie sind keine einzelne Programme. Als erstes möchte ich ein Befehl programmieren, welches es die BIOS Zeit Anzeigt. Also auch mit Datum. Ich habe es mal programmiert, dann den Kernel in eine .bin Datei umgewandelt und zusammen mit boot.bin in eine img Datei umgewandelt und dann es in QEMU abgespielt. Leider: Es booten ja, aber wenn ich dann den Befehl eingebe, damit es die Zeit anzeigt, kommt nur wieder die Zeilenabfrage, nur eine Zeile rüber. Was habe ich falsch gemacht? Hier der Code:
Code :1 2 3 4 5 6 7 8
... mov ah, 0x02 int 0x1a mov ah, 4h int 0x1a mov ah, 0ah jmp main ...
Ich habe auch die Funktion Zeit setzen benutzt, und erst dannach Zeit lesen. Kam auch nichts raus! Gibt es auch einen anderen Zeitbefehl in NASM?Geändert von TheComputaNerd (05.02.11 um 09:40 Uhr)
-
05.02.11 17:17 #2BassBox Tutorials.de Gastzugang
Du gibst die zeit nicht aus. Du muss nachlesen, denn int 1Ah gibt die uhrzeit nicht aus. Hiersteht dass die rückgabewerte nur in den Universalregistern sin und du die noch ausgeben musst.
Und wenn du da keine Funktion dafür hast dann guck hier nochmal nach (ausgabe Interrupt int 10h)
Und Ich denke dass du mit deinem OS nur auf commad Basis nicht weit kommst. Irgend wann wirst auch du eine GUI(Graphic User Interface) Programmieren. Mein OS hat: einen DOS-Emulator, Editor, sowas in der Art "Paint", führt binärprogramme aus und hat einen File-manager für mein eigenes Dateisystem. Nur als info am Rande wie weit man kommen kann. Ist übrigens alles mit Graphischer Oberfläche
LG
BassBoxGeändert von BassBox (05.02.11 um 17:25 Uhr)
-
05.02.11 17:51 #3
- Registriert seit
- Feb 2011
- Beiträge
- 33
Ja, ich will auch nicht weit kommen. Ich will erstmal nur ein kleines OS machen. Egal, du meinst, dass ich diese ch, cl, dh und cf Register ausgeben soll. Ich weiß, wie man ein Zeichen ausgibt! Ich habe jetzt so was programmiert, dass es mal nur die Stunden ausgibt. Beim Bild unten wirst schon den Code sehen. Die Ausgabe von Qemu: Leider keine Uhrzeit! Was aber ich denn jetzt falsch gemacht?
-
05.02.11 18:40 #4BassBox Tutorials.de Gastzugang
Komisch. Vieleicht ligts an Quem? ich arbete mit ner Diskette und nem test pc. Wenn du ein Diskettenlaufwerk hast (und vieleicht ne diskette oder ne virtuelle) kannst du meinen OS- Emulator verwenden (vorausgesetzt dein PC ist ein windows pc oder hat einen Emulator).
Der Funktioniert auf jedenfall. Habe ich selber geschrieben
Und Noch etwas: Du musst die Farbe des auzugebenden zeichen setzten (weil 0=schwartz) 15=weiß
und setzt die videoseite auf bh=0 Das könnte später sonst noch zu problemen führenGeändert von BassBox (05.02.11 um 18:51 Uhr)
-
05.02.11 19:06 #5
- Registriert seit
- Feb 2011
- Beiträge
- 33
Ich benutze Linux 10.04(nur zur Info, dein Emulator ist ja eine .exe Datei). Egal, ich habe es auf VirtualBox probiert, ging auch nicht. Was rauskam wirst im Bild sehen. Außerdem schicke ich dir die img Datei vom OS, wo es die Stunden anzeigen sollte. Probiere die mal an deinem Emulator aus! Sie ist 512 Bytes groß, also genau 1 Sektor groß.
-
05.02.11 19:21 #6
- Registriert seit
- Feb 2011
- Beiträge
- 33
Außer hier habe ich noch in anderen Computer Forums nachgefragt. Da kam einer und gab mir ein Beispiel Code, wie man Das mit der Zeit macht. Hier der Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
mov ah, 0x02 ; Funktion 02 int 0x1A ; BIOS mov ax, cs ; alle Segmentregister nach CS mov ds, ax ; (eigentlich überflüssig, da bei mov es, ax ; Start CS, DS und ES identisch sind) mov di, Zeit ; STOSB bezieht sich auf ES:DI mov al, ch ; Stunde in BCD-Format shr al, 4 ; Zehner isolieren or al, 0x30 ; in ASCII-Zeichen umwandeln stosb ; nach Zeit abspeichern mov al, ch ; Stunde in BCD-Format and al, 0x0F ; Einer isolieren or al, 0x30 ; in ASCII-Zeichen umwandeln stosb ; nach Zeit abspeichern inc di ; Doppelpunkt überspringen mov al, cl ; Minute in BCD-Format shr al, 4 ; Zehner isolieren or al, 0x30 ; in ASCII-Zeichen umwandeln stosb ; nach Zeit abspeichern mov al, cl ; Minute in BCD-Format and al, 0x0F ; Einer isolieren or al, 0x30 ; in ASCII-Zeichen umwandeln stosb ; nach Zeit abspeichern inc di ; Doppelpunkt überspringen mov al, dh ; Sekunde in BCD-Format shr al, 4 ; Zehner isolieren or al, 0x30 ; in ASCII-Zeichen umwandeln stosb ; nach Zeit abspeichern mov al, dh ; Sekunde in BCD-Format and al, 0x0F ; Einer isolieren or al, 0x30 ; in ASCII-Zeichen umwandeln stosb ; nach Zeit abspeichern mov si, Zeit ; LODSB bezieht sich auf DS:SI mov cx, strlen ; LOOP bezieht sich auf CX print_bios: lodsb ; ein Buchstabe nach AL mov ah,0x0E ; Funktion 0E int 0x10 ; VGA-BIOS loop print_bios ; CX mal mov ax, 0x4C00 ; Funktion 4C (Exit), Rückgabewert 0 (ok) int 0x21 ; MS-DOS Zeit: db "00:00:00 Uhr" strlen EQU $-Zeit
und das funktioniert! Nur das eine stunde zu früh angezeigt wird. aber es kann sein, dass in meinem bios so eine zeit angezeigt wird.
-
07.02.11 19:11 #7BassBox Tutorials.de Gastzugang
Ok. Das habe ich nicht bedacht. Mann muss die zahlen ja noch ins ASCII format umwandeln. Und das mit den Segmenten ist irgendwie selbstverständlich. Diese Funktion arbeitet halt mit String-Ausgabe
und ich hätte das einfach direkt ausgegeben. Aber so gehts natürlich auch
-
07.02.11 19:21 #8
- Registriert seit
- Feb 2011
- Beiträge
- 33
Ich habe bereits meine erste Version von meinem OS raus. Hier: http://www.lowlevel.eu/wiki/Comqos
Sag, wie es ist. PS: Ich bin 13 Jahre alt und Hochbegabt, ohne sch***.
Und ich habe den Code nicht kopiert, sondern ihn gelernt und selber geschrieben. Kein Wunder, in IT bin ich Klassenbester, hab nur 1 und bin so der Vertretungslehrer für unsere IT-Kraft, wenn sie mal jemand anderen was erklärt, soll ich an ihren Computer z.B.: Die Excel Tabelle zu ende vollbringen und dann noch erklären, wie man das und das macht, ...
Ähnliche Themen
-
NASM Syntaxprobleme
Von BassBox im Forum Sonstige SprachenAntworten: 0Letzter Beitrag: 07.12.10, 17:58 -
Karte anzeigen, nicht die Nummer?
Von Duellking im Forum PHPAntworten: 3Letzter Beitrag: 31.07.07, 12:25 -
Select, welcher die etste nicht vorhandenen Nummer zurückgibt
Von Krotty im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 19.08.04, 07:44 -
Assembler - NASM läuft nicht! Newbie braucht Hilfe
Von nepenthes im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 19.10.03, 20:28 -
Nasm-tutorial
Von akosch im Forum Sonstige SprachenAntworten: 6Letzter Beitrag: 01.05.03, 21:01





Zitieren
Login





