Workflow für das schreiben von ARM-Assembler-code auf dem iphone
Beginnen möchte ich schreiben, ARM-assembler und es läuft auf dem iPhone.
Dies ist nicht mit der Absicht der Verwendung in einer app veröffentlicht werden, um für die app-store - Grundsätzlich würde ich mag, um Probleme zu lösen, die auf ProjectEuler mit ARM und das iPhone, nur für den hobby-und pädagogische Zwecke.
Wie kann ich über das tun dies? Ich habe nicht in der Lage zu kommen mit ein Weg, ein Projekt am laufen mit jeder hand, die schriftliche arm.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe nicht in der Lage zu finden alle Informationen zum schreiben von Assembler-code, der speziell für das iPhone, aber wie die anderen Menschen hier gesagt, können Sie entweder:
1) schreiben Sie die inline-asm-Anweisung in C/C++/ObjC-code, oder
2) schreiben Sie standalone-Montage-Funktionen in einem".s' - Datei und fügen Sie einfach es in Ihrem XCode-Quellen, oder
3) schreiben Sie standalone-Montage-Funktionen für einen externen assembler wie NASM. Sie schreiben von Assembler-code in einer '.s' - Datei und erstellen Sie eine '.o' Objekt-Datei mit NASM und Verknüpfung der Objekt-Datei mit Ihrem Projekt in XCode.
Also, wenn Sie nur versuchen, zu schreiben, ein paar Montageanleitung dann inline-assembler wäre der einfachste Weg, aber wenn Sie plan auf das schreiben mehrere Montage-Funktionen dann würde ich empfehlen eine eigenständige assembly-Datei. Und wenn Sie planen, auf das schreiben viele Montage-Funktionen mit Makros und will die cross-Plattform-Kompatibilität, etc, dann ich würde empfehlen, mit NASM kompilieren Sie Ihren Assembler-code in ein Objekt-Datei. Weil ich bin mit dem XCode gcc assembler und es ist ganz fehlt, im Vergleich zu NASM. Sie können erhalten NASM kostenlos bei http://www.nasm.us/
Sobald Sie setup Ihre assembler-Umgebung, die Sie brauchen, um zu lernen, wie zu schreiben, ARM-Assembler-code! Weil das iPhone (und viele andere tragbare Geräte und smartphones), die mit dem ARM-Befehlssatz. Es ist eine sehr gute, aber alte intro mit ARM-Montage an http://www.coranac.com/tonc/text/asm.htm.
Wenn es um Montage-Programmierung, die offizielle instruction set reference manual ist in der Regel die wichtigste Informationsquelle für alles, was Sie schreiben, also Sie gehen sollten, um die ARM-website und laden Sie die ARM und Thumb-2 Quick-Referenz-Karte (6 Seiten lang) sowie 2 vollständige Unterlagen für Ihre CPU.
Beispielsweise das iPhone 3GS und das iPhone 4 haben beide ein ARMv7-A Cortex-A8-CPU, so können Sie die herunterladen die ARM-Architektur-Referenzhandbuch, ARMv7-A-und ARMv7-R-Edition (2000 Seiten), dass sagt Ihnen genau, welche Instruktionen verfügbar sind und wie genau Sie arbeiten, und die Cortex™-A8-Technisches Handbuch erklärt, dass die Anweisung, timing, etc für Ihre spezifischen CPU.
Können Sie gcc verwenden, um die asm-inlines mit
__asm__
oder einfach nur ein gnuas
für arm und schreiben Sie den code in separaten Dateien. Sie sollten keine Probleme mit später verknüpfen Sie bis zu Ihrem Projekt, aber ich würde vorschlagen, Sie zu verwenden, c/Objective-C-code zu wickeln Ihre asm-stubs, da schreiben die ganzen iPhone-Anwendung, die in assembler ist etwas schwer (Sie müssen ziemlich gut sein, in ObjC-runtime-Interna).Könnten Sie daran interessiert sein, mit custom Makefiles, jedoch Xcode-Projekte sollten ausreichend sein für die meisten taks zu.
Beachten Sie auch, dass es nichts falsch mit, einschließlich der Montage in der app-store-Veröffentlichungen. Es ist nur mit Rahmen, die sind nicht öffentlich, Sie Stirnrunzeln auf.
Kümmern Sie sich nicht, wie die binäre generiert wird, solange es funktioniert, sieht anständig OK, und folgt der oben genannten Regel.
So, hier ist eine kurze Beschreibung, wie Sie eigentlich gehören ARM-asm-code in ein Xcode-Projekt, das getestet wird im Xcode-Versionen bis 4.3. Für mein konkretes Projekt habe, wollte ich eine Funktion definieren, die in ASM-code gespeichert mit einem Dateinamen wie "decode_arm.s". Ich habe bereits eine C-Implementierung der selben Funktion, die kompiliert wird, wenn die Ausführung unter dem simulator, so dass die bedingte cpp Logik hier wird sichergestellt, dass die ARM-ASM-code wird nur kompiliert das Projekt, wenn tatsächlich kompilieren für das Gerät.