Moin,
da Xcode anscheinend mit Inlineassembler nicht ganz zurechtkommt, wollte
ich nochmal in reinem Assembler programmieren. Dafür habe ich zum Test
das Programm geschrieben:
1 | mov $Text1,%dx
|
2 | mov $0x09,%ah
|
3 | int $0x21
|
4 | mov $0x4C01,%ax
|
5 | int $0x21
|
6 |
|
7 | Text1: .ascii "Hallo Welt!$"
|
Das sollte meines Wissens ein einfaches x86 "Hallo Welt" Programm sein
(Zumindest wird es in die erwarteten Maschinenbefehle übersetzt).
Das kann ich so auch assemblieren, indem ich im Terminal "as as.s"
eingebe (as.s ist der Name der Datei). Das Ergebnis ist eine a.out
Datei. Diese kann ich nicht direkt ausführen. Wenn ich versuche, sie zu
starten, startet Saturn (was immer das ist) und schließt sich wieder,
anscheinend ohne, dass etwas getan wird. Oder wird mein Programm
ausgeführt und direkt wieder geschlossen, weil ich ja nur eine Ausgabe
habe?
Nach Nachforschungen über die .out Datei kam ich auf die Idee, mal mit
"ld a.out" zu linken. Da bekomme ich aber entweder den Fehler
"ld: in a.out, in section __TEXT,__text reloc 0: bad vanilla relocation
length for inferred architecture i386"
oder
"ld: could not find entry point "start" (perhaps missing crt1.o) for
inferred architecture i386"
.text, .data und .org 100 einfügen bringt nichts.
Kann mir jemand bitte erklären, wie man aus dem oben geschriebenen
Programm ein ausführbares Hallo Welt Programm erstellt? Das System ist
Mac OSX mit Intel Prozessor, also sollte der Code grundsätzlich richtig
sein. Assembliert wird ja auch ohne Probleme.
Vielen Dank