Maschinencode programmieren

Hey!

Ich bin gerade dabei, Assembler zu lernen, und von dort aus ist der Schritt zur Maschinensprache ja wirklich nicht mehr weit. :)
Ich möchte gerne nur mit 0 und 1 programmieren, allerdings nicht in irgendeinem hexeditor, der das ganze dann nochmal speichert, sondern quasi auf unterster Ebene:
mit ein paar Nullen und Einsen dem Computer sagen, dass ich auf die Festplatte/in den Arbeitsspeicher schreiben möchte und dann ein Programm mit Nullen und Einsen schreiben dass mir z.B. einen Text ausgibt.
Ich hab schon viel zu dem Thema auf deutsch/englisch gesucht, aber keine Lösungen gefunden (egal ob für Windows oder für Linux). Das, was der Lösung bislang am nächsten kommt, ist bei Windows in der Kommandozeile "debug" einzugeben, und dann z.B. einzugeben: E100 gefolgt von Hexadezimalem Code, das Programm zu benennen mit n und es dann mit w zu schreiben.
Gibt es denn eine Möglichkeit zu verhindern, dass mein Rechner "hochfährt"/BIOS lädt/... ?

Kennt jemand von euch eine Möglichkeit, wie ich dieses ganz elementare Programmieren in Maschinensprache hinbekommen kann?

Liebe Grüße,
Christoph
 
Du kannst es normal programmieren und in einem Emulator (der Dir einen Mikroprozessor emuliert) ausführen.

so long
 
Naja, in irgeneinem Editor musst du dein Programm ja wohl eingeben.
Du kannst dir ja einen minimalen Editor selbst schreiben, der z.B. '0' und '1' von der Tastatur nimmt uns direkt binär in eine Datei schreibt.
Diese Datei kannst du dann auf den Bootsektor der Festplatte (oder einer Bootdiskette) schreiben.
Dann wird dein "Programm" statt des Betriebssystems geladen.
Das BIOS wird immer geladen, das kannst du nicht verhindern. Willst du besser auch nicht.

mfg, metax.
 
ich weiß zwar nicht, welchen Zweck du damit verfolgst, aber lesen kannst du deinen Code danach sicherlich nicht mehr.

Assembler-Code kann man schon nur verstehen, wenn Kommentare dahinter sind (außer man codet den ganzen Tag nichts anderes...)

Aber für dein Vorhaben hast du ja keinerlei Möglichkeit, irgendwas zu kommentieren... nur Nullen und Einsen....

Die wichtigsten Fragen, die du dir stellen solltest:

  • Welche Arten von Befehlen kennt der Prozessor? (Sprungbefehle, Arithmetische Operationen, etc.)
  • Wie sind die einzelnen Befehle vom OP-Code her aufgebaut? (Wieviel Bit für Befehl, wieviele für Adresse1; wieviel für Adresse2 bzw. wieviel Bit für Adresse, wieviel für feste Zahl?)

etc.

und wenn du dann am PC gleich so loslegen willst, hast du dir ganz schön hohe Ziele gesteckt... die Intel-Architektur ist doch ziemlich komplex... (wenn du dich natürlich nur auf paar einzelne ASM-Befehle konzentrierst, ist das sicherlich nicht unmöglich...)

ich würde für den Anfang einen etwas überschaubareren Prozi nehmen - z.B. nen RISC (wobei da natürlich eine etwas andere Instruktionsmenge vorliegt als bei Intel)

Wir haben z.B. dieses Semester in Microprozessortechnik einen ASURO in Assembler programmiert (Atmel Atmega8; AVR -> RISC-Familie)
 
Mit einem Emulator kann man aber zB den Stack des assembleten Programmes anschauen, während man es in Einzelschritten ablaufen lässt. Dadurch könnte man die Funktion überprüfen.

Ich selbst habe bis jetzt auch nur einen HC12 programmiert, aber die Funktion der Überprüfung war schon sehr hilfreich.

so long
 
Hallo,
ich kann die MIC3 empfehlen. Dafür gibts gute Simulatoren, bei denen man selber Mircoinstruktionen schreiben kann.

Ob man auf 1-0 Ebene runter kann, weiß ich nicht, dennoch ganz interessant anzugucken.
 
Original von Elderan
Hallo,
ich kann die MIC3 empfehlen. Dafür gibts gute Simulatoren, bei denen man selber Mircoinstruktionen schreiben kann.

