30
2024
10
09:11:05

Yasm的作用及NASM详解 nasm fasm yasm 还是masm、gas?

文章目录

YASM介绍

1. YASM 的主要特性

1.1 多体系结构支持

1.2 多输出格式

1.3 强大的宏处理器

1.4 Python 绑定

2. YASM 与 NASM 的区别

3. YASM 的安装过程

3.1 在 Ubuntu/Debian 上安装

3.2 在 Fedora/RHEL/CentOS 上安装

3.3 在 macOS 上安装

4. YASM 的使用方法

4.1 编写汇编代码

4.2 使用 YASM 编译汇编代码

4.3 链接对象文件

5. 在项目中使用 YASM

结论

YASM介绍

YASM(Yet Another Assembler)是一个完全重写的 NASM(Netwide Assembler)兼容的开源汇编器。其设计目标是提供最佳的汇编和链接支持,为现代开发人员提供最新的汇编技术。这篇文章将解析 YASM 的主要特性、安装过程、使用方法以及在项目中的应用。

   Yasm是一个完全重写的NASM汇编。目前,它支持x86和AMD64指令集,接受NASM和气体汇编语法,产出二进制, ELF32 , ELF64 , COFF , Mach - O的( 32和64 ) , RDOFF2 ,的Win32和Win64对象的格式,并生成STABS 调试信息的来源,DWARF 2 ,CodeView 8格式。




1. YASM 的主要特性

YASM 汇编器具有许多出色的特性,使其成为众多开发人员的首选工具。


1.1 多体系结构支持

YASM 支持多种处理器架构,包括 x86、AMD64(说是不支持ARM,待确认)


1.2 多输出格式

YASM 可以生成多种不同的对象文件格式,包括 ELF (Unix/Linux)、COFF (Windows)、Mach-O (macOS)、RDOFF 和二进制格式。这意味着无论你的项目需要哪种格式的二进制文件,YASM 都能满足你的需求。


1.3 强大的宏处理器

YASM 的宏处理器可以处理包括条件汇编、多行宏定义和循环等复杂任务。这使得在进行大规模或者复杂的汇编编程时,可以显著减少重复代码和提高编码效率。


1.4 Python 绑定

YASM 提供了 Python API 绑定,这意味着你可以在 Python 程序中直接调用 YASM,极大地增加了其使用场景和灵活性。


2. YASM 与 NASM 的区别

NASM,全称为 Netwide Assembler,是一个自由和开源的 Intel x86 架构的汇编器和反汇编器。它可以用于创建 32 位和 64 位的二进制文件,包括操作系统内核、设备驱动程序等。NASM 支持多种输出格式,包括 ELF、COFF 和 Mach-O 等。


YASM 是一个完全重写的 NASM 兼容的开源汇编器。其设计目标是提供最佳的汇编和链接支持,为现代开发人员提供最新的汇编技术。


虽然 YASM 和 NASM 在功能上有很多相似之处,但还是存在一些关键的差异。


体系结构支持:NASM 主要专注于 Intel x86 架构,而 YASM 则扩展了对其他架构的支持,如 AMD64。

注意:YASM主要支持以下两种处理器架构:

1、x86架构:这是一种由Intel开发的微处理器架构,广泛应用于各种桌面和服务器系统中。YASM支持包括16位、32位(也被称为i386或IA-32)和64位(也被称为x86_64或AMD64)在内的所有x86架构。

2、AMD64架构:这是一种由AMD开发的64位微处理器架构,它扩展了原有的x86架构,并增加了许多新的特性。YASM完全支持AMD64架构,可以编译出优化的64位代码。

到目前为止,YASM只支持x86和AMD64这两种架构。


模块化设计:YASM 使用模块化设计,这使得其具有更好的可扩展性。例如,YASM 提供了多种不同的源代码解析器和对象文件生成器,用户可以根据需要选择合适的模块。


宏处理器:YASM 的宏处理器更加强大,能够处理更复杂的任务,如条件汇编、多行宏定义和循环等。


Python 绑定:YASM 提供了 Python API 绑定,这意味着你可以在 Python 程序中直接调用 YASM。


