C++ Programm beim Hochfahren des Pc's starten

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
Hallo,

ist es möglich, ein C++ Programm bzw. ein Assembler Programm zu starten wenn ich den PC hochfahre, anstatt das Betriebssystem? Ich will so erreichen, dass das Programm die volle Rechenleistung des Computers erhält. Wenn ja - wie?

Danke schonmal,

Gruß PatrickB
 
Warum sollte das nicht möglich sein? Das Betriebssystem ist nichts anderes ... *g*

Wenn du dich nur für die Thematik interessierst, les dich mal zum Thema Bootloader ein. Aber ich hoffe du bist dir im klaren über 1-2 Dinge: Ohne OS hast du erstmal *nichts*. Keinen Zugriff auf lokale Geräte, geschweige denn auf irgendein Dateisystem.

Für den produktiven Einsatz nimm lieber Linux ... und zum Aspekt mit der Rechenleistung sag ich jetzt mal nix.
 
Die Kapazitäten der CPU (nicht vom Speicher) die das OS nutzt sollten doch eh relativ gering sein?

Was soll das Programm denn auf welcher CPU berechnen?
 
Die Kapazitäten der CPU (nicht vom Speicher) die das OS nutzt sollten doch eh relativ gering sein?

Was soll das Programm denn auf welcher CPU berechnen?

Ich wollte eigentlich erstmal etwas experimentieren auf der untersten Ebene des Computers. Zum Beispiel erstmal ein Programm laufen lassen, das 3+5 rechnet. Und dann versuchen auf die Tastatur zuzugreifen um dem Computer selbst Signale zu geben während der Laufzeit.

Ich hab zwar bis jetzt wenig Ahnung davon wie das gehen wird, aber irgendwie muss ich ja mal irgendwo anfangen.
 
3+5 sind 8. Problem gelöst? :shifty:

https://lowlevel.brainsware.org - viel Spaß beim Einlesen. Aber wie gesagt, mach dir da nicht zu große Hoffnungen.
Die ersten Versionen des Linux-Kernels sind für sowas auch ganz interessant, liegen noch auf kernel.org.
 
Ah, der Link scheint ganz interessant zu sein. Dann hab ich ja jetzt was zu tun :biggrin:

steht da auch irgendwo wie ich dann ein Assemblerprogramm beim hochfahren starten kann?

Edit: Wow, das Thema is jetzt schon in Google zu finden
 
Ohne OS hast du erstmal *nichts*. Keinen Zugriff auf lokale Geräte, geschweige denn auf irgendein Dateisystem.
Auch wenn es schon indirekt genannt wurde, möchte ich es nochmal hervorheben:
Du hast noch nicht mal ne Funktion, um was auf dem Bildschirm auszugeben oder die Tastatur abzufragen.

Is zwar "schnell" geschrieben, aber trotzdem komisch, wenn man Code schreiben muss und ihn nicht debuggen kann, weil man quasi blind is.
 
Auch wenn es schon indirekt genannt wurde, möchte ich es nochmal hervorheben:
Du hast noch nicht mal ne Funktion, um was auf dem Bildschirm auszugeben oder die Tastatur abzufragen.

Is zwar "schnell" geschrieben, aber trotzdem komisch, wenn man Code schreiben muss und ihn nicht debuggen kann, weil man quasi blind is.

Ja, aber das Programm kann ich doch vorher am PC testen?!
 
Du willst dein eigenes Betriebssystem unter einem anderen Betriebssystem testen, nur dass ich das wirklich richtig verstehe? ^^

Ich kann doch unter Windows eine Funktion in Assembler schreiben die einen Text auf dem Bildschrim ausgibt. Und wenn die funktioniert, benutzt ich die für mein Programm.

Edit: Wieso hacken gerade alle Mods auf mich ein :ugly:
 
Ich kann doch unter Windows eine Funktion in Assembler schreiben die einen Text auf dem Bildschrim ausgibt. Und wenn die funktioniert, benutzt ich die für mein Programm.

Edit: Wieso hacken gerade alle Mods auf mich ein :ugly:

Du kannst so einiges testen, aber stelle dir auch bitte die Frage ob das Verhältnis von Kosten zu Nutzen noch gegeben ist für dein kleines C-Tool.

Edit: Liegt daran, dass 2/3 Informatik studiert haben/studieren und der dritte sich auch sehr gut auf dem Gebiet auskennt *g*
 
Du kannst so einiges testen, aber stelle dir auch bitte die Frage ob das Verhältnis von Kosten zu Nutzen noch gegeben ist für dein kleines C-Tool.

Edit: Liegt daran, dass 2/3 Informatik studiert haben/studieren und der dritte sich auch sehr gut auf dem Gebiet auskennt *g*

Kosten? Zeit hab ich im Moment noch genug :mrgreen:

Jaaa, ich bin auch bald Informatiker und muss mich daher ja informieren :yes:
 
Ich kann doch unter Windows eine Funktion in Assembler schreiben die einen Text auf dem Bildschrim ausgibt. Und wenn die funktioniert, benutzt ich die für mein Programm.
Die Funktion, die du unter Windows schreibst, nutzt aber ja Elemente von Windows :LOL:
Ist Windows nicht mehr da, wird dein Programm auch nicht mehr funktionieren.

