运行 Mac OS X 的汇编代码

Tay*_*ton 7 macos assembly irvine32

我目前正在学习汇编课程,我必须在 Mac OS X 上运行代码,但我不知道如何在 Mac OS X 上运行代码

\n\n

这是代码:

\n\n
; Description: This program adds and subtracts 16\xe2\x80\x90bit integers.\n; Revision Date:\nINCLUDE Irvine32.inc\n.code\nmain PROC\nmov ax, 650          ; AX = 650h\nsub ax, 50h          ; AX = 600h\nsub ax, 100h         ; AX = 500h\nsub ax, 300h         ; AX = 200h\ncall DumpRegs        ; display registers\nexit\nmain ENDP\nEND main\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我收到的错误消息

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

Fra*_* C. 4

汇编代码没有运行,它是:

  1. 汇编/编译 - 根据样式和语法有一些选择。因为您已经使用了 Intel 语法,所以尝试NASM。还有一种gnu汇编程序,在以所谓的AT&T Syntax语法编写源代码时使用。参见天然气
  2. 将源代码编译为目标代码格式后,将调用链接器来解析外部引用和/或附加静态库以创建可执行文件。您可以使用链接器 [LD] 来完成此操作gnu3

以下是使用 NASM 的两步编译/链接的示例:

首先将源代码编译为目标文件。此示例是 32 位:

nasm -f macho32 -O0 helloworld.asm 
Run Code Online (Sandbox Code Playgroud)

这将生成一个helloworld.o(对象)文件。然后您需要通过链接来完成此操作:

ld helloworld.o -o helloworld
Run Code Online (Sandbox Code Playgroud)

您现在可以运行./helloworld

  • OS X 确实有一个汇编器,它称为“as”。但是,您可能必须安装 Xcode 才能获取它,并且它使用 AT&T 语法。 (3认同)
  • 如果你注意这个问题,OP 已经*有* NASM。OP的问题源于尝试使用NASM编译Windows32 MASM源,这根本不起作用。实际上 NASM 有一些 TASM 兼容性开关,因此可以通过很少的更改来编译更简单的源代码,但生成的 Linux 二进制文件只会崩溃,因为它会尝试调用不存在的 Windows 服务。也许可以在 Mac 中交叉编译以生成 Windows 可执行文件,但 OP 仍然需要 Windows(或 wine)来运行它,因此他也可以使用 MASM 安装免费的核心 Win SDK +。 (2认同)