Womit schreibt man eine Maschinensprache?

7 Antworten

Als Verständnisübung könntest du dir eine eigene kleine virtuelle Maschine in einer Programmiersprache deiner Wahl schreiben. Das ist wesentlich einfacher, als es erst mal klingt, also verwechsel den Begriff "virtuelle Maschine" jetzt nicht mit riesigen Softwarepaketen wie VirtualBox oder VmWare oder so.

Eine einfache VM in C geschrieben passt auf eine einzige Bildschirmseite. Eine recht leistungsfähige VM in C++ mit Stacks, Registern, uvm. passt auf drei bis vier Bildschirm- oder A4-Seiten. Mit letzterem kann man dann schon richtig komplexe Dinge tun, wie eine Skriptsprache für Spiele entwickeln, einen vergleichsweise schwer zu knackenden Kopierschutz implementieren, usw.

Falls du keine Kenntnisse in Low-Level-Sprachen wie C, C++, Pascal oder offensichtlich gar Assembler hast, kannst du eine VM sogar in Skriptsprachen wie Python, Ruby, Perl oder PHP schreiben, aber auch mit Sprachen in gemanageten Umgebungen lässt sich so etwas realisieren: Java, Kotlin, C#, VB.net, etc.

Wenn du also mal grundlegend verstanden hast, was Assembler bedeutet, und eine kleine VM gebaut hast, dürften keine Fragen mehr offen sein. Mach dich aber nicht verrückt, wenn das alles beim ersten Versuch nicht so klappt, wie du dir das vorstellst! Jeder fängt mal klein an, und selbst eine einfache VM erfordern einiges an programmiertechn. Verständnis.

Viel Erfolg! :)

Woher ich das weiß:Berufserfahrung

Natürlich kannst du auch auf einem modernen Laptop Maschinensprache verwenden. Ein Windows Programm besteht in der Regel aus Maschinencode. Dieser Code wurde von einem Compiler erzeugt. https://de.wikipedia.org/wiki/Compiler

Du kannst Maschinencode auch per Hand eintippen. Das wäre aber sehr mühsam und würde viel zu lange dauern.

Bei ganz alten Computern hat man den Code auf Lochkarten gestanzt und die dann eingelesen.

paulkbt 
Fragesteller
 18.08.2019, 01:10

Aber auf einem mordernen Laptop könnte man eine Maschinensprache nur mit Hilfte einer Software schreiben können.

Meine Frage ist eher, ob es ein System gibt mit dem man manuell ohne Software einzelne Transistoren im Prozessor an und auschalten kann.

Das erste Computerprogramm wurde schliesslich ohne Software geschrieben.

0
Spiderpig42  18.08.2019, 01:12
@paulkbt

Nein, die wurden per Lochkartenlesegerät in den RAM geladen. Man hat dort nicht einzelne Transistoren per Hand an und ausgeschaltet.

2
Spiderpig42  18.08.2019, 01:18
@paulkbt

In diesem Video sieht man einen Altair 8800 Computer, bei dem per Lochstreifen Maschinencode in den RAM geladen und dann gestartet wird. Darauf hin druckt der Computer dann eine Meldung auf dem Drucker aus. So in der Art funktionierte das auch bei Computern aus den 40ern und 50ern. https://www.youtube.com/watch?v=qv5b1Xowxdk

0
Spiderpig42  18.08.2019, 01:22
@paulkbt

In dem Video sieht man übrigens auch, dass die ersten paar Bytes des Maschinencodes per Hand eingegeben werden mussten, indem man mehrere Schalter umgelegt hat. Der Rest wurde dann vom Lochstreifen gelesen.

0

Das mit der Maschinensprache ist eigentlich nicht allzu kompliziert. Die „einfachen“ Komponenten sind fest verdrahtete Schaltungen, die Maschinensprache besteht aus Instruktionen die dann von diesen fest verdrahteten Schaltungen ausgeführt werden

Beispiele für ganz einfache Schaltungen wären sowas wie

  • AND
  • OR
  • NOT
  • NAND
  • NOR
  • XOR
  • Multiplexer, Demultiplexer, Addierer

Also Beispiele für Maschinensprachen-Code wären:

  • Lade den Wert aus Speicheradresse XYZ
  • Lade den Wert aus Adresse ABC
  • Addiere die beiden zuletzt geladenen Werte
  • Schreibe das Ergebnis der Addition an Speicheradresse ZZZ

Basierend darauf kann man dann Compiler für „höhere“ Sprachen entwickeln

Wenn man Windows 10 neu entwickeln müsste bräuchte man bei entsprechender Entwicklerkapazität sicher mal fünf Jahre, wenn es hier in D umgesetzt würde wahrscheinlich 25 Jahre und ein paar Billionen Euro 🙈

paulkbt 
Fragesteller
 18.08.2019, 01:04

Also gibt es heute solche "Schaltungen" für Maschinenschreiben, sprich Systeme zu kaufen?

2
buffalo23  18.08.2019, 01:08
@paulkbt

Was genau meinst du? Eine CPU kannst du fertig kaufen, ansonsten kannst du natürlich die einzelnen Komponenten bspw. AND, OR, Addierer, etc. auch einzeln kaufen und verdrahten... Die musst du dann mit einem Takt versehen, an einen Speicher anbinden, Ultra simple Eingabe-/Ausgabe-Komponenten für die Interaktion/Programmierung, etc. -

