[笔记] x86汇编语言:从实模式到保护模式之第四章 汇编语言和汇编软件

embedded/2025/2/24 3:02:33/

文章目录

  • 4.1 汇编语言程序
  • 4.2 NASM编译器
    • 4.2.1 NASM的下载和安装
    • 4.2.2 代码的书写和编译过程
      • 使用nasm编写
      • 使用Nasmide编辑器
    • 4.2.3 用HexView观察编译后的机器代码
      • HexView
  • 4.3 配书文件包的下载和使用
  • 总结
  • 参考

4.1 汇编语言程序

前面的章节里已经简单介绍过汇编语言及其产生的背景,所以我们知道,汇编语言提供了机器指令的人工可读形式,或者说助记形式,而且与机器指令是一一对应的。
另外,不同的处理器具有不同的指令集和指令的操作方式,并因此形成了不同的处理器架构,比如英特尔的x86架构和摩托罗拉68K架构。因此,针对不同的处理器架构,汇编语言将提供不同的助记形式。实际上,即使是针对同一种处理器架构,也可能会有人使用本质上一样,但风格不同的助记形式。比如说,针对英特尔x86架构的处理器,就有AT&T和INTEL公司自己的风格。在本书中,我们将采用英特尔风格的汇编语言助记形式。

汇编语言助记形式特点及过程:

  • 用英文+寄存器的方式

    例如,mov ax,0x3f,mov是move的简化形式,意思是“移动”或者“传送”。至于“ax”,很明显,指的就是寄存器AX。传送指令需要两个操作数,分别是目的操作数和源操作数,它们之间要用逗号隔开。在这里,AX是目的操作数,源操作数是3FH。

  • 操作数可以直接使用十六进制,例如0x3f,十进制63,二进制00111111B形式

  • 汇编语言提供的符号书写的文本,叫作汇编语言源程序,为此,你需要一个字处理器软件,比如Windows记事本。
    在这里插入图片描述

  • 要将汇编语言源程序转换成机器指令,这个过程叫作编译(Compile)。在编译的时候,汇编语言编译器的作用是将mov、add、ax、bx等这些符号组合起来,转换成类似于数值的机器指令,这个过程叫作汇编,这就是汇编语言的由来,也有人称之为组合语言。

  • 编译肯定还需要依靠一个软件,称为编译器,或编译软件.

  • 编写(记事本, asm)–> 编译(编译器)成机器指令(obj)–> 存放为二进制文件(exe)–> 加载文件到内存,处理器从内存取指令执行 (指令)

    字处理器软件生成的是汇编语言源程序文件。编译软件的任务是读取这些文件,将那些符号转变成二进制形式的机器指令代码。它把这些机器指令代码存放到另一个文件中,叫作二进制文件或者可执行文件,比如Windows里以“.exe”为扩展名的文件,就是可执行文件。当需要用处理器执行的时候,再加载到内存里。

4.2 NASM编译器

现存的汇编语言编译器有多种,用得比较多的有:

  • NASM
  • MASM
  • FASM
  • TASM
  • AS86
  • GASM

本文主要以NASM编译器为主

4.2.1 NASM的下载和安装

NASM的全称是Netwide Assembler,它是可免费使用的开源软件。

下面是它的官方网站,从这里可以找到它的帮助和开发文档、源代码,以及DOS、Linux、MacOS、32位Windows、64位Windows下的安装包:

https://www.nasm.us/

环境:

  • nasm 2.15.05 win64

    (https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-win64.zip)
    (也可以直接用nasm-2.15.05-installer-x64.exe 书用的是nasm-2.15.05-installer-x64.exe )

下载安装后记得将安装目录,添加到环境变量Path中

4.2.2 代码的书写和编译过程

使用nasm编写

编写过程:

  • 创建 .asm 文件 如example.asm
  • 将文件编译成机器代码
    • 具体打开cmd,cd 进入到example.asm所在文件夹
    • 执行nasm -f bin exam.asm -o exam.bin

      参数解释:

      • -f参数的作用是指定输出文件的格式(Format)。这样,-f bin就是要求NASM生成的文件只包含“纯二进制”的内容。
      • exam.asm是源程序的文件名,它是将要被编译的对象
      • -o参数指定编译后输出(Output)的文件名。在这里,我们要求NASM生成输出文件exam.bin。
      • exam.bin是编译后输出文件
    • 会在当前目录找到exam.bin文件 这就是编译完成二进制文件
      在这里插入图片描述

使用Nasmide编辑器

书作者推荐使用Nasmide编辑器软件,对应的资料中有该软件的安装包。

在这里插入图片描述

配置编译器路径
在这里插入图片描述

不细讲,都是编程老兵了,编辑器都是浮云。

4.2.3 用HexView观察编译后的机器代码

HexView

本节主要是看看在hexview中编译前的源文件和编译后的源文件

  • 有什么特点
    • 地址(左)+ 16进制(中) + ASCII 码值(右)组成,(图4-8)
  • 在文件中以十六进制是如何展示的
    • 以十六进制展示字符的ASCII码

下载地址:https://hexview.apponic.com/

用hexview打开编译后的二进制文件exam.bin
在这里插入图片描述
在这里插入图片描述

4.3 配书文件包的下载和使用

https://www.lizhongc.com/

总结

如图4-8所示:
在这里插入图片描述

  • 源程序共有3行,每行第一个字符在文件内的偏移量分别是0,0x35, 0x40 (提示:每行首地址+偏移量
  • 该源程序文件的大小是0x49=0x40+9

参考

书资料:https://www.lizhongc.com/thread-1-1-1.html
习题答案:https://www.cnblogs.com/leec/p/8150645.html


http://www.ppmy.cn/embedded/164727.html

相关文章

【SQL实验】触发器

下载素材文件”tsgl”、“成绩管理”,将tsgl.bak和成绩管理.bak数据库还原到库中【导入操作在之前的文章中详细讲过】 触发器 1、为图书表设置更新触发器,根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录,然后更新书名、作者…

迅为RK3568开发板篇Openharmony配置HDF控制UART-UART 接口运作机制

在 HDF 框架中,串口接口适配模式采用独立服务模式,如下图所示: 如上图所示,每个设备对象会独立发布一个设备服务来处理外部访问,设备管理器接收到API 的访问请求之后,通过提取该请求的参数,达…

芯谷D668:便携式录音机与耳机式盒式录音机的理想音频解决方案

在便携式音频设备领域,录音机和耳机式盒式录音机因其便携性和多功能性一直受到用户的青睐。芯谷科技推出的D668集成电路,凭借其集成的多功能设计,成为这些设备的理想选择。 一、D668的电路特性 1. 多功能集成设计 D668电路内部集成了双声道…

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2

第02章_MySQL的数据目录 1. MySQL8的主要目录结构 1.1 数据库文件的存放路径 MySQL数据库文件的存放路径:/var/lib/mysql/ MySQL服务器程序在启动时会到文件系统的某个目录下加载一些文件,之后在运行过程中产生的数据也都会存储到这个目录下的某些文件…

三、linux字符驱动详解

在上一节完成NFS开发环境的搭建后,本节将探讨Linux字符设备驱动的开发。字符设备驱动作为Linux内核的重要组成部分,主要负责管理与字符设备(如串口、键盘等)的交互,并为用户空间程序提供统一的读写操作接口。 驱动代码…

2.1作业

1 #web351curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch);echo ($result);【提示不允许外部】对应源码:$_SERVER(remoteaddr): ?urlhttp://127.0.0.1/flag.php 伪…

【Windows系统node_modules删除失败(EPERM)问题解析与应对方案】

Windows系统node_modules删除失败(EPERM)问题解析与应对方案 问题现象 当开发者尝试删除Node.js项目的node_modules目录时,常会遇到如下错误提示: [Error: EPERM: operation not permitted, unlink D:\project\...\esbuild.exe] {errno: -4048,code: …

x安全服务 y安全体系 z网络安全模型 网络安全体系设计

这一年来,网络安全行业兴奋异常。各种会议、攻防大赛、黑客秀,马不停蹄。随着物联网大潮的到来,在这个到处都是安全漏洞的世界,似乎黑客才是安全行业的主宰。然而,我们看到的永远都是自己的世界,正如医生看…