内容简介
本书主要从常见的x86指令系统和MIPS指令系统来讨论学习汇编语言。本书以CISC架构典型的Intel 80x86指令系统为主来学习汇编语言程序设计,同时,还对比学习RISC架构的MIPS指令系统和汇编语言程序设计。本书通过介绍MASM32和MARS的使用,使读者掌握汇编程序设计与调试,同时引入OllyDbg和Ghidra来介绍逆向工程。本书在x86和MIPS汇编程序基础的阐述上,力求条理清楚、层次分明,在x86和MIPS汇编程序设计的讲解上,提供了实例、习题,以便读者快速掌握和熟练使用所学的汇编语言。
本书可作为高等院校信息安全、计算机专业本科生的汇编语言教材及希望深入学习计算机科学的读者的自学教材,也可供使用汇编语言的工程技术人员参考。
目录介绍
第1章计算机系统概述1
1.1计算机系统分类1
1.1.1历史背景1
1.1.2三大主流芯片架构3
1.2复杂指令集与精简指令集4
1.2.1复杂指令集4
1.2.2精简指令集5
1.2.3CISC与RISC的对比6
1.3x86系统介绍 7
1.3.1冯·诺依曼结构模型和工作机理7
1.3.2CPU寄存器结构及其用途8
1.3.3存储器11
1.3.4外部设备14
1.4MIPS系统简介 14
1.4.1基本特点14
1.4.2体系分类14
1.4.3龙芯简介15
第2章x86汇编基础16
2.1汇编语言源程序16
2.1.1汇编语言源程序的结构16
2.1.2hello world程序示例 (32位)16
2.1.3汇编语言语句格式17
2.1.4伪指令19
2.2数据段定义及规范21
2.2.1数据段定义21
2.2.2存储器单位相关概念25
2.2.3复制操作符DUP的使用25
2.2.4地址计数器与对准伪操作26
2.2.5变量27
2.2.6段寻址伪指令29
2.3代码段定义及规范30
2.3.1代码段定义指令30
2.3.2算术、逻辑与关系运算符30
2.3.3数值返回运算符31
2.3.4属性修改运算符33
2.3.5运算符的优先级34
2.3.6书写规范35
2.4简化段定义35
2.4.1包含伪指令INCLUDE36
2.4.2段的简化定义36
2.4.3程序的开始和结束36
2.4.4信息显示37
2.4.5输入输出子程序库37
2.5基于MASM32的汇编开发过程演示38
2.5.1汇编程序的开发流程38
2.5.2实例44
本章习题 53
第3章80x86指令系统和寻址方式55
3.180x86数据寻址方式(32位)55
3.1.1立即寻址55
3.1.2寄存器寻址56
3.1.3存储器寻址56
3.1.4练习题59
3.2数据传送类指令59
3.2.1通用数据传送指令59
3.2.2地址传送指令62
3.2.3练习题62
3.3算术运算类指令63
3.3.1标志位63
3.3.2加法运算指令和调正指令64
3.3.3减法运算指令66
3.3.4乘法运算指令68
3.3.5除法运算指令69
3.3.6练习题70
3.4位操作类指令71
3.4.1逻辑运算指令 71
3.4.2移位指令73
3.4.3练习题75
3.5转移指令76
3.5.1无条件转移指令76
3.5.2条件转移指令78
3.5.3循环指令80
3.5.4练习题81
3.6指令运用实例82
3.6.1寻址方式实例82
3.6.2指令执行过程实例85
3.6.3指令的进位、溢出判断实例89
3.6.4指令执行与标志位改变实例91
3.6.5无条件和条件转移指令实例93
本章习题94
第4章80x86汇编语言程序设计97
4.1C语言程序的机器级表示97
4.1.1程序编码97
4.1.2过程调用指令CALL和过程返回指令RET97
4.1.3过程定义伪指令99
4.1.4参数传递99
4.1.5局部变量101
4.2顺序程序设计103
4.3C语言分支语句的机器级表示和程序设计104
4.3.1分支语句的机器级表示104
4.3.2分支程序设计示例109
4.3.3多分支程序设计113
4.3.4练习题115
4.4C语言循环语句的机器级表示和程序设计115
4.4.1循环语句的机器级表示115
4.4.2循环程序设计示例118
4.4.3双重循环程序设计119
4.4.4练习题121
4.5计算机程序逆向技术121
4.5.1计算机程序121
4.5.2逆向工程及应用124
4.5.3逆向技术原理125
4.5.4常用软件分析工具126
4.5.5OllyDbg使用示例132
本章习题137
第5章MIPS汇编基础139
5.1MIPS指令集简介139
5.1.1MIPS背景知识139
5.1.2MIPS与x86汇编下的区别139
5.1.3MIPS基本地址空间141
5.2MIPS通用寄存器和指令格式142
5.2.1MIPS寄存器142
5.2.2特殊寄存器144
5.2.3MIPS指令类型144
5.2.4访问存储器指令 146
5.2.5寻址模式147
5.2.6练习题150
5.3MIPS汇编程序框架151
5.3.1MIPS源程序框架151
5.3.2数据段151
5.3.3代码段152
5.3.4系统调用syscall152
5.3.5练习题154
5.4MARS调试工具介绍和演示154
5.4.1MARS简介154
5.4.2MARS界面154
5.4.3MARS运行155
本章习题157
第6章MIPS汇编程序设计159
6.1MIPS顺序程序设计159
6.1.1顺序程序的特点159
6.1.2算术运算类指令159
6.1.3逻辑运算类指令164
6.1.4移位指令165
6.1.5练习题167
6.2MIPS分支设计167
6.2.1置位指令167
6.2.2无条件转移指令168
6.2.3分支转移指令168
6.2.4常见的分支结构170
6.2.5练习题173
6.3MIPS循环程序设计174
6.3.1dowhile结构 174
6.3.2while结构174
6.3.3循环程序设计示例175
6.4MIPS逆向技术177
6.4.1MIPS逆向工程177
6.4.2常用软件分析工具178
6.4.3Ghidra使用示例182
本章习题187
第7章模块化程序设计189
7.1模块化程序设计概述189
7.1.1模块化程序设计的优点189
7.1.2模块化程序设计的一般原则189
7.1.3模块化程序设计的步骤190
7.2子程序结构及系统调用190
7.2.1子程序定义190
7.2.2子程序系统调用191
7.2.3保护现场与恢复现场195
7.2.4参数的传递196
7.2.5函数调用200
7.3程序的嵌套和递归201
7.3.1子程序的嵌套201
7.3.2子程序的递归204
7.4子程序调用和系统功能调用205
7.4.1子程序调用与系统功能调用之间的关系205
7.4.2系统功能调用的方法206
7.5子程序设计综合举例207
7.6多模块程序设计和宏211
7.6.1宏定义211
7.6.2宏调用和宏扩展212
7.6.3宏定义和宏调用中参数的使用213
7.6.4宏嵌套215
7.7MIPS子程序设计216
7.7.1MIPS中的子程序和函数216
7.7.2MIPS程序设计举例224
本章习题227
参考文献229