编辑推荐
全面讲解IA-32结构系列(80x86系列)处理器的32位编程。
新目标:理解系统原理,提升编程技能。
新方法:依托高级语言,讲解低级语言。
新平台:利用虚拟机器,运行示例代码。
内容简介
本书设定新目标,采用新方法,基于新平台,讲解IA��32结构系列(80x86系列)CPU的32位编程。本书分为4个部分: 第一部分利用VC 2010环境的嵌入汇编和目标代码,介绍IA��32系列(80x86系列)CPU的基本功能和32位编程技术; 第二部分利用开源汇编器NASM、开源虚拟机VirtualBox和模拟器Bochs,介绍汇编语言和计算机系统底层输入输出的实现方式; 第三部分详细讲解保护方式编程技术,生动展示保护方式编程细节; 第四部分简要说明相关软件工具的使用。
本书依托高级语言,讲解低级语言;利用虚拟平台,演示系统原理。第一部分和第二部分可作为高校计算机及电子信息类专业学生学习汇编语言的教材,第三部分可作为编程爱好者学习保护方式编程技术的教材或参考书。
目录
第1章基础知识
1.1CPU简介
1.1.1目标代码
1.1.2基本功能
1.2汇编语言概念
1.2.1机器指令
1.2.2汇编格式指令
1.2.3汇编语言及其优缺点
1.3数据的表示和存储
1.3.1数值数据的表示
1.3.2非数值数据的表示
1.3.3基本数据类型
1.3.4数据的存储
习题
第2章IA��32处理器基本功能
2.1IA��32处理器简介
2.1.1IA��32系列处理器
2.1.2保护方式和实地址方式
2.2通用寄存器及使用
2.2.1通用寄存器
2.2.2简单传送指令
2.2.3简单加减指令
2.2.4VC嵌入汇编和实验
2.3标志寄存器及使用
2.3.1标志寄存器
2.3.2状态标志
2.3.3状态标志操作指令
2.3.4带进位加减指令
2.4段寄存器及使用
2.4.1存储器分段
2.4.2逻辑地址
2.4.3段寄存器
2.5寻址方式
2.5.1立即寻址方式和寄存器寻址方式
2.5.232位的存储器寻址方式
2.5.3取有效地址指令
2.6指令指针寄存器和简单控制转移
2.6.1指令指针寄存器
2.6.2常用条件转移指令
2.6.3比较指令和数值大小比较
2.6.4简单的无条件转移指令
2.7堆栈和堆栈操作
2.7.1堆栈
2.7.2堆栈操作指令
习题
第3章程序设计初步
3.1堆栈的作用
3.1.1过程调用和返回指令
3.1.2参数传递
3.1.3局部变量
3.2算术逻辑运算指令
3.2.1乘除运算指令
3.2.2逻辑运算指令
3.2.3移位指令
3.3分支程序设计
3.3.1分支程序设计示例
3.3.2无条件和条件转移指令
3.3.3多路分支的实现
3.4循环程序设计
3.4.1循环程序设计示例
3.4.2循环指令
3.4.3多重循环设计举例
3.5子程序设计
3.5.1子程序设计要点
3.5.2子程序设计举例
3.5.3子程序调用方法
习题
第4章字符串操作和位操作
4.1字符串操作
4.1.1字符串操作指令
4.1.2重复操作前缀
4.1.3应用举例
4.2位操作
4.2.1位操作指令
4.2.2应用举例
4.3条件设置字节指令
4.3.1条件设置字节指令概述
4.3.2应用举例
习题
第5章VC目标代码的阅读理解
5.1汇编语言形式的目标代码
5.1.1基本样式
5.1.2符号化表示
5.2C语言部分编译的解析
5.2.1类型的转换
5.2.2表达式求值
5.2.3指针的本质
5.2.4结构体变量
5.3C++部分功能实现细节
5.3.1引用
5.3.2通过引用传递参数
5.3.3函数重载
5.3.4虚函数
5.4目标程序的优化
5.4.1关于程序优化
5.4.2使大小最小化
5.4.3使速度最大化
5.4.4内存地址对齐
5.5C库函数分析
5.5.1函数strlen
5.5.2函数strpbrk
5.5.3函数memset
5.6C程序的目标代码
5.6.1Base64编码操作
5.6.2源程序
5.6.3目标程序
习题
第6章汇编语言
6.1实方式执行环境
6.1.1寄存器和指令集
6.1.2存储器分段管理
6.1.316位的存储器寻址方式
6.2源程序和语句
6.2.1汇编语言源程序
6.2.2语句及其格式
6.3操作数表示
6.3.1常数
6.3.2数值表达式
6.3.3有效地址
6.3.4数据类型说明
6.4伪指令语句和变量
6.4.1数据定义语句
6.4.2存储单元定义语句
6.4.3常数符号声明语句
6.4.4演示举例
6.5段声明和段间转移
6.5.1段声明语句
6.5.2无条件段间转移指令
6.5.3段间过程调用和返回指令
6.6目标文件和段模式
6.6.1目标文件
6.6.2段模式声明语句
6.7宏
6.7.1宏指令的声明和使用
6.7.2单行宏的声明和使用
6.7.3宏相关方法
习题
第7章BIOS和虚拟机
7.1BIOS及其调用
7.1.1BIOS简介
7.1.2键盘输入和显示输出
7.1.3应用举例
7.2磁盘及其读写
7.2.1磁盘简介
7.2.2磁盘读写
7.2.3主引导记录分析
7.3虚拟机
7.3.1虚拟机工作原理
7.3.2虚拟硬盘文件
7.3.3直接写屏显示方式
7.4一个简易的加载器
7.4.1加载方法
7.4.2程序加载器
7.4.3工作程序示例
习题
第8章输入输出和中断
8.1输入输出的基本概念
8.1.1I/O端口地址
8.1.2I/O指令
8.1.3数据传送方式
8.1.4实时时钟的存取
8.2查询传送方式
8.2.1查询传送流程
8.2.2实时时钟的稳妥存取
8.3中断概述
8.3.1中断的概念
8.3.2中断向量表
8.3.3中断响应过程
8.3.4内部中断
8.3.5外部中断
8.3.6中断优先级和中断嵌套
8.4中断处理程序设计
8.4.1键盘中断处理程序
8.4.2除法出错中断处理程序
8.4.3扩展显示I/O程序
8.4.4时钟显示程序
习题
第9章保护方式程序设计
9.1概述
9.1.1存储器管理
9.1.2特权级设置
9.2分段存储管理机制
9.2.1存储段
9.2.2存储段描述符
9.2.3全局和局部描述符表
9.2.4段选择子
9.2.5逻辑地址到线性地址的转换
9.3存储管理寄存器和控制寄存器
9.3.1存储管理寄存器
9.3.2控制寄存器
9.3.3相关存取指令
9.4实方式与保护方式切换示例
9.4.1实方式和保护方式切换的演示(示例一)
9.4.2不同模式代码段切换的演示(示例二)
9.4.3局部描述符表使用的演示(示例三)
9.5分页存储管理机制
9.5.1存储分页
9.5.2线性地址到物理地址的转换
9.5.3页级保护和虚拟存储器支持
9.5.4分页存储管理机制的演示(示例四)
9.6任务状态段和控制门
9.6.1系统段描述符
9.6.2门描述符
9.6.3任务状态段
9.7控制转移
9.7.1任务内相同特权级的转移
9.7.2相同特权级转移的演示(示例五)
9.7.3任务内不同特权级的变换
9.7.4特权级变换的演示(示例六)
9.7.5任务切换
9.7.6任务切换的演示(示例七)
9.8中断和异常的处理
9.8.1异常概念
9.8.2异常类型
9.8.3中断和异常的处理
9.8.4中断处理的演示(示例八)
9.8.5异常处理的演示(示例九)
9.9保护机制小结
9.9.1转移途径小结
9.9.2特权指令
习题
第10章实验工具的使用
10.1汇编器NASM的使用
10.1.1NASM简介
10.1.2NASM的使用
10.1.3链接器及其使用
10.2虚拟机管理器VirtualBox的使用
10.2.1VirtualBox简介
10.2.2VirtualBox的使用
10.2.3关于硬件加速
10.3模拟器Bochs的使用
10.3.1Bochs简介
10.3.2Bochs的配置与运行
10.3.3控制台调试
10.3.4图形化界面调试
10.4VHDWriter的使用
参考文献
精彩书摘
阅读理解高级语言源程序的目标代码,不仅有助于学习汇编语言程序设计,而且有助于提升高级语言程序设计能力。在介绍VC编译器生成的目标代码文件样式的基础上,本章解析C和C++部分语言功能的实现细节,介绍目标代码优化的相关概念和方法,讨论几个典型库函数的汇编源代码。
5.1汇编语言形式的目标代码
在微软Visual Studio 2010的VC集成开发环境中,可以由C或者C++源程序生成汇编语言形式的目标代码。本节简要介绍这样的目标代码文件的样式。
5.1.1基本样式
首先介绍项目属性页中的配置属性的相关选项值及其使用。
为了便于对比源程序和目标程序,尽量减少由编译器额外增加的指令,所以在项目属性页中的配置属性中采用如下设置。
(1) 在C/C++项下,常规的调试信息格式子项,选择“C7兼容(/Z7)”。
(2) 在C/C++项下,代码生成的基本运行时检查子项,选择“默认值”,既不进行堆栈帧的检查,也不进行未初始化变量的检查。
(3) 在C/C++项下,代码生成的缓冲区安全检查子项,选择“否(/GS-)”。
为了更清楚地观察对库函数的调用,在项目属性页中的配置属性中,在开始的常规项下,项目默认值的MFC的使用子项,选择“在静态库中使用MFC”。
在本章下面的介绍中,如果无特别说明,都采用如上所述的项目属性配置。实际上,在前面几章中所介绍的C语言程序目标代码,几乎都是在上述项目属性的配置下生成的。
在项目属性页的配置属性中,在C/C++项下,输出文件的汇编程序输出子项,如果选择“仅有程序集的列表(/FA)”,那么在编译时将生成扩展名为.asm的汇编语言形式的目标代码文件; 如果选择“带源代码的程序集(/FAs)”,那么在生成的汇编形式的目标代码中,还含有作为注释的高级语言源代码。
在项目属性页的配置属性中,在C/C++项下,优化的优化子项是主要的编译优化选项。如果选择“已禁用(/Od)”,表示不希望任何优化。如果选择“使大小最小化(/O1)”,表示希望目标代码的长度尽量短小。如果选择“使速度最大化(/O2)”,表示希望目标代码的执行速度尽量快。
【例5��1】如下C语言程序dp51是大家熟悉的一个经典程序。
……
前言/序言
随着计算资源的日益丰富和开发环境的日趋完善,直接运用汇编语言编写程序的场合越来越少,因此汇编语言课程需要新定位,汇编语言课程需要新概念。
在这样的背景下,本书设定新的目标,采用新的方法,基于新的平台,讲解IA��32结构系列(80x86系列)CPU的32位编程。学习汇编语言的新目标是深入理解计算机系统的工作原理,全面提升高级语言程序设计能力,而不再是熟练运用汇编语言编写程序。汇编语言课程将起到“上承高级语言,下启机器系统”的桥梁作用。学习汇编语言的新方法是依托高级语言。在学习汇编语言之前,通常已经具备高级语言(C或者C++语言等)程序设计的基础。通过采用嵌入汇编和分析目标代码等方法,不仅可以降低学习和掌握汇编格式指令的难度,而且有助于“知其然,知其所以然”,有助于更好地掌握高级语言。实践汇编语言的新平台是虚拟机。目前虚拟机已经十分流行,它是很理想的“裸机”。基于虚拟机不仅可以突破操作系统的约束,为所欲为地操纵“机器”,从而轻松调试设备驱动程序或者系统程序,而且有助于熟悉计算机系统的启动过程,有助于明了计算机系统硬件和软件的相互关系。
本书分为4个部分,共10章。第一部分由前五章组成,利用VC 2010环境的嵌入汇编和目标代码,讲解IA��32系列(80x86系列)CPU的基本功能和32位编程技术。第1章介绍基础知识; 第2章说明IA��32系列CPU的基本功能; 第3章和第4章讲解利用IA��32系列CPU的指令设计程序; 第5章分析VC源程序的目标代码。第二部分由第6章、第7章和第8章组成,利用汇编器NASM和虚拟机,讲解汇编语言和系统输入输出。第6章基于汇编器NASM介绍汇编语言; 第7章在介绍BIOS和主引导记录之后,说明虚拟机的原理及其使用方法; 第8章基于虚拟机讲解计算机系统底层输入输出的实现方式。第三部分是第9章,详细讲解基于IA��32系列CPU的保护方式程序设计,该章内容十分丰富。第四部分是第10章,简要说明相关工具的使用,包括开源汇编器NASM、开源虚拟机VirtualBox和开源模拟器Bochs等。
本书依托高级语言,讲解低级语言; 利用虚拟平台,演示系统原理。第一部分和第二部分可作为学习汇编语言的教材,第三部分可作为学习保护方式编程技术的教材或参考书。本书还提供教学用PPT。
杨季文撰写第1~4章和第6~9章,朱晓旭撰写第5章,胡沁涵撰写第10章,赵雷参与部分工作。杨季文负责全书统稿、定稿。
本书得到了指导老师钱培德教授的大力支持,在此表示衷心感谢。本书还得到了同事
朱巧明、吕强、李云飞和李培峰
等教授的大力帮助,在此表示感谢。还要感谢同事卢维亮、查伟忠、陈宇和王莉等老师的帮助。
由于编者时间仓促和水平所限,书中难免有不妥之处,恳请读者批评指正。
作者
2017年6月
新概念汇编语言/面向“工程教育认证”计算机系列课程规划教材 电子书 下载 mobi epub pdf txt