3.4. 其他汇编器

还有其他汇编器,它们具有各种有趣和突出的特性,您可能也会感兴趣。

Note

它们可能处于不同的开发阶段,并且可能是非经典的/高级的/或其他类型的。

3.4.1. AS86

AS86 是一款 80x86 汇编器(16 位和 32 位),带有集成的宏支持。它主要使用 Intel 语法,但在寻址模式方面略有不同。在过去,它曾在多个项目中使用,包括 Linux 内核,但最终这些项目大多已迁移到 GAS 或 NASM。据我所知,只有 ELKS 仍在继续使用它。

AS86 可以在 http://www.debath.co.uk/dev86/ 找到,在带有链接器 (ld86) 的 bin86 包中,或作为单独的存档。文档可以作为 man 手册和源代码包中的 as.doc 获得。如有疑问,源代码本身通常是一个很好的文档:尽管注释不多,但编程风格很直接。AS86 是许多 BSD 和 Linux 发行版的一部分。

Note

AS86 主要是一款 16 位汇编器。

Note将 AS86 与 BCC 结合使用
 

这是使用 BCC 转换的 GNU Makefile 条目.sasm 到 a.out.o对象和.l列表

%.o %.l:    %.s
    bcc -3 -G -c -A-d -A-l -A$*.l -o $*.o $<

移除%.l, -A-l,以及-A$*.l,如果您不想要任何列表。如果您想要 a.out 以外的其他内容,您可以查看 BCC 文档,了解其他支持的格式,和/或使用 GNU binutils 包中的 objcopy 实用程序。

3.4.2. YASM

YASM 是在 “new” BSD 许可下对 NASM 汇编器的完全重写。它的设计从一开始就允许支持多种语法(例如,NASM、TASM、GAS 等),以及多种输出对象格式,包括 COFF、Win32 和 Mach-O。整体设计的另一个主要模块是优化器模块。

3.4.3. FASM

FASM (flat assembler) 是一款快速、高效的 80x86 汇编器,它在“平面实模式”下运行。与许多其他 80x86 汇编器不同,FASM 只需要源代码包含它真正需要的信息。它是用自身编写的,非常小巧快速。它可以在 DOS/Windows/Linux 上运行,并可以生成平面二进制文件、DOS EXE 文件、Win32 PE 文件、COFF 文件和 Linux ELF 输出文件。请访问 http://flatassembler.net。

3.4.4. OSIMPA (SHASM)

osimpa 是一款用于 Intel 80386 处理器及其后续产品的汇编器,完全使用 GNU Bash 命令解释器 shell 编写。osimpa 的前身是 shasm。osimpa 经过了大量清理,可以创建有用的 Linux ELF 可执行文件,并具有各种类似 HLL 的扩展和程序员便利命令。

它(当然)比其他汇编器慢。它有自己的语法(并为 x86 操作码使用自己的名称)。包含相当不错的文档。请查看:ftp://linux01.gwdg.de/pub/cLIeNUX/interim/(访问受密码控制)。您可能不会经常使用它,但至少它作为一个有趣的想法值得您关注。

3.4.5. AASM

Aasm 是一款高级汇编器,旨在支持多种目标架构。它的设计易于扩展,并且应该被视为为每个新的目标 CPU 和二进制文件格式进行单片汇编器开发的良好替代方案。

Aasm 应该通过提供一组高级功能(包括符号作用域、表达式引擎、大整数支持、宏功能、大量且准确的警告消息)来使汇编编程对开发人员来说更容易。其动态模块化架构使 Aasm 能够通过利用动态库,使用插件扩展其功能集。

输入模块支持 Intel 语法(如 nasm、tasm、masm 等)。x86 汇编器模块支持所有高达 P6 的操作码,包括 MMX、SSE 和 3DNow! 扩展。F-CPU 和 SPARC 汇编器模块正在开发中。有多个输出模块可用于 ELF、COFF、IntelHex 和原始二进制格式。

http://savannah.nongnu.org/projects/aasm/

3.4.6. TDASM

表格驱动汇编器 (TDASM) 是一款免费的便携式交叉汇编器,适用于任何类型的汇编语言。应该可以使用它作为编译器,通过使用定义编译过程的表格来编译到任何目标微处理器。

它可以从 http://www.penguin.cz/~niki/tdasm/ 获得,但似乎不再积极维护。

3.4.7. HLA

