NASM编译器之下载安装使用

NASM的下载和安装

每种处理器都可能会有自己的汇编语言编译器,而对于同一款处理器来说,针对不同的平台(比如Windows和Linux),也会有不同版本的汇编语言编译器。

现存的汇编语言编译器有多种,用得比较多的有 MASM、FASM、TASM、AS86、GASM等,每种汇编器都有自己的特色和局限性。特别是,有些还需要付费才能使用。不同于前面所列举的这些,在本书中,我们用的是另一款叫做NASM的汇编语言编译器。

NASM 的全称是 NetwideAssembler,它是可免费使用的开源软件。下面是它的下载地址:

https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D

在这里插入图片描述

通过以上地址可以找到所有平台上的 NASM 版本,比如为 16位和32位 DOS、LINUX、OS/2等操作系统开发的版本。因为本书的读者一般在 Windows 平台上工作,所以应当使用下面的链接来直接定位到 Windows 平台上的NASM版本:

https://www.nasm.us/pub/nasm/releasebuilds/2.07/win32/

通过以上链接,可以显示所有 Widows 平台上的 NASM 版本,应当选择最新版本下载。这本书出版的时候,最新的NASM 版本是2.07。
在这里插入图片描述

代码的书写和编译过程

和你已经司空见惯的其他 Windows 应用程序不同,NASM 在运行之后并不会显示一个图形用户界面。相反地,它只能通过命令行使用。

比如,我们可以用 Windows 记事本编写一个汇编语言源程序,并把它保存到NASM 工作目录下(就是在前面安装NASM 所用的安文)文名为 exam.asm为例,汇编语言源程序文件的扩展名是“.asm”,不过,你当然可以使用其他扩展名。

一旦有了一个源程序,下一步就是将它的内容编译成机器代码。为此,可以从 Windows 开始菜单里找到“Netwide Assembler xxx”,其中的“xxx”取决于你安装的NASM 版本。然后,选择其下的“Nasm Shell”,这将打开一个命令行窗口。
在这里插入图片描述

接着,在命令行提示符后输入“nasm -f bin exam.asm -o exam.bin”并按 Enter 键。
在这里插入图片描述

NASM 需要一系列参数才能正常工作。-f 参数的作用是指定输出文件的格式(Frmat)。这样,-f bin 就是要求 NASM 生成的文件只包含“纯二进制”的内容。换句话说,除了处理器能够识别的机器代码外,别的任何东西都不包含。这样一来,因为缺少操作系统所需要的加载和重定位信息,它就很难在 Windows、DOS 和 Liux 上作为一个普通的应用程序运行。不过,这正是本书所需要的。

紧接着,exam.asm 是源程序的文件名,它是将要被编译的对象。

-0 参数指定编译后输出 (Output)的文件名。在这里,我们要求 NASM 生成输出文件
exam.bin。

不同于其他汇编语言编译器,NASM 最让我喜欢的一个特点是允许在源程序中只包含指令。用过微软公司 MASM 的人都知道,在真正开始书写汇编指前,先要穿靴戴帽,在源程序中定义很多东西,比如代码段和数据段等,弄了半天,实际上连一条指令还没开始写呢。

在汇编源程序中,可以为每一行添加注释。注释的作用是说明某条指令或者某个符号的含义和作用。注释也是源程序的组成部分,但在编译的时候会被编译器忽略。为了诉编译器注释是从哪里开始的,注释需要以英文字母的分号“,”开始。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/102367.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据学习06-Spark分布式集群部署

Spark完全分布式部署 前期准备,每台服务器都需要配置安装Scala下载Scala安装包配置环境变量 安装spark解压配置环境修改配置 前期准备,每台服务器都需要配置 配置好IP vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE"Ethernet" PROX…

申威芯片UOS中opencv DNN推理

Cmake,opencv,opencv-contribute安装 #apt可能需要更新apt update apt install -y wget unzip apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev#安装cmake apt i…

韶音耳机是哪个国家的品牌,韶音耳机属于什么档次

在如今耳机产品层出不穷的时代,许多品牌纷纷推陈出新,打造出更具创新性的耳机产品。其中,韶音耳机可谓引人注目。然而,对于韶音耳机这个品牌,仍有许多朋友并不熟悉。比如说,韶音耳机是哪个国家的品牌呢&…

解决Spring Data JPA中的NullPointerException问题

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Python全攻略:基础学习、爬虫编程实战和面试技巧

在这个充满活力和机会的编程世界中,我们为你提供一份宝贵的指南,旨在帮助你全面了解Python的各个方面。我们将深入探讨面试技巧,提供学习资源,探索爬虫实战经验,并提供丰富的编程示例。无论你是初学者,还是…

Springboot整合AOP实现日志的保存

1.定义注解 /*** 系统日志元注解*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface LogFilter {String value() default "" ; } 2.编写切面的实现 Aspect Component public class LogAspect {private static final …

安装程序报错“E: Sub-process /usr/bin/dpkg returned an error code (1)”的解决办法

今天在终端使用命令安装程序时出现了如下的报错信息。 E: Sub-process /usr/bin/dpkg returned an error code (1) 这种情况下安装什么程序最终都会报这个错,具体的报错截图如下图所示。 要解决这个问题,首先使用下面的命令进到相应的目录下。 cd /var/…

驱动开发--day2(内核不同模块的相互访问、字符设备驱动、led控制实验代码及现象)

实现三盏灯的控制,编写应用程序测试 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define LED1_MODER 0X50006000 #define LED1_ODR 0X50006014 #define LED1_RCC 0X50000A28#define LED2_MODER 0X50007000 #define LED2_ODR 0X50007014#endif mychrdev.c #inc…

记录mac虚拟机安装centos7

一. 安装VMWare Fusion(略) 二. 寻找arm64架构mac能拉起来的centos7镜像(略) 参考 https://cloud.tencent.com/developer/article/2150583?areaSource106000.2&traceIdkybnG2SKASN5GqSBiSmu9 三. 从origin镜像安装后开始记…

GaussDB数据库SQL系列-数据去重

目录 一、前言 二、数据去重应用场景 三、数据去重案例(GaussDB) 1、示例场景描述 2、定义重复数据 3、制定去重规则 4、创建测试数据(GaussDB) 5、编写去重方法(GaussDB) 6、附:全字段…

windows如何更改/禁用系统更新

提示:首先说明这属于将更新时间更改,不过你可以的将更新时间更改为十年一百年 废话不多说开始正文: 1.首先:winR打开运行,输入regedit,进入注册表编辑器 2.进入编辑器后依次点击:HKEY_LOCAL_MACHINE\SOFT…

【Linux成长史】Linux基本指令大全

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…