Ob man auf 1-0 Ebene runter kann, weiß ich nicht, dennoch ganz interessant anzugucken.
Sollte gehen. Hatte mal (vor 2 Jahren) die ehrenvolle Aufgabe in einer Klausur
so eine 1010... Anweisung zu "entschlüsseln" und eine andere zu erstellen (gut, eine Tabelle war schon dabei ;) ). Ok, die Frage ist nur, ob man das im Emulator genauso schreiben kann - aber notfalls könnte man ja den Emulator ein bisschen anpassen ;)
 
1010 zu programmieren ist sehr großer Schwachsinn, damit wirst du niemals etwas vernuenftiges machen koennen. Selbst mit Assembler groeßere Projekte in Angriff zu nehmen ist ziemlich Sinnbefreit.
Beides ist in etwa so als ob man einen Marathon auf den Haenden laufen will. Dabei tauchen dann drei Hauptprobleme auf:
1. ist auf den Haenden "laufen" sehr schwierig
2. ist man wesentlich langsamer
3. wird man nie bis zum Ziel kommen

Wenn du schon "lowlevel" etwas machen willst, schreib Treiber/Kernelmodule.
 
Ich denke nicht das jemand der in Maschinencode programmieren will, ernsthaft vorhat damit größere Projekte in Angriff zu nehmen. Um sich näher mit dem Rechner auf Low-Level Ebene auseinanderzusetzen, ist das doch auch ein guter Weg zu verstehen, wie die Dinger funktionieren, die unseren Alltag bestimmen.

Gibt es denn eine Möglichkeit zu verhindern, dass mein Rechner "hochfährt"/BIOS lädt/... ?
Das das BIOS geladen wird, kannst du erstmal nicht ganz so leicht verhindern, du kannst aber einen Bootloader in ASM schreiben (natürlich gerne ohne Mnemonics, in Hex oder Binär), und diesen dann in den Bootsektor einer Diskette schreiben, und von dieser starten. Ist aber emfehlenswerter das erstmal in ner VM zu probieren.

mfg, loose
 
Ich muss da mal dmesg beipflichten. Bau Dir lieber ein paar Rechenwerke selber, da wirst Du wahrscheinlich mehr lernen als bei solchen Aktionen.
 
ich hab mir gerade nochmal den ersten Beitrag durchgelesen
Original von baumi10
Ich bin gerade dabei, Assembler zu lernen

also wenn du Assembler noch nicht einmal beherrschst, sondern gerade erst lernst, dann möchte ich mal behaupten, ist es tatsächlich aussichtslos, direkt in 0101 schreiben zu wollen.

Wenn du erstmal genau weißt, wie eine einfache CPU aufgebaut ist, lässt sich drüber reden...

also erstmal klein anfangen: nen 1-Bit-Voll-Addierer mit Logik-Bausteinen (NAND, NOR, AND, OR, XOR, ...) aufbauen, die Schaltung dann auf einen Typ (z.B. NAND) reduzieren, dann kaskadieren auf beispielsweise 8 Bit, ne komplette ALU draus bauen, Speicher und Register bauen, etc. - eben Stück für Stück einen kompletten simplen Prozessor designen...

Wenn du DAS kannst, dann kannst du über 1010-coden nachdenken...
 
@Keci: wenn schon denn schon, wenn ich in hex coden würde dann wäre ich nicht auf der untersten Ebene, weil irgendetwas dazwischengeschaltet ist (so simpel es auch sei), dass meinen Hexcode ins binäre umgewandelt hat.

@ll: Erstmal danke für die zahlreichen Antworten, ganzschön große Resonanz :)
Ich hab nicht vor irgendetwas Großes oder auch nur Mittleres mit 1010 zu schreiben, es geht nur um das Verständnis und ob ich es dann mit viel Zeitaufwand hinbekommen würde.
Ich will damit eigentlich versuchen, dass System zu verstehen..
Werde mir jetzt mal eure Tips zu Herzen nehmen, und mir die Möglichkeiten die mir VMs/Emulatoren/Bootdisks/[Suche nach Microcode]... geben anschauen.
Will eigentlich nur das System eines PC verstehen, vielleicht ein zwei Stufen tiefer als für Assembler nötig. Mir fehlt irgendwie die Verbindung zwischen logischen Schaltungen (Hardware) und dass meine Eingabe/mein geschriebenes Programm ausgeführt wird.

So long
 
Ein PC (wie schon erwähnt) ist imho viel zu komplex, um als Lehrmittel zu fungieren. Da wurde sooo viel altes Zeug über Generationen mitgeschleppt, dass einem schlecht wreden kann. Daher war die Idee mit MIC eigentlich die "beste". Die MIC Architektur wird gerne als "Lehrarchitektur" genutzt. Sie ist leistungsfähig genug, "richtige" Aufgaben auszuführen und noch simpel genug, um die Übersicht zu behalten. Man kann da noch manuell Opcodes aus Bits zusammenstellen und nachvollziehen, warum es funktioniert (bei Intel&Co zu aufwändig). Mein Tipp dazu: schau mal in einer größeren Bücherei nach"Computerarchitektur" von Andrew Tannenbaum. Da wird die MIC mit ihren Einzelteilen beschrieben (eine stackbasierende CPU) sowie die ganzen anderen Sachen, die Dich interessieren könnten.
 