HLA 是一种言。它对变量声明、过程声明和过程调用使用类似高级语言的语法(类似于 Pascal、C/C++ 和其他 HLL)。它对标准机器指令使用修改后的汇编语言语法。它还提供了一些高级语言风格的控制结构(if、while、repeat..until 等),这些结构可以帮助您编写更具可读性的代码。

HLA 是免费的,并提供源代码、Linux 和 Win32 版本。在 Win32 上,您需要 MASM 和 32 位版本的 MS-link,在 Linux 上,您需要 GAS,因为 HLA 生成指定的汇编器代码,并使用该汇编器进行最终的汇编和链接。

3.4.8. TALC

TALC 是另一个基于免费 MASM/Win32 的编译器(但是它支持 ELF 输出,是吗?)。

TAL 代表言。它通过类型注释、内存管理原语和一套健全的类型规则扩展了传统的非类型化汇编语言,以保证 TAL 程序的内存安全、控制流安全和类型安全。此外,类型构造具有足够的表达能力来编码大多数源语言编程特性,包括记录和结构、数组、高阶和多态函数、异常、抽象数据类型、子类型和模块。同样重要的是,TAL 足够灵活,可以接受许多低级编译器优化。因此,TAL 是类型导向编译器的理想目标平台,这些编译器希望生成可验证的安全代码,用于安全移动代码应用程序或可扩展的操作系统内核。

3.4.9. Free Pascal

Free Pascal 有一个内部 32 位汇编器(基于 NASM 表),以及一个可切换的输出,允许

MASM 和 TASM 输出的调试效果不如另外两个,但有时可能很方便。

汇编器的外观和感觉基于 Turbo Pascal 的内部 BASM,IDE 支持类似的突出显示,并且 FPC 可以与 gcc 完全集成(在 C 级别,而不是 C++)。

使用虚拟 RTL,甚至可以生成纯汇编器程序。

3.4.10. Win32Forth 汇编器

Win32Forth 是一个免费的 32 位 ANS FORTH 系统,可以在 Win32s、Win95、Win/NT 下成功运行。它包含一个免费的 32 位汇编器(前缀或后缀语法),集成到反射式 FORTH 语言中。宏处理使用反射式语言 FORTH 的全部功能完成;但是,唯一支持的输入和输出上下文是 Win32For 本身(不转储.obj文件,但您当然可以自己添加该功能)。在 ftp://ftp.forth.org/pub/Forth/Compilers/native/windows/Win32For/ 找到它。

3.4.11. Terse

Terse 是一种编程工具,它为 x86 系列提供了紧凑的汇编器语法!然而,它是邪恶的专有软件。据说曾经有一个免费克隆的项目,但在毫无价值的声称语法将归原始作者所有之后被放弃了。因此,如果您正在寻找与汇编破解相关的绝妙编程项目,我邀请您为 NASM 开发一个 terse 语法前端,如果您喜欢该语法的话。

作为一个有趣的历史评论,在 comp.compilers 上,


1999/07/11 19:36:51, 版主 写道

“没有 理由 汇编器 必须 有 糟糕的 语法。  大约
30 年前 我 使用过 Niklaus Wirth 的 PL360, 它 基本上 是 一个 S/360
汇编器, 带有 Algol 语法 和 一点点 语法糖, 比如 while
循环, 它们 变成了 明显的 分支。  它 真的是 一个
汇编器, 例如, 你 必须 用 显式的 方式 写出 你的 表达式
将 值 赋值给 寄存器, 但 它 很 好用。  Wirth 用它 来
编写 Algol W, 一个 小型 快速 Algol 子集, 它是 Pascal 的 前身。
Pascal。  就像 通常 情况 一样, Algol W 是 一个 重要的
改进, 超过了 它的许多 后继者。 -John”

3.4.12. 非免费和/或非 32 位 x86 汇编器

您可以在 Raymond Moon 的 x86 汇编 FAQ 中找到更多关于它们的信息,以及 x86 汇编编程的基础知识。

请注意,所有基于 DOS 的汇编器都应该可以在 Linux DOS 模拟器以及其他类似的模拟器中工作,因此如果您已经拥有一个,您仍然可以在真实的操作系统中使用它。最近的基于 DOS 的汇编器也支持 COFF 和/或其他 GNU BFD 库支持的对象文件格式,因此您可以将它们与您的免费 32 位工具一起使用,或许可以使用 GNU objcopy(binutils 的一部分)作为转换过滤器。