Vì vậy, đây là mô tả nhanh về cách thực sự bao gồm mã asm ARM vào dự án Xcode, điều này được thử nghiệm trong các phiên bản Xcode lên tới 4.3. Đối với dự án cụ thể của tôi, tôi muốn xác định một hàm trong mã ASM được lưu với tên tệp như "decode_arm.s". Tôi đã có một C thực hiện các chức năng tương tự được biên dịch khi chạy theo giả lập, do đó, logic cpp có điều kiện ở đây đảm bảo rằng mã ASM ARM chỉ được biên dịch vào dự án khi thực sự biên dịch cho thiết bị.
// 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
tại sao bạn nên giới thiệu một bộ lắp ráp x86 để viết cụm ARM? – WinterMute
yeah thực sự tôi vừa mới nhận ra rằng NASM không hỗ trợ ARM, nó chỉ thực hiện x86! Tôi khá mới để lắp ráp ARM vì vậy tôi không biết một bộ ghép ARM tốt mà cũng là miễn phí, xin lỗi. –