NASM编译器之下载安装使用

news2024/11/28 18:43:50

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.coloradmin.cn/o/987368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何加快跨国传输大文件的速度?

在当今的信息化社会,数据已经成为各行各业的重要资产,而数据的传输和交换则是数据价值的体现。在很多场景中,我们需要跨国传输大文件,比如政府、军队、金融、医疗等涉密行业,或者跨国、跨区域的企业合作。然而&#xf…

浅谈安科瑞ADL400系列导轨电能表在沙特电力物联网平台中的应用

1.项目概述:Project Overview 沙特客户需要对小区住宅,及商铺进行用户端电能计量,管理。需要安装三相交流电表监测电能数据,并上传到后台系统进行统一监控管理。安科瑞推荐电力物联网平台,可以通过云端界面和APP查看不…

Python中文字体包下载经历(经验分享)

故事背景 python解释器需要中文字体包,我找了半天网络上的中文字体包,每一个过程都非常繁琐。 都是先注册,在安装他们的软件,软件安装好后下载,下载的还不是字体包格式的文件,反正就是在欺负小白。 解决…

浅谈能源汽车下乡充电桩建设优化建议及解决方案

1.趋势分析 新能源汽车下乡已经成为提振汽车市场表现、推动汽车行业发展的重要措施。国家发改委日前也提出,汽车消费是支撑消费的“大头”,将加快推进充电桩和城市停车设施建设,大力推动新能源汽车下乡,鼓励汽车企业开发更适宜县…

若依集成mybatisplus、兼容旧分页【亲测有效】

这里写目录标题 一 修改pom文件最外层的pom.xml增加如下配置common模块的pom文件加入如下配置 二 framework模块的config包增加两个类MybatisPlusPageConfigurerSqlFilterArgumentResolver 三 全局搜索com.ruoyi.framework.config.MyBatisConfig类,将此类注释掉四 y…

excel表中复制粘贴有隐藏行的情况

一、原始数据,没有任何隐藏的情况: 二、隐藏3、4行: 这种情况下: 三、我想复制粘贴出可见的内容,全选,ctrlc复制 四、ctrlv粘贴到别处,结果却是 发现隐藏的行也被复制粘贴出来了。并不是我们想…

求求你,别再用 Mybatis Plus 的伪批量新增了!

前言 大家好,我是小哈~ 本文节选自小哈写的《Mybatis Plus 教程》中的批量新增一节,旨在帮助大家如何在 Mybatis Plus 中,实现 MySQL 真实的批量新增,而不是伪批量新增。 最近,小哈在带小伙伴做 前后端分离项目&#x…

2023年MySQL-8.0.34保姆级安装教程

重点放前面:演示环境为windows环境。 MySQL社区版本安装教程如下: 一、MySQL安装包下载二、安装配置设置三、配置环境变量 大体分为3个步骤:①安装包的下载;②安装配置设置;③配置环境变量 一、MySQL安装包下载 下载官…

界面长的像算抄袭吗?

昨晚,在GitHub和X上,被一次疑似抄袭的问题刷了一会儿屏,主要是下面这个issue: 相关的开源项目是小米的米效,英文名:Mone。一个以微服务为中心的一站式企业协同研发平台。支持公有云、私有云、混合云等多种部…

Redis Cluster集群运维与核心原理剖析

Redis集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性…

2023/09/07 c++qt day2

#include <iostream>using namespace std; //封装一个学生类 struct stu { private://存放学生的成绩int stu_score[256];//记录学生个数int stu_num; public://用于设置学生个数void setNum(){cout<<"请输入学生的个数"<<" ";cin>&g…

神策数据发布汽车行业 CJO 解决方案,打造客户旅程全新体验

最近&#xff0c;围绕数字化客户经营&#xff0c;神策数据基于“客户旅程编排&#xff08;Customer Journey Orchestration&#xff0c;简称 CJO&#xff09;”理念&#xff0c;发布汽车行业全新解决方案&#xff0c;通过全渠道打通给客户带来一致的、个性化的体验&#xff0c;…

如何做好自己的职业规划

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 进入公司以后&#xff0c;就是进入了人生的下一个阶段&#xff0c;通过前面几个章节&#xff0c;我们谈到了入职新公司后应该如何开展工作。这节我们来聊一聊如何做好职业规…

2594. 修车的最少时间

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;二分枚举答案 写在最后 Tag 【二分枚举答案】【数组】 题目来源 2594. 修车的最少时间 题目解读 给你一个表示机械工能力的数组 ranks&#xff0c;ranks[i] 表示第 i 位机械工可以在 r a n k s [ i ] ∗ n 2 ranks[…

【三维】NeRF神经辐射场构建三维模型

论文地址&#xff1a;paper 代码地址&#xff1a;code 视频地址&#xff1a;油管 目录 0.&#x1f308;&#x1f308;摘要 1.&#x1f308;&#x1f308;nerf主要原理 2.&#x1f308;&#x1f308;网络结构 2.1&#x1f4cc;渲染 2.2&#x1f4cc;消融实验 3.&#x…

链表反转问题

链表反转常用的两种方式 1.建立虚拟头结点辅助反转 Java 实现 public static ListNode reverseListByDummyNotCreate(ListNode head) {ListNode ans new ListNode(-1);ListNode cur head;while (cur ! null) {ListNode next cur.next;cur.next ans.next;ans.next cur;cur…

抖音集团都在用的画质评估工具,确定不试试吗?

导读 本文从抖音集团内部画质评估体系的建设历程着笔&#xff0c;主要分享了画质评测对于业务的重要性、主要应用场景和内部产品的一些典型实践案例。通过分享业务视角遇到的一些问题和我们的解决思路&#xff0c;希望能抛砖引玉&#xff0c;为遇到类似困扰的伙伴们提供有价值的…

[C++学习] 多进程通信共享内存

ref:https://blog.csdn.net/qq_35733751/article/details/82872197 多线程共享进程的地址空间&#xff0c;如果多个线程需要访问同一块内存&#xff0c;用全局变量即可。 在多进程中&#xff0c;每个进程的地址空间是独立的&#xff0c;不共享的&#xff0c;如果多个进程需要访…

Redis持久化、主从与哨兵架构详解

Redis持久化 RDB快照&#xff08;snapshot&#xff09; 在默认情况下&#xff0c; Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置&#xff0c; 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时&#xff0c; 自动保存一次数…

yolov7添加pconv模块

连接pconv 1、复制到models-common.py文件最后 2、添加模块到yolo.py 3、修改网络&#xff0c;建议替换3x3的卷积&#xff0c;后面的参数不要了 4、不能替换步长为2的卷积