oh ja, der tannenbaum ist wirklich gut, den hab ich bei mir auch im regal. und wie schon vorher gepostet wurde, versuche dich an der mic. das haben wir hier im studium genauso gemacht und war auch recht gut verständlich
 
@baumie01
nur so:
Wenn ich in Hex code dann bin ich auf der unterstend Ebende, denn
die Zahlen von 0-F ensprechen dann 0000-...-1111
Und Zahlen sind nun mal die natuerlichen Elemente mit dennen ein Computer arbeitet.
mfg

sw33t
 
Original von sw33tlull4by
Und Zahlen sind nun mal die natuerlichen Elemente mit dennen ein Computer arbeitet.

nö, die natürlichen Elemente sind ein HIGH-Pegel und ein LOW-Pegel :D :P (sry, den konnte ich mir jetzt nicht verkneifen)
aber im Prinzip wollte ich gerade das gleiche schreiben...

Es handelt sich beim Hexadezimal-System ja wirklich nur um eine übersichtlichere, zusammengefasste, Darstellung der Einsen und Nullen... und finde erstmal einen Binär-Editor... auch wenn sich einige Programme "Binär-Editor" / "Binary-Editor" nennen, sagt der Titel des Programms meist doch nur aus, dass man damit Binär-Dateien editieren kann, welche dann normalerweise trotzdem HEXADEZIMAL dargestellt werden (also klassischer Hex-Editor)
 
Also, ich kapiere nicht genau, warum baumi10 mit 0 und 1 "programmieren" (ist dann eher raten^^) will. Auf der HD/im Memory ist das Zeug sowieso binär (0/1) bez. (positiv/negativ geladen) gespeichert. Es wird für dich nur anders aufbereitet damit man als normal Sterblicher solche Datenhaufen erst begreifen kann.

Du spirchst mit OP-Code <---> CPU (und damit der Hardware) ein Thema an, welches mich auch sehr interessiert, vorallem weil ich es auch noch nicht so ganz geblickt habe. (Gut, ich hatte bis anhin auch noch keinerlei IT/ oder Elektrotechnische Ausbildung :( ) Gibt es da verständliche Lektüren im Netz? Muss ich mir zuerst mehr Wissen in Elektrotechnick aneigenen? Was ein Transistor ist, weis ich noch knapp^^

Wäre da froh, wenn mir jemand einen Wink in die richtige Richtung geben könnte :)
 
Was ich nicht verstehe, warum ihr alle wissen wollt wie genau die CPU arbeitet ?( Versucht doch erstmal euer Betriebssystem zu genau zu verstehen.
 
Hallo,
@90nop:
Evt. mal nach einem Skript für Technische Informatik I und II suchen, da wird soetwas behandelt.
Ansonsten wie schon erwähnt, soll der Tannebaum ganz gut sein. Auf dem Link oben zur MIC1 gibts den auch als PDF (soweit ich es gesehen habe).

Ansonsten wie gesagt, Literatur suchen (z.B. Skripts zu Vorlesungen von Technische Informatik I und II) die das Thema Rechenwerk-Entwurf enthalten.
Da wird meistens exkakt aufgezeigt, wie man seine eigene ALU baut, fängt also ganz unten mit CMOS-Schaltunen an um Logik-Gatter zu erstellen, geht zu Volladdierern mit Logik-Erweiterungen usw. und kommt dann irgendwann zu einer einfachen Rechnerstruktur, z.B. der MIC1 ;)

Ist echt interessant, dass mal nachzuvollziehen. Aber wild mit 0 und 1 zu programmieren ist sinnlos und wenig effektiv.
Hat man aber einmal den ganzen technischen Aufbau einer Rechnerarchitektur verstanden, ist es ganz lustig sich selber Assembler Befehle in Microcode zu schreiben. Diese kann man, z.B. bei der MIC1, auch direkt aus 0 und 1 zusammen setzen, denn man weiß, welches Bits des 36 Bit Wortes den C oder B Bus ansteuern, welche Bits für die ALU zuständig sind usw.

Aber gleich am eigenen Rechner was zu machen führt zu nichts, ist einfach viel zu Umfangreich und man sieht auch sehr wenig.
 
Zurück
Oben