Servus,
ich würde mit as und ld anfangen und nicht den gcc als Frontend dafür
benutzen. Ist für den Anfang übersichtlicher, finde ich. Wobei gerade am
Anfang die Bedienung der Tools eigentlich nicht so wichtig ist, da es
dir am allgemeinen Überblick und Wissen mangeln wird, wenn du vorher
noch kein Assembler gemacht hast. Generell ist die Dokumentation im Netz
nicht besonders gut und sehr verstreut. Es programmieren halt kaum noch
Leute in Assembler – und wenn, dann wissen die ziemlich genau, was sie
tun. Bedarf an Tutorials gibt es eigentlich kaum.
Ganz wichtig ist zum Beispiel, dass du dich mit der Syntax vom
GNU-Assembler vertraut machst:
http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax. Leider hilft
einem der Rest des Wikibooks nicht so wirklich weiter.
Dann könntest du dir anschauen, wie das mit den Syscalls unter Linux
funktioniert, damit du einfache Ausgaben tätigen kannst (über
„write()
“) und vorallem das Programm sauber beenden kannst
(„_exit()
“).
Da ich auf Anhieb nicht weiß, wo das in einem „Tutorial“ auftauchen
könnte, ist hier ein HelloWorld („hello.s
“):
.data /* data section begins */
hello: /* a label called "hello" */
.string "Hello, world!\n" /* "string" directive creates a c-string */
.text /* text/code section begins */
.global _start /* makes "_start" visible to ld */
_start: /* the "_start" label followed by instructions */
movl $4, %eax /* syscall #4 is write() */
movl $1, %ebx /* 1 means stdout */
movl $hello, %ecx /* address of hello */
movl $14, %edx /* len of string */
int $0x80 /* trap: execute syscall */
movl $1, %eax /* syscall #1 is _exit() */
movl $0, %ebx /* exit status: 0 */
int $0x80 /* trap */
Übersetzen und ausführen:
$ as -o hello.o hello.s
$ ld -o hello hello.o
$ ./hello
Hello, world!
Du kannst, wenn du das willst, auch die Intel-Syntax statt der beim GAS
üblichen AT&T-Syntax benutzen. Dazu muss dein Quellcode hiermit
beginnen:
.intel_syntax noprefix
Ich würde mich auch freuen, hier von anderen Usern coole Links zu sehen,
denn meine Assembler-Linksammlung ist quasi nichtexistent. Hier sind
meine eigenen Notizen zu dem Thema:
http://www.uninformativ.de/?section=tags&which=assembler
Erinnert mich daran, dass ich mal was zur Benutzung vom gdb-Debugger
aufschreiben wollte …
Sonstiges: