Assembler ist gar nicht so schwer. Vorausgesetzt natürlich man hat es einmal verstanden. Und genau das soll dieser Artikel leisten: Verständlich machen, wie es grundsätzlich geht.
In diesem Beispiel verwende ich GNU Assembler mit der AT&T-Syntax.
Ein Programm besteht immer aus zwei Teilen: Dem data- und dem text-Bereich:
1.section .data
2# hier kommt was hin
3
4.section .text
5# hier auch
Im data-Bereich werden die Variablen definiert und im text-Bereich steht das eigentliche Programm.
Variablen
Wie jedes andere Programm braucht auch ein Assemblerprogramm (in Normalfall) Variablen. Diese werden mit Namen, Datentyp und Wert im data-Bereich definiert. Das Programm mit einer Variable sieht zum Beispiel so aus:
1.section .data
2 msg: .ascii "Ende!\r\n"
3
4.section .text
Zuerst wird der Name der Variable angegeben, in diesem Beispiel msg
. Danach folgt der Datentyp und der Wert der Variable. In diesem Fall ist es ein String, angegeben durch .ascii
.
Programmlogik
Eine Variable zu definieren ist schön, aber bringt alleine noch nicht viel. Deshalb kommt jetzt die eigentliche Programmlogik. Es gibt verschiene Befehle, die auf einer sehr niedrigen Systemebene Befehle ausführen. Eine einfache Anfangsübung ist die Textausgabe in der Konsole über stdout.
Wer jetzt mit einem einzelnen Befehl rechnet, der wird enttäuscht werden: Es braucht gleich fünf (!) davon.
1.section .data
2 msg: .ascii "Ende!\r\n"
3
4.section .text
5 movl $4, %eax # 4 = Ausgabe
6 movl $1, %ebx # 1 = stdout
7 movl $msg, %ecx # String übergeben
8 movl $7, %edx # Länge des Strings (\r = 1 | \n = 1)
9 int $0x80
Die benötigten Werte werden in die Speicher %eax
bis %edx
gelegt und dann das Betriebssystem mittels int $0x80
aufgefordert den Befehl auszuführen.
An dieser Stelle muss ich zugeben, dass ich auch noch nicht sehr viel mehr kann. Aber wer sich dafür interessiert, der dürfte bei Wikibooks weitere Informationen dazu finden.