在Mac OS X上运行汇编代码

7

我目前在一门汇编课程中,需要在 Mac OS X 上运行代码,但是我不知道该如何在 Mac OS X 上运行代码。

以下是代码:

; Description: This program adds and subtracts 16‐bit integers.
; Revision Date:
INCLUDE Irvine32.inc
.code
main PROC
mov ax, 650          ; AX = 650h
sub ax, 50h          ; AX = 600h
sub ax, 100h         ; AX = 500h
sub ax, 300h         ; AX = 200h
call DumpRegs        ; display registers
exit
main ENDP
END main

我收到的错误信息如下:

这是我收到的错误信息

Tayvions-MacBook-Pro:~ tayvionpayton$ cd Documents/Code/
Tayvions-MacBook-Pro:Code tayvionpayton$ nasm -f macho32 -o0 assembly_Tp.asm 
assembly_Tp.asm:4: error: parser: instruction expected
assembly_Tp.asm:5: warning: label alone on a line without a colon might be in error
assembly_Tp.asm:6: error: parser: instruction expected
assembly_Tp.asm:12: warning: label alone on a line without a colon might be in error
assembly_Tp.asm:13: error: symbol `main' redefined
assembly_Tp.asm:13: error: parser: instruction expected
assembly_Tp.asm:14: error: parser: instruction expected
Tayvions-MacBook-Pro:Code tayvionpayton$ 

2
你的代码是使用_MASM_语法编写的,很可能是为了在Windows上使用。如果你正在学习并且目标平台是Windows,那么你需要在OS/X上安装虚拟机(VirtualBox、Parallels等),然后在虚拟机内设置开发环境。否则,你需要为OS/X创建特定的代码。 - Michael Petch
1个回答

4
汇编代码不会运行,它需要经过以下步骤处理:
  1. 汇编/编译 - 根据语法和风格有几种选择。如果您使用Intel语法,请尝试使用NASM。还有一种称为AT&T Syntax语法的源代码编写方式,可以使用gnu汇编器。请参阅GAS
  2. 将源代码编译成目标代码格式后,就需要调用链接器来解析外部引用和/或连接静态库以创建可执行文件。您可以使用gnu链接器[LD]进行此操作。3
以下是使用NASM进行两步编译/链接的示例:
首先将源代码编译为目标文件。以下示例为32位:
nasm -f macho32 -O0 helloworld.asm 

这将生成一个helloworld.o(目标)文件。然后,您需要通过链接来完成此过程:
ld helloworld.o -o helloworld

您现在可以使用./helloworld运行。

3
OS X 有一个汇编器,叫做 as。不过,你可能需要安装 Xcode 才能获取它,而且它使用 AT&T 语法。 - JeremyP
2
如果您关注问题,OP已经拥有NASM。 OP的问题源于尝试使用NASM编译Windows32 MASM源代码,这根本行不通。实际上,NASM具有一些TASM兼容性开关,因此可以通过少量更改编译较简单的源代码,但是生成的Linux二进制文件将会崩溃,因为它将尝试调用不存在的Windows服务。也许可以在Mac上进行交叉编译以生成Windows可执行文件,但OP仍然需要Windows(或Wine)来运行它,因此他可以安装免费的核心Win SDK +与MASM。 - Ped7g
现在我看到OP后来添加了NASM的错误信息,所以也许你在没有那个信息的情况下回答了原始问题...那么我对这个评论听起来太苛刻了,抱歉。 :) - Ped7g
@Ped7g - 是的,我在原始版本和修改版之间回答了。没有暗示他使用NASM,除非我从语法中推断出来,但这将与其他Intel风格的OS X汇编器不明确。 - Frank C.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接