2009-08-11 9 views
1

Okay. Ich möchte lernen, wie man Programme auf meinem Mac zusammenstellt (Anfang 2009 MBP, Intel Core 2 Duo). Bisher verstehe ich nur, dass Assembler-Sprachen aus direkten Eins-zu-Eins-Mnemonik für CPU-Anweisungen bestehen. Nach etwas Googeln habe ich viele Begriffe gesehen, hauptsächlich "x86" und "x86_64". Ich habe unter anderem auch MASM, NASM und GAS gesehen.Grundlegende Fragen zu Assembly und Macs

mich korrigieren, wenn ich falsch:

  1. x86 und x86_64 sind Befehlssätze. Wenn ich mit diesen Befehlssätzen etwas schreibe (als rohen Maschinencode), geht es mir gut, solange mein Programm auf dem Prozessor bleibt, für den es entwickelt wurde.
  2. NASM, MASM und GAS sind alle verschiedene Assembler.
  3. Es gibt verschiedene Assemblersprachen. Es gibt zum Beispiel die AT & T-Syntax und die Intel-Syntax. Die Unterstützung für diese Syntaxen ist bei Assemblern unterschiedlich. Jetzt

, Fragen:

  1. Als Mac-Benutzer, die Befehlssätze sollte ich besorgt sein?
  2. Xcode verwendet GCC. Bedeutet dies, dass es auch GAS verwendet? Wenn es GAS verwendet, sollte ich dann die AT & T Syntax lernen?
  3. Gibt es ein Buch, das ich dazu bekommen kann. Kein Tutorial, kein Referenzhandbuch im Internet. Diese Dinge nehmen zu viel von mir an; Zum Beispiel, so weit ich weiß, ist ein Register nur ein kleines bisschen Speicher auf der CPU. So wenig weiß ich wirklich.

Danke für Ihre Hilfe.

Antwort

0

Ich werde die erste Frage beantworten: Macs verwenden jetzt Intel-Chips, und moderne Prozessoren sind 64-Bit.

+0

Also muss ich x86_64? – Audacitor

+0

Ja. (Ich würde es beim Wort lassen, aber es gibt ein Minimum.) –

2

Wenn Sie Assemblersprache lernen möchten, beginnen Sie mit dem x86-Befehlssatz. Das ist das Grundset.

Ein gutes Buch zu diesem Thema ist Randall Hyde ist die Kunst der Assemblersprache, die auch auf seiner Website verfügbar ist. Er benutzt einen High-Level-Assembler, um die Dinge leichter zu verstehen und in Gang zu bringen, aber in der Tiefe benutzt er GAS.

Ich glaube nicht, dass XCode kommt mit Assembler, aber Sie können zum Beispiel finden GAS in MacPort Binutils-Paket.

Wenn Sie nur Programme auf Ihrem Mac erstellen möchten und sich nicht für das Leben aller Bits in der CPU interessieren, sind Sie mit einer höheren Programmiersprache wie Python oder Ruby besser dran.

+0

Danke für die Bereitstellung von mehr Mac-spezifischen Informationen als ich konnte. Ich möchte Ihnen sagen, dass Sie zwar Recht haben, dass ein HLL produktiver ist, aber aus den Kommentaren von Audacitor hervorgeht, dass sie noch kein grundlegendes Verständnis von ASM haben. Es ist dieses Verständnis von Maschinenarchitektur und Optimierungen, das sie schnell mit der Praxis gewinnen werden, das auch dann wertvoll ist, wenn es weit weg vom Metall programmiert wird. Kurz gesagt, ich denke, dass sie sich selbst einen großen Gefallen tun, indem sie jetzt ein bisschen ASM lernen, auch wenn sie nie erwarten, es professionell zu nutzen. –

+1

Richtig, es war nur das "Assemble-Programm" -Bit in der ursprünglichen Frage, das mich beunruhigte, was wir hier suchen. – kari

2

"Mir geht es gut, solange mein Programm auf dem Prozessor bleibt, für den es entwickelt wurde." Nicht wirklich. In vielen Fällen machen Assembler-Programme auch Annahmen über das Betriebssystem, auf dem sie ausgeführt werden (z. B. wenn sie Bibliotheksfunktionen aufrufen oder Systemaufrufe tätigen). Ansonsten sind Ihre Annahmen korrekt. Auf Fragen

:

  1. Aktuelle Macs unterstützen sowohl x86 und x86-64 (aka AMD64 aka EM64T aka Intel64). Sowohl 32-Bit- als auch 64-Bit-Binärdateien können auf neueren Systemen ausgeführt werden. Apple selbst versendet seine Bibliotheken im "fetten" (aka "universellen") Modus, d.h.Maschinencode für mehrere Architekturen.
  2. Verwenden Sie "as -v", um herauszufinden, welchen genauen Assembler Sie haben; Mine meldet als "Apple Inc Version cctools-698.1 ~ 1, GNU Assembler Version 1.38". Also ja, es ist GAS.
  3. Ja.
  4. https://stackoverflow.com/questions/4845/good-x86-assembly-book