如何在Xcode中使用汇编语言?X86汇编代码编译报错求助
问题根因
- 你使用的是Windows平台MASM汇编器专属的32位x86汇编语法,Xcode自带的clang/LLVM汇编器不支持
.386、.model、PROC、ENDP这类MASM专属伪指令,二者语法规则差异极大,直接编译必然触发语法报错。 - Xcode 10.1默认编译目标为64位架构,你代码中使用的32位寄存器(
eax等)在默认64位编译模式下也会触发格式报错。 - 原代码存在笔误:
rel实际应为ret(函数返回指令)。
可行解决方案
方案1:调整代码适配Xcode/macOS汇编规则
如果需要在macOS下直接运行汇编代码,可将代码修改为符合LLVM汇编器要求的格式即可正常编译运行。
如果更习惯intel风格的汇编语法,可以用以下适配代码,更贴近你原代码的书写习惯:
.intel_syntax noprefix .global _main .align 4 _main: mov eax, 213 add eax, 432 ret
如果使用AT&T语法,代码如下:
.global _main .align 4 _main: movl $213, %eax addl $432, %eax ret
编译运行步骤:
- 将代码保存为后缀为
.s的文件,例如demo.s - 打开终端,进入文件所在目录,执行编译命令:
clang -o demo demo.s - 运行生成的可执行文件:
./demo
如果需要验证计算结果,可执行echo $?查看程序退出码,对应你代码中累加的结果。
如果要在Xcode项目中运行汇编代码,可在新建项目后将上述适配后的.s文件拖入项目,直接编译运行即可。
方案2:使用MASM兼容环境运行原有代码
如果你需要沿用原学习视频的MASM语法学习,不要使用Xcode,切换为以下兼容环境即可:
- Windows平台安装Visual Studio,自带MASM汇编器,直接支持你原有的代码语法
- macOS平台可安装DOSBox+MASM模拟环境,即可运行原有的32位MASM格式汇编代码
内容的提问来源于stack exchange,提问作者Thusitha
相关产品推荐
相关产品推荐

