跳转到内容

x86 汇编/x86 汇编器

来自 Wikibooks,开放的书籍,为开放的世界

有许多不同的汇编器可用于 x86 架构。此页面将列出其中一些,并将讨论从何处获取这些汇编器、它们适合什么以及它们最常在哪里使用。

GNU 汇编器最常见的是 GCC 编译器的汇编后端。学习 GAS(因为它经常被缩写)编程最令人信服的理由之一是编写内联汇编指令(嵌入在 C 源代码中的汇编代码),因为这些指令(当由 gcc 编译时)需要采用 GAS 语法。GAS 使用 AT&T 语法编写汇编语言,有些人认为它更复杂,但另一些人则认为它提供更多信息。

注意:最近版本的 GCC 包括“-masm”选项,当设置为“-masm=intel”时,允许用户使用 Intel 语法定义内联汇编。GAS 的等效选项是“-msyntax=intel”或使用“.intel_syntax”指令。

Microsoft 的宏汇编器 MASM 已经持续生产多年。许多人声称 MASM 不再得到支持或改进,但 Microsoft 否认了这一点:MASM 仍在维护,但目前处于修复错误模式。目前没有添加新功能。但是,Microsoft 正在与其新的 64 位编译器套件一起发布 64 位版本的 MASM。MASM 可从 Microsoft 获取,作为 Visual C++ 的一部分,从 MSDN 下载,或作为 Microsoft DDK 的一部分。最新版本的 MASM 是 11.x 版(参考:www.masm32.com)。

MASM 使用 Intel 语法编写指令,这与 GAS 汇编器使用的 AT&T 语法形成鲜明对比。最值得注意的是,MASM 指令采用与 GAS 相反的顺序接收其操作数。这也许是人们试图在两个汇编器之间转换时遇到的最大障碍。

MASM 还拥有一个非常强大的宏引擎,许多程序员使用它在 MASM 程序中实现高级的感觉。

[编辑 | 编辑源代码]

JWASM 是一个 16 位、32 位和 64 位的 80x86 平台汇编器,基于 Open Watcom 的 WASM,由 Japheth 创建。

虽然在语法上与 MASM 兼容,但它更快,并且它的源代码在 Sybase Open Watcom 公共许可证下免费提供,因此它可以免费用于商业和非商业用途。此外,它支持 ELF,因此它是唯一支持流行 MASM 语法的跨平台汇编器。JWASM 正在积极开发中,通常被认为是 MASM 的非官方继任者。

[编辑 | 编辑源代码]

[失效链接]

Netwide 汇编器 NASM 最初是一个开源项目,旨在为 80x86 平台创建一个免费的、可重新定位的汇编器。当 NASM 项目启动时,MASM 仍在由 Microsoft 出售(MASM 目前是免费的),而 GAS 几乎没有错误检查功能。毕竟,GAS 是 GCC 的后端,而 GCC 始终向 GAS 提供语法正确的代码。因此,GAS 不需要与用户交互太多,因此编写 GAS 代码非常困难。

NASM 使用与“Intel 类似但不太复杂”的语法。

NASM 用户手册位于 http://www.nasm.us/doc/

特征

  • 跨平台:与 Gas 一样,这个汇编器在几乎所有平台上运行,据说甚至在 PowerPC Mac 上运行(尽管生成的代码只会在 x86 平台上运行)
  • 开源
  • 宏语言(编写代码的代码)

虽然它是用汇编编写的,但它在几个操作系统上运行,包括 DOS、DexOS、Linux、Windows 和 BSD。它的语法类似于 TASM 的“理想模式”和 NASM 的,但这个汇编器中的宏的实现方式不同。

特征

  • 用它本身编写;因此它的源代码是关于如何在该汇编器中编写代码的示例
  • 开源
  • 简洁的类似 NASM 的语法
  • 非常快
  • 有宏语言(编写代码的代码)
  • 内置的 DOS 和 Windows IDE
  • 创建二进制、MZ、PE、ELF、COFF - 无需链接器
[编辑 | 编辑源代码]

YASM 汇编器

[编辑 | 编辑源代码]

YASM 是 NASM 的完全重写,使用新的 BSD 许可证。YASM 旨在原生理解多种语法(目前是 NASM 和 GAS)。YASM 的主要重点是生成“libyasm”,一个可重用的库,可以在低级别使用代码,并且可以轻松地集成到其他软件项目中。

[编辑 | 编辑源代码]


HLA 是 Randall Hyde 创建的一个汇编前端,最初在他的书“汇编艺术”中流行起来。

HLA 接受使用高级格式编写的汇编代码,并将代码转换为另一种格式(通常为 MASM 或 GAS)。然后,另一个汇编器(MASM 或 GAS)将指令组装成机器代码。


BBC BASIC for WINDOWS(专有)

[编辑 | 编辑源代码]

专有的 BBC BASIC for Windows 支持使用 INTEL 语法开发针对 Windows 用户模式的 32 位 x86 汇编器,但目前不允许生成独立的 EXE 文件(不包含专有运行时和环境)。宏汇编可以通过使用 BBC BASIC 环境,通过将宏定义为围绕相关代码的基本函数来实现。

更多信息请参见 手册中的汇编器部分

华夏公益教科书