Wo kann ich mit dem Maschinencode programmieren?

7 Antworten

Eine nette Anwendung sind Microcontroller. Du könntest dir zum Beispiel den MSP 430 von Texas Instruments relativ günstig und mit vielen Spielereien im Internet bestellen und dann lernen, Assembler effektiv anzuwenden. Natürlich programmiert man diese auch in C, aber man kommt nicht drum herum auch Assembler zu verstehen, wenn es in die Analyse von Fehlern geht. Nachteil: Du musst auch die "Prozessorarchitektur" verstehen lernen, also quasi die Liste der 8bit oder 16bit Wörter. Das ist aber nicht so schwer, wenn du das einmal verstanden hast.

Du brauchst natürlich noch eine nette "Entwicklerumgebung", mit Visual Studio von Microsoft wirst du nicht weit kommen. :)

Theoretisch kannst du damit alles programmieren. Zumindest auf dem Papier.

Aber schon alleine die Mnemonics im Assembler würden dir wohl anfänglich ziemliche Probleme bereiten.

Ein CLI ist halt deutlich leichter zu lesen und zu verstehen als ein FA oder gar ein 11111010

Im Umkehrschluss heißt das, dass du Assembler lernen solltest, wenn du Maschinencode lernen willst.

Hier mal ein einfaches Beispiel:

https://de.wikibooks.org/wiki/Maschinensprache_i8086/_Bootloader

Um die Logik hinter dem Programmcode zu verstehen schadet es aber nicht, sich mal Assembler anzusehen. Binaries hingegen brauchts nicht.

Aber da sieht man dann, welche Möglichkeiten die Programmierung bietet. Wann können Prozesse gleichzeitig abgearbeitet werden, wann nicht,...

Ich bin ja ein großer Fan von Dr. Bagley.

https://www.youtube.com/watch?v=_qvOlL8nhN4

Ganz früher haben wir mal gelernt Mikrocontroller, in Assembler zu programieren.

Der hat dann die Befehle in Maschinencode umgesetzt.

Die Kunst es, dass Du in Maschinencode z.B. alle Register usw. richtig setzen musst. Zum Teil sind von der Interrupthandling Einsprungsadressen fest vorgeschrieben usw.

Nimmst Du einen "Hochsprachencompiler" dann nimmt der einiges an Arbeit ab.

z.B. für die Atmelreihe gibt es eine schöne Entwicklerumgebung mit sehr sehr vielen Beispielen. Eine nette Sache...

Damals habe ich mich mal hingesetzt und ein Eprom für einen bekannten Mikrokontroller ausgelesen und dann versucht den Quellcode herzustellen. Dank der Software war es sehr einfach. Beim genauen Anschauen, war klar, dass es ursprünglich eine Hochsprache war. Viele "überflüssige" Befehle, die bei den Gegebenheiten nicht erforderlich sind...

Bezieht sich die Frage auf die PC Programmierung, so würde ich nicht Maschinensprache wählen. Sie hat eigentlich nur für Mikrocontroller usw. einen Sinn. Auch da setzt sich immer mehr die Hochsprache "C" durch.

Maria0298 
Fragesteller
 18.09.2018, 13:50

Okay danke!

Hab aber noch eine Frage dazu und zwar Frage ich mich, wozu es dem Binärcode dann noch gibt und ob es nicht besser wäre, diesen lesen zu können um eventuell Fehler in Maschinen selbst suchen zu können?

0
HarryHirsch4711  18.09.2018, 15:29
@Maria0298

Für uns ist der Binärcode schwer zu lesen und zu verstehen.

Nur ein Beispiel:

76 76 77 F8 F8 
Befehlsweise dargestellt
76 76
77 F8
F8
sieht auch nicht viel besser aus...

Nun für uns Menschen
MOV @R0, 76
MOV @R1, 7
MOV R0,A

Das heist, ich muss noch wissen wieviele Register hat mein Kontroller und dann kenne ich auch alle dazugehörigen Befehle. Ich muss nicht irgendwelche hexadezimalen Dinge auswendig lernen.

Gute Entwicklungsumgebungen erkennen, was gemeint ist und "verlangen" die passenden Anzahl an Parametern...

Der Code ist für einen 8051 Mikrokontroller