源代码格式:YASM 支持多种汇编源代码格式,包括 NASM、GAS(GNU Assembler)和 TASM(Turbo Assembler)等。


项目活跃度:在项目活跃度方面,NASM 的更新更为频繁,而 YASM 的开发似乎已经停滞。


总的来说,YASM 在功能上比 NASM 更为强大和灵活,但 NASM 由于其简洁性和稳定性,仍然被广泛使用。


3. YASM 的安装过程

在许多操作系统上,YASM 都可以通过包管理器进行简单快速的安装。以下是一些常见平台的安装示例。


3.1 在 Ubuntu/Debian 上安装

sudo apt-get update

sudo apt-get install yasm

1

2

3.2 在 Fedora/RHEL/CentOS 上安装

sudo yum install yasm

1

3.3 在 macOS 上安装

如果已经安装了 Homebrew,可以使用下面的命令安装 YASM:


brew install yasm

1

4. YASM 的使用方法

下面将介绍如何使用 YASM 进行基本的汇编编程。


4.1 编写汇编代码

首先,需要创建一个包含汇编指令的文本文件。以下是一个简单的示例,该程序打印 “Hello, World!” 字符串。


section .data

hello db 'Hello, World!',0


section .text

global _start


_start:

    ; write hello to stdout

    mov eax,4

    mov ebx,1

    mov ecx,hello

    mov edx,13

    int 0x80


    ; exit

    mov eax,1

    xor ebx,ebx

    int 0x80


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

4.2 使用 YASM 编译汇编代码

保存上述代码到文件 hello.asm 中,然后使用以下命令将其编译成 ELF 对象文件:


yasm -f elf hello.asm

1

此时,目录中应该会生成一个名为 hello.o 的对象文件。


4.3 链接对象文件

最后,需要链接这个对象文件以生成可执行文件。可以使用 ld 链接器完成这一步骤:


ld -m elf_i386 -o hello hello.o

1

现在,你就可以运行 hello 程序了:


./hello

1

它将在控制台输出 “Hello, World!” 字符串。


5. 在项目中使用 YASM

YASM 的强大功能和灵活性使得它在许多开源项目中被广泛使用,例如 FFmpeg、x264 和 VirtualBox 等。在这些项目中,YASM 主要用于编译优化的汇编代码,以提高程序的性能。


在你自己的项目中使用 YASM,可以借鉴这些开源项目的实践经验,将汇编代码与其他语言(如 C 或 C++)混合编程,从而提升程序的性能。同时,还可以利用 YASM 提供的 Python 绑定,让 Python 代码直接调用汇编程序,进一步扩展其应用范围。


结论

总的来说,YASM 是一个功能强大、灵活易用的汇编器,无论是进行系统级编程,还是进行性能优化,都能发挥出显著的效果。通过学习和掌握 YASM,你将获得更深入的硬件理解和更高效的编程技术。

————————————————



选择编译器
nasm?fasm?yasm?还是masm、gas或其他?

前面三个是免费开源的汇编编译器,总体上来讲都使用Intel的语法。yasm是在nasm的基础上开发的,与nasm同宗。由于使用了相同的语法,因此nasm的代码可以直接用yasm来编译。

yasm虽然更新较慢,但对nasm一些不合理的地方进行了改良。从这个角度来看,yasm比nasm更优秀些,而nasm更新快,能支持更新的指令集。在Windows平台上,fasm是另一个不错的选择,平台支持比较好,可以直接用来开发Windows上的程序,语法也比较独特。在对Windows程序结构的支持上,fasm是3个免费的编译器里做得最好的。

masm是微软发布的汇编编译器,现在已经停止单独发布,被融合在Visual Studio产品中。gas是Linux平台上的免费开源汇编编译器,使用AT&T的汇编语法,使用起来比较麻烦。

由于本书的例子是在祼机上直接运行,因此笔者使用nasm,因为它的语法比较简洁,使用方法简单,更新速度非常快。不过如果要是用nasm来写Windows程序则是比较痛苦的,这方面的文档很少。

从nasm的官网可以下载最新的版本:http://www.nasm.us/pub/nasm/releasebuilds/?C=M,也可以浏览和下载其文档:http://www.nasm.us/docs.php。




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/8248.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册
51La

您的IP地址是: