### NASM简体中文教程知识点总结 #### 一、引言 《NASM简体中文教程》是一本针对初学者的汇编语言教程,旨在帮助读者掌握基于Intel x86架构的汇编语言编程技巧。本书由Paul A. Carter编写,并由伍星翻译成中文版本。教程内容全面且易于理解,特别适合对汇编语言和操作系统感兴趣的读者。 #### 二、数制与计算机结构 ##### 2.1 数制 - **十进制**: 我们日常生活中使用的计数系统,基数为10,使用0-9十个符号表示数值。 - **二进制**: 计算机内部使用的基本计数系统,只有0和1两个符号,适用于数字电路设计。 - **十六进制**: 常用于表示计算机内存地址或其他二进制数据,采用0-9和A-F(代表10-15)共16个符号。 ##### 2.2 计算机结构 - **内存**: 存储数据和程序的地方,分为RAM(随机存取存储器)和ROM(只读存储器)等。 - **CPU**: 中央处理器,负责执行指令集,处理数据。 - **CPU 80x86系列**: Intel推出的一系列微处理器,如8086、80386等。 - **8086 16位寄存器**: 包括AX、BX、CX、DX等通用寄存器,以及SP、BP等特殊寄存器。 - **80386 32位寄存器**: 扩展了8086的寄存器体系,增加了EAX、EBX、ECX、EDX等32位寄存器。 - **实模式**: 早期的8086/8088处理器的工作模式,提供了直接访问物理内存的能力。 - **保护模式**: 提供了虚拟内存管理,支持更复杂的操作系统功能。 - **16位保护模式** - **32位保护模式** - **中断**: 允许外部设备或软件向CPU发送信号请求服务。 #### 三、汇编语言基础 ##### 3.1 机器语言与汇编语言 - **机器语言**: 最底层的计算机语言,由二进制指令组成。 - **汇编语言**: 接近机器语言的一种低级语言,使用助记符代替机器码,提高可读性。 ##### 3.2 指令操作数与基本指令 - **指令操作数**: 指令的操作对象,如寄存器、内存位置等。 - **基本指令**: 如MOV(移动)、ADD(加法)、SUB(减法)等,构成程序的基础。 ##### 3.3 指示符与输入输出 - **指示符**: 不执行任何操作,用于组织程序结构,如SECTON、ENDS等。 - **输入和输出**: 通过INT指令调用中断服务程序实现。 #### 四、创建第一个汇编程序 - **第一个程序**: 使用简单的“Hello World”示例,展示如何编写、编译和运行一个汇编程序。 - **编译器依赖**: 介绍开发环境的设置,包括NASM汇编器的安装配置。 - **汇编代码**: 逐步解释每个汇编指令的作用。 - **编译C代码**: 在程序中结合C语言代码的方法。 - **连接目标文件**: 将多个目标文件链接成可执行文件的过程。 - **理解汇编列表文件**: 解析编译器生成的列表文件,了解汇编过程的细节。 #### 五、基本汇编语言 ##### 5.1 整形工作方式 - **整形表示法**: 介绍整数在计算机中的存储方式。 - **正负号延伸**: 用于扩展整数表示范围的技术。 - **补码运算**: 表示负数和进行算术运算的方法。 - **程序例子**: 通过实际代码演示整数运算。 ##### 5.2 控制结构 - **比较**: 使用CMP指令比较两个值。 - **分支指令**: 如JMP、JE、JNE等,根据条件跳转到不同的代码段。 - **循环指令**: 如LOOP、REP等,重复执行一段代码直到满足特定条件。 ##### 5.3 翻译标准的控制结构 - **If语句**: 使用条件分支实现if-else结构。 - **While循环**: 通过LOOP指令实现while循环。 - **Do-while循环**: 使用JMP指令实现do-while循环。 #### 六、位操作 ##### 6.1 移位操作 - **逻辑移位**: 位左移(SHL)、位右移(SHR),不改变符号位。 - **算术移位**: 保持符号位不变地移动其他位。 - **循环移位**: 位向左或向右循环移动。 - **应用**: 实现快速乘除等算法。 ##### 6.2 布尔型按位运算 - **AND运算符**: 对应位相与。 - **OR运算符**: 对应位相或。 - **XOR运算**: 对应位异或。 - **NOT运算**: 对应位取反。 - **TEST指令**: 测试两个值是否相等。 #### 七、子程序 ##### 7.1 间接寻址 - 通过指针或变址寻址访问数据。 ##### 7.2 子程序的简单例子 - **堆栈**: 存储函数调用时的信息。 - **CALL和RET指令**: 调用和返回子程序。 - **调用约定**: 规定函数调用时参数传递和堆栈清理的方式。 - **在堆栈上传递参数** - **堆栈上的局部变量** ##### 7.3 多模块程序 - 将大型程序拆分成多个独立模块,便于管理和维护。 ##### 7.4 C与汇编的接口技术 - **保存寄存器**: 在进入子程序时保存寄存器状态。 - **函数名**: 确保汇编代码中的函数名称与C代码一致。 - **传递参数**: 说明如何在C代码和汇编代码之间传递参数。 - **计算局部变量的地址**: 在汇编代码中访问C语言中的局部变量。 - **返回值**: 从汇编子程序返回值给C函数。 - **其它调用约定**: 根据不同的平台选择合适的调用约定。 - **样例**: 提供一个完整的混合编程示例。 - **在汇编程序中调用C函数**: 解释如何在汇编代码中调用C函数。 #### 八、数组 ##### 8.1 定义数组 - 介绍如何在汇编语言中声明数组。 ##### 8.2 访问数组中的元素 - 通过索引访问数组中的单个元素。 ##### 8.3 更高级的间接寻址 - 使用复杂表达式作为数组索引。 ##### 8.4 例子 - 通过具体示例演示数组的使用方法。 ##### 8.5 多维数组 - 介绍多维数组的声明和访问方式。 #### 九、数组/串处理指令 - 介绍一系列专门用于处理数组和字符串的指令,如MOVS、LODS等。 通过以上内容的详细解析,《NASM简体中文教程》不仅覆盖了汇编语言的基础概念,还深入介绍了各种实用的编程技巧和技术。无论是对于初学者还是有一定经验的程序员来说,这都是一份宝贵的资源。
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-dosexec](https://img-home.csdnimg.cn/images/20210720083343.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![avatar](https://profile-avatar.csdnimg.cn/28d19e4836ac409aad13480b645a622b_lg0322.jpg!1)
- 粉丝: 1
- 资源: 12
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
- 1
- 2
- 3
前往页