0

Du programmierst NIE direkt in Maschinensprache mit Binärcode.

Die niedrigste Abstraktionsebene ist Assembler und dafür musst du schon mehr als genug über CPUs und deren Funktionsweise wissen.

Assemblerprogramme kannst du wie alle anderen auch mit einem Editor oder einer IDE programmieren. Der Assembler wandelt dann die Befehle in Maschinensprache um.

Du kannst theoretisch auf Assemblerebene alles programmieren. Betriebssystemkerne, Hardwaretreiber, Systemfirmware usw.

Für normale Anwenderprogramme verwendet man heutzutage höhere Programmiersprachen, weil der Aufwand in Assembler sowie die Fehlerträchtigkeit einfach zu groß wären.

Woher ich das weiß:Berufserfahrung – Berufserfahrung
Maria0298 
Fragesteller
 18.09.2018, 10:37

Aber ist es nicht besser, wenn man den Computer versteht? Bzw wenn man weiß, was er genau meint um z.B Fehler in der Software zu finden?

0
Weizzo  18.09.2018, 11:00
@Maria0298

Lese dir nochmal bitte den Text von Ihm in Ruhe durch...
Ich muss sagen so wie ich dich einschätze in den wenigen Texten bzw. Sätzen die du geschrieben hast würde ich dir erstmal empfehlen dich allgemein mit dem "Computer" auseinander zu setzen... Bevor du auf die Idee kommst etwas in Assembler zuschreiben auf einem Gerät von deren Funktionsweise du keine Ahnung hast.

0
TheQ86  18.09.2018, 11:34
@Weizzo

Dafür musst du aber nicht den Maschinencode direkt verstehen. Meistens reicht es völlig aus sich die Fehler der Programmiersprachen-Compiler beim übersetzen anzusehen. Oder die Fehler, die auftreten während das Programm läuft.

Es wäre eine irrsinnig langwierige Aufgabe dir die 0en und 1en anzusehen und daraus schlau zu werden.

Beispiel Hallo Welt Programm.

In C:

#include <stdio.h>

int main() {
    puts("Hallo Welt!");
    return 0;
}

Hier kann man sehr einfach sehen was los ist. Du gibst sozusagen den Befehl direkt an, etwas auf dem Bildschirm auszugeben.

In Assembler:

    .section .data
s: .string "Hallo Welt!\n"

    .section .text
    .globl _start
_start:
    movl $4,%eax   
    movl $1,%ebx     
    movl $s,%ecx      
    movl $12,%edx     
    int $0x80         

    movl $1,%eax      
    movl $0,%ebx      
    int $0x80         

Hier in Assembler, weißt du schon nicht mehr auf einen Blick, was getan wird, Du manipulierst Speicheradressen, schiebst Daten in CPU Register und du bräuchtest ne ganze Ecke mehr Zeit zu verstehen, was der Assemblercode macht

Tja und jetzt in Maschinensprache? Wenn du davon ausgehst, dass jeder Befehl, jeder Buchstabe des Texts "Hallo Welt" und jede Speicheradresse in Binärform vorliegt, würde die Maschinensprache (von der Länge in etwa, nicht inhalt.ich korrekt) in Binärform so aussehen:

101100111011001110110011101100111011001110110011101100111011001110110011101
100111011001110110011101100111011001110110011101100111011001110110011101100
111011001110110011101100111011001110110011101100111011001110110011101100111
011001110110011101100111011001110110011101100111011001110110011101100111011
001110110011101100111011001110110011101100111011001110110011101100111011001
110110011101100111011001110110011101100111011001110110011101100111011001110
110011101100111011001110110011101100111011001110110011101100111011001110110
011101100111011001110110011101100111011001110110011101100111011001110110011
101100111011001110110011101100111011001110110011101100111011001110110011

Deshalb schaut man sich das eher im Hex-Editor an, der das ganze hexadezimal, aber nicht weniger kryptisch darstellt.

Und jetzt sag mir: Willst du immer noch jahrelang Maschinensprache auswerten oder ist dir ne höhere Programmiersprache lieber? ^^

3

Wo, das kannst du Dir aussuchen, wie, mit einem geeigneten Editor, was, im Prinzip alles.