oder willst du nur in Maschinensprache programmieren?

2
LeBonyt  18.08.2019, 01:12
@paulkbt

Ja diese Schalttungen findest du heute in jedem BIOS eines PCs. Das ein Chip, der Anweisungen enthält wie er mit der Hardware des Computers umgehen soll und das Betriebssystem lädt.

1
paulkbt 
Fragesteller
 18.08.2019, 01:15
@buffalo23

Ich selber will keine Maschinensprache programmieren. Mich interessiert nur, wie so ein System aussehen würde. Also ein Interface mit dem man manuell einen Prozessor schalten kann. Und ob solche einfachen Systeme heute noch gebaut werden. Denn eigt braucht man diese Systeme heute nicht mehr.

0
buffalo23  18.08.2019, 01:18
@paulkbt

Die wurden noch nie Instruktion per Instruktion von Hand geschaltet, die schalten mehrere Milliarden mal pro Sekunde durch. Die laufen immer mit einem vorgegebenen Programm

Das grundlegendste System wäre da wirklich eine Lochkarte, das Ausführen der Befehle auf der Lochkarte ist wiederum physisch verdrahtet. Mit einer Lochkarte kannst du allerdings wirklich einzelne Instruktionen ausführen

2

Werden heute noch Lochkarten Stanzen mit entsprechender Anbindung an einem Prozessor und einfache Eingabe/ Ausgabe-Geräte industriell hergestellt?

Und gibt es heute Menschen, die damit einen Compiler schreiben können?

Das ist ein sehr umfassendes Thema... Von mir nur eine kurze Antwort:

Maschinensprache ist ein binärer Code. Dieser ist für jede Prozessorarchitektur (z.B. Intel/AMD wie im PC oder ARM wie in Smartphones) anders. Aber da gibt es Tabellen.

Ein Befehl wie: "Addiere R1 und R2, Schreibe Ergebnis in R3" wird dann zum Beispiel zu dem Binärcode: (ausgedachte Codierung)

0011000100100011

0011 => Befehl Addieren

0001 => 1. Operand

0010 => 2.Operand

0011 => 3. Operand

Man denkt sich also ein Programm aus, z.B. R3=R1+R2 und übersetzt das dann Stückweise in so einen Binärcode.

Das Problem ist, den Code in den Computer hereinzubekommen. Ich würde vermuten, dass das bei modernen Computern tatsächlich nicht mehr geht. Allerdings habe ich mal ein Projekt im Internet gesehen, wo das jemand für einen einfachen Mikrocontroller (quasi Mini-Mini-Computer) gemacht hat... Dort wird das Programm geladen, in dem es eine Taktleitung und eine Datenleitung gibt. Immer wenn die Taktleitung von 0V auf 5V wechselt, wird geschaut, ob auf der Datenleitung 5V anliegen (1) oder 0V (0). Derjenige hat also 2 Schalter gebraucht, die er abwechselnd bedient hat.

Deine Frage erwähnt aber noch ein anderes Problem. Computer können nur Maschinenbefehle ausführen, zur Vereinfachung hat man Programmiersprachen entwickelt... Diese setzen die Programmierbefehle in Maschinenbefehle um. (Das Programm nennt man Compiler) Natürlich programmiert man den Compiler auch in einer Programmiersprache - und nicht mit Maschinencode. Das heißt aber - seit wirklich mal der erste Compiler in Maschinencode geschrieben wurde gibt es eine Abhängigkeitskette... Ich habe nur mal gehört, dass sich ein Professor genau mit dieser Abhängigkeitskette beschäftigt hat. - Was genau, weiß ich aber nicht.

paulkbt 
Fragesteller
 18.08.2019, 01:30

Ja auf diese Abhängigkeitskette, die du erwähnst wollte ich hinaus. Deswegen auch der Vergleich mit der Metallverarbeitung. Wären alle Metallwerkzeuge von heute auf Morgen weg, dann hätten wir ein grosses Problem und müssten alles von neu beginnen.

Daher auch die Überlegung, ob man heute Maschinencodes für Compiler noch schreibt und aufbewahrt.

0
kmkcl  18.08.2019, 01:41
@paulkbt

Man muss den Maschinencode ja nicht selbst schreiben, sondern er wird ja automatisch hergestellt. Verglichen mit dem Werkzeug: Die Gießform wird gefräßt, also keine Notwendigkeit sie per Hand zu bauen.

Man müsste ihn für dein Szenario auf Papier aufheben, bzw. Möglichkeiten schaffen, um das Programm in den Computer zu laden... Professionell wird sich damit keiner beschäftigen, aber im Hobby-Bereich gibt es alles - selbstgebaute CPUs bzw. ganze Rechner, eigene Programmiersprachen, eigene Eingabe-Möglichkeiten. Vieles an Wissen ist auch noch in Papierform da. Ich fand es auch spannend mal in Büchern aus den 50er Jahren zu lesen, wie Computer funktionieren, oder ganz einfache Computer mit 4 Relais und Mechanik aufgebaut werden können.

Abgesehen davon bin ich der Meinung, dass eine moderne komplexe CPU wie von Intel/AMD kein einzelner Mensch im Detail mehr versteht. Zum Teil werden die Befehle nicht in der richtigen Reihenfolge ausgeführt, sondern irgendwie - und das Ergebnis am Schluss korrigiert, etc...

2