### NASM中文手册知识点概述 #### 一、简介 **1.1 什么是NASM** - **定义**:NASM(Netwide Assembler)是一种针对Intel x86架构的汇编器,支持从实模式16位代码到保护模式32位及64位代码的编译。 - **特点**: - 支持多种操作系统,如DOS、Windows、Unix等。 - 具有良好的跨平台性。 - 提供了丰富的指令集和宏处理能力。 - 可用于编写启动扇区、BIOS固件、系统内核模块等。 **1.1.1 为什么还需要一个汇编器** 尽管现代编程更多地依赖于高级语言,但在某些场景下,汇编语言仍然是必不可少的,例如: - **性能优化**:对于需要极高性能的应用程序,直接用汇编语言编写可以更好地控制底层硬件资源。 - **直接硬件访问**:某些场合下需要直接访问硬件设备,而汇编提供了这种低级的访问方式。 - **嵌入式系统开发**:在资源受限的嵌入式设备上,汇编语言可以帮助开发者更有效地利用有限的资源。 **1.1.2 许可条件** NASM遵循宽松的BSD许可证,这意味着它既可以用于商业项目也可以用于非商业项目,只要保持原版权和许可信息不变即可。 **1.2 联系信息** 手册中给出了官方联系方式,方便用户反馈问题或者寻求帮助。 **1.3 安装** - **在DOS和Windows下安装NASM**:通常通过下载预编译的二进制包进行安装。 - **在Unix下安装NASM**:可以通过源码编译安装,或者使用系统的包管理工具(如apt-get或yum)进行安装。 #### 二、运行NASM **2.1 NASM命令行语法** NASM提供了丰富的命令行选项,包括但不限于: - `-o`:指定输出文件名。 - `-f`:指定输出文件格式。 - `-l`:生成列表文件。 - `-M`:生成Makefile依赖关系。 - `-F`:选择调试格式。 - `-g`:启用调试信息。 - `-E`:将错误信息输出到文件。 - `-s`:将错误信息输出到标准输出。 - `-i`:指定包含文件搜索路径。 - `-p`:预包含一个文件。 - `-d`:预定义一个宏。 - `-u`:取消宏定义。 - `-e`:仅预处理。 - `-a`:跳过预处理阶段。 - `-On`:指定多遍优化。 - `-t`:使用TASM兼容模式。 - `-w`:控制警告信息。 - `-v`:打印版本信息。 **2.2 MASM用户速成** - **大小写敏感**:NASM区分大小写,而MASM不区分。 - **引用内存地址**:NASM需要使用方括号。 - **变量类型**:MASM会自动推断变量类型,但NASM不会。 - **内存模型**:MASM支持不同的内存模型,而NASM则不支持。 - **浮点处理**:两种汇编器在浮点运算上有差异。 - **其他不同**:包括指令集支持等方面的不同。 #### 三、NASM语言 **3.1 NASM源程序行的组成** - 每一行可以由零个或多个前缀组成,后跟指令、伪指令或注释。 - 前缀可以是标签、指令操作数、数据段定义等。 **3.2 伪指令** - **DB**:定义初始化的数据。 - **RESB**:定义未初始化的数据。 - **INCBIN**:包含其他二进制文件。 - **EQU**:定义常数。 - **TIMES**:重复指令或数据。 **3.3 有效地址** - 描述如何计算内存地址。 **3.4 常数** - **数值常数**:整数、十六进制数等。 - **字符型常数**:单个字符。 - **字符串常数**:多个字符组成的序列。 - **浮点常量**:表示小数。 **3.5 表达式** - 包括位运算符、算术运算符等。 **3.6 SEG和WRT** - `SEG`:获取段地址。 - `WRT`:确定操作数的有效地址。 **3.7 STRICT:约束优化** - 控制是否允许对指令的优化。 **3.8 临界表达式** - 在某些条件下才被评估的表达式。 **3.9 本地Labels** - 局限于某个范围内的标签。 #### 四、NASM预处理器 **4.1 单行的宏** - **%define**:定义单行宏。 - **%xdefine**:增强了%define的功能。 - **%+**:连接单行宏。 - **%undef**:取消宏定义。 - **%assign**:预处理器变量赋值。 **4.2 字符串处理宏** - **%strlen**:计算字符串长度。 - **%substr**:获取子字符串。 **4.3 多行宏** - **%macro**:定义多行宏。 - **重载**:多行宏可以根据参数数量进行重载。 - **Macro-Local Labels**:宏内部使用的局部标签。 - **不确定的宏参数个数**:宏可以接受任意数量的参数。 - **缺省宏参数**:为宏参数提供默认值。 - **%0**:宏参数个数计数器。 - **%rotate**:循环移动宏参数。 - **连结宏参数**:将多个宏参数合并为一个。 - **条件代码作为宏参数**:宏可以接收条件表达式作为参数。 - **禁止列表扩展**:阻止宏参数展开为列表。 **4.4 条件汇编** - **%ifdef**:测试单行宏是否存在。 - **ifmacro**:测试多行宏是否存在。 - **%ifctx**:测试上下文栈。 - **%if**:测试任意数值表达式。 - **%ifidn**/**%ifidni**:测试文本是否相同。 - **%ifid**/**%ifnum**/**%ifstr**:测试记号类型。 - **%error**:报告用户自定义错误。 **4.5 预处理器循环** - **%rep**:循环执行一段代码。 通过以上知识点的总结,我们可以看到NASM不仅是一个强大的汇编器,还提供了一系列高级功能,使得开发者能够更加灵活地编写和维护汇编语言代码。无论是对于学习汇编语言的新手还是已经熟悉其他汇编器的开发者来说,NASM都是一款值得深入研究的工具。
- fccmw2014-03-20不是很全啊,还不如找本书看看。
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- oracle和mysql区别.docx
- 华为云IOTDA调试助手.apk
- e2studio开发RA0E1(6)-GPIO外部中断(IRQ)配置
- COMSOL石墨烯 钙钛矿太阳能电池仿真模型 光电耦合模型,文章复现
- CampusOrderingSystem.exe
- simpack,铁路车辆建模资料 380带齿轮箱和不带齿轮箱两种(默认不带齿轮箱)
- ThinkPHP框架开发的精品网络公司整站源码无减删+微信端接口+WAP手机端
- comsol激光双温模型 金属 半导体 【脉冲激光移动烧蚀材料仿真】 1、脉冲激光移动烧蚀材料仿真 2、采用COMSOL固体传热
- 三相VIENNA整流器仿真(全网独一份) matlab仿真 T型vienna整流器仿真 双闭环PI控制,中点电位平衡控制,SPW
- GA-RBF回归预测,基于遗传算法(GA)优化径向基神经网络(RBF)的数据回归预测,多变量输入单输出 优化参数为扩散速度,采用