Mac as (Assembler) Programm erstellen

Gast #2204692
Lesenswert?

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
#2205104
Lesenswert?

> Das sollte meines Wissens ein einfaches x86 "Hallo Welt" Programm sein

Dein "Wissen" ganze erinnert mich stark an das "Wissen" über 
irgendwelche "geheimen" Peek- und Poke-Befehle, welche man als sehr 
junger Mensch auf seinen C20 losgelassen hat, und dann (ohne daß man 
wußte was da passiert) plötzlich der Cursor lila wurde, oder andere 
wundersame Dinge passieren.
#2207245
Lesenswert?

Soweit ich weiss, nutzt Xcode nicht nur gcc, sondern auch clang... was 
passiert, wenn man inline assembler in llvm und dann zurück übersetzt, 
ist eine andere Frage.

Man kann auf jeden Fall explizit gcc verwenden. Die Frage ist daher 
vielleicht eher, was Du eigentlich tun willst und was nicht geht.
Persönliche Seite #2207415
Lesenswert?

Der Weg, wie die Assembleranweisungen schlussendlich in Binärform in 
eine ausführbare Datei kommen, ist recht irrelevant, wenn die 
Assembleranweisungen Code ausführen, der vom Vorhandensein eines BIOS 
ausgeht.

Ein BIOS in diesem Sinne gibt es auf dem Mac nicht, und um Ausgaben in 
ein Terminalfenster zu machen, können folglich keine BIOS-Routinen 
verwendet werden.
Stattdessen sind die üblichen Vorgehensweisen anzuwenden, die zu nutzen 
sind, wenn Assemblerprogramme für Unix geschrieben werden.
Gast #2208409
Lesenswert?

Nach Assembler in Xcode habe ich da: 
Beitrag "Xcode inline Assembler" schonmal gefragt. Nach 
vielen Versuchen und verschiedenen Fehlermeldungen läuft es immer wieder 
darauf hinaus, dass am Ende die Meldung "invalid Mnemonic 'mov' " (oder 
movl, movb, inc, incl, sin, fsin…) übrigbleibt. Nur 'nop' funktioniert 
einwandfrei ;-)

>wenn die Assembleranweisungen Code ausführen,
>der vom Vorhandensein eines BIOS ausgeht.
Wie gesagt, wusste ich nicht, dass der Interrupt das BIOS benötigt. 
Natürlich hat der Mac kein BIOS. Auf der Basis muss ich dann mal 
weitersuchen.
Danke für die Hilfe.
Gast #2211403
Lesenswert?

@Dussel wieso sollte ein Mikroprozessor irgendwelche Mimiken zur Ausgabe 
von Text eingebaut haben? Und selbst wenn, woher sollte er wissen wo der 
Text in einer Umgebung wie OS X hin soll?
Das wird uebrigens auch unter Windows so nicht funktionieren, ausser Du 
bringst die DOS/Win16-Emulation von Windows (sofern eine dabei ist - 
Windows 7 64Bit zB hat keine) mit ins Spiel indem Du als 16-Bit 
kompilierst.

Besorg Dir am besten einen Assemblerkurs der nicht von einer solchen 
Umgebung ausgeht, oder benutze in der Tat einen physikalischen oder 
virtuellen DOS-PC.  Wobei das Wissen um DOS/BIOS-Schnittstellen langsam 
aber sicher fuer allgemeine Anwendungen wertlos wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren