我想开始编写ARM汇编代码并在iPhone上运行。
这不是为了在应用商店发布应用程序-基本上,我想使用ARM和iPhone解决 ProjectEuler 上的问题,只是出于兴趣和教育目的。
我该如何开始?我一直没有找到一种方法来使用任何手写的ARM代码运行项目。
我想开始编写ARM汇编代码并在iPhone上运行。
这不是为了在应用商店发布应用程序-基本上,我想使用ARM和iPhone解决 ProjectEuler 上的问题,只是出于兴趣和教育目的。
我该如何开始?我一直没有找到一种方法来使用任何手写的ARM代码运行项目。
你可以使用gcc通过__asm__
来制作ASM内联代码,或者获取gnu as
用于arm编写单独的文件。你应该没有问题将它们链接到你的项目中,但我建议你使用c/Objective-C代码来包装你的asm桩,因为在汇编语言中编写整个iPhone应用程序有些困难(你需要非常了解ObjC运行时内部)。
你可能会对使用自定义Makefile感兴趣,但是Xcode项目对于大多数任务也应该足够了。
以下是如何将ARM汇编代码包含到Xcode项目中的快速说明,这在Xcode版本4.3及以下版本中经过测试。对于我的特定项目,我想定义一个以“decode_arm.s”命名的ASM代码函数。当在模拟器下运行时,我已经有了相同功能的C实现,因此这里的条件cpp逻辑确保只有在为设备编译时才会将ARM ASM代码编译到项目中。
// This file implements the following C functions for the ARM platform.
// Both ARM6 and ARM7 devices are supported by this implementation.
//
// maxvid_decode_c4_sample16()
#if defined(__arm__)
# define COMPILE_ARM 1
# if defined(__thumb__)
# define COMPILE_ARM_THUMB_ASM 1
# else
# define COMPILE_ARM_ASM 1
# endif
#endif
#if defined(COMPILE_ARM)
# define USE_GENERATED_ARM_ASM 1
#endif // COMPILE_ARM
#if defined(USE_GENERATED_ARM_ASM)
.section __TEXT,__text,regular
.section __TEXT,__textcoal_nt,coalesced
.section __TEXT,__const_coal,coalesced
.section __TEXT,__picsymbolstub4,symbol_stubs,none,16
.text
.align 2
.globl _maxvid_decode_c4_sample16
.private_extern _maxvid_decode_c4_sample16
_maxvid_decode_c4_sample16:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, uses_anonymous_args = 0
stmfd sp!, {r4, r5, r6, r7, lr}
add r7, sp, #12
stmfd sp!, {r8, r10, r11}
(ASM CODE HERE)
ldmfd sp!, {r8, r10, r11}
ldmfd sp!, {r4, r5, r6, r7, pc}
.subsections_via_symbols
#else
// No-op when USE_GENERATED_ARM_ASM is not defined
#endif