Du wirst nicht mal mehr ein printf() haben, sondern dir erst selber eines schreiben müssen. Du kannst dich nicht drauf verlassen, dass wenn du CapsLock auf der Tastatur drückst, dass dann das Lämpchen angeht und nur noch Großbuchstaben rauskommen. All das macht dein Betriebssystem und all das wird nicht mehr funktionieren, wenn du es nicht vorher erst selber programmiert hast.

Du kannst unter Windows Emulatoren verwenden, um eine "leere Maschine" zu simulieren. Aber - glaub mir, ich sprech aus Erfahrung 8) - die verhält sich auch nicht zu 100% an das Verhalten einer echten Maschine.

Bewaffne dich mit einem alten Computer, einer Diskette und dann leg los ;)
 
Oh ja, einen alten Computer haben wir. Hoffe mal der is noch nicht verstaubt - Windows 95. War bestimmt schon 2 Jahre nimmer an :ugly:

Dachte aber sowieso an Assembler, die Funktionen müssten ja alle bereitstehen.
 
Versuch Dich doch erstmal an etwas kleinerem

Hat zwar nicht all zu viel mit einem PC zu tun, aber kann und wird beim "Verstehen" helfen, ohne dabei einen PC zerschroten zu müssen. Ich habe mit das Teil mal nachgebaut, Platine gibts beim Seitenbetreiber - Kosten um die 100EUR - allerdings bringt das Teil bei mir beim Boot 'nen Memory-Error (Ausgabe über serielle Konsole). :(

Und wenn nicht dies, es gibt auch genug andere Hersteller die solche Evaluierungsboards vertreiben, und die auch mit eigenen Betriebssystemen bespielt werden müssen.
 
Für den produktiven Einsatz nimm lieber Linux ... und zum Aspekt mit der Rechenleistung sag ich jetzt mal nix.

Würde ich auch vorschlagen, Kernel-Module und alles von Linux nutzen, und dein App baust du "einfach" in das Linux rein, dann hast du kein Problem mit Treibergeschichten usw.

Aber wenn du wirklich sowas machen willst, fang mit einfacheren Dingen an, wie einem FPGA
 
Vorhin war ja mal die Frage, wie mans testen kann.
ich war damals mit Bochs recht zufrieden.
Ist vor allem beim debuggen hilfreich, weil die Registerinhalte ausgegeben werden können (gut, wird wohl jede Simu Software schaffen :ugly:)

Du kannst unter Windows Emulatoren verwenden, um eine "leere Maschine" zu simulieren. Aber - glaub mir, ich sprech aus Erfahrung - die verhält sich auch nicht zu 100% an das Verhalten einer echten Maschine.
Meine erfahrung zeigt, dass das Verhalten für simple Dinge reicht :mrgreen:

Kannst dir ja MenuettOS anschauen (komplett in ASM programmiertes OS, mit GUI) oder FDOS (ähnlich wie DOS, komplett in ASM).

Du hast noch nicht mal ne Funktion, um was auf dem Bildschirm auszugeben oder die Tastatur abzufragen.
Stimmt so eigentlich nicht.
Sofern er nicht sein eigenes BIOS benutzen will, kann er getrost die BIOS Interrupts benutzen.
Die bieten sehr wohl ausgabe Funktionen für einzelne Zeichen. Die Funktion in ne Schleife zu klatschen um Strings auszugeben, ist dann ein Kinderspiel.
genausogut kann man auf die Diskette zugreifen.
Festplatte hab ich noch nicht probiert, soll aber laut dokumentation auch möglich sein (jemand Erfahrung damit? Würd mich interessieren, war bisher zu faul das zu testen).
Auch die Tastatur ist mit BIOS Ints versorgt.
Und für nen angehenden Informatiker dürfte ein popeliger Tastatur Treiber kein Problem darstellen oder seh ich das falsch :ugly:
den hab ja sogar ich zusammengeschustert :mrgreen:
 
Zuletzt bearbeitet:
Meine erfahrung zeigt, dass das Verhalten für simple Dinge reicht :mrgreen:
Was ist "simple"? :mrgreen:
ich war damals mit Bochs recht zufrieden.
Im Vergleich zu QEMU ist Bochs die bessere Wahl. Allerdings - frag mich ned, was das war -, ist Bochs auch nicht perfekt. Irgendwas hatte damals mit dem auch ned funktioniert :think:
Die bieten sehr wohl ausgabe Funktionen für einzelne Zeichen.
Nicht nur für einzelne Zeichen. Irgendne Funktion vom INT 10h kann auch komplette Strings verarbeiten. Die Frage is nur, wie viele Zeilen Code du brauchst (AH = 13h setten, AL mit Modus setten, BX mit Display und Attribut setten, CX mit Strlen setten, DH, DL mit Zeile und Spalte setten, ES:BP auf den String, BIOS callen). Quelle.

Is doch viel bequemer, wenn man n Zeiger auf 0xB800:0000 setzt und dort einfach nur ein paar Array-Einträge ändert ;)