汇编语言:基于x86处理器(原书第7版) pdf

汇编语言:基于x86处理器(原书第7版)

内容简介

本书是汇编语言课程的经典教材,系统介绍x86和Intel64处理器的汇编语言编程和架构。前9章为汇编语言的核心概念,包括:汇编语言基础,x86处理器架构,数据传送、寻址和算术运算,过程,条件处理,整数运算,高级过程,以及字符串和数组。本书为原书第7版,增加了部分实例程序的讨论,补充了更多的复习题和关键术语,介绍了64位编程;还有配套的网上资料,提供完整的程序清单、复习题答案和编程练习的解决方案。

作者简介

目录

出版者的话

译者序

前言

第1章 基本概念 1

1.1 欢迎来到汇编语言的世界 1

1.1.1 读者可能会问的问题 2

1.1.2 汇编语言的应用 4

1.1.3 本节回顾 5

1.2 虚拟机概念 5

1.3 数据表示 7

1.3.1 二进制整数 7

1.3.2 二进制加法 8

1.3.3 整数存储大小 9

1.3.4 十六进制整数 10

1.3.5 十六进制加法 11

1.3.6 有符号二进制整数 12

1.3.7 二进制减法 13

1.3.8 字符存储 14

1.3.9 本节回顾 15

1.4 布尔表达式 16

1.4.1 布尔函数真值表 18

1.4.2 本节回顾 18

1.5 本章小结 19

1.6 关键术语 19

1.7 复习题和练习 20

1.7.1 简答题 20

1.7.2 算法基础 21

第2章 x86处理器架构 23

2.1 一般概念 23

2.1.1 基本微机设计 23

2.1.2 指令执行周期 24

2.1.3 读取内存 25

2.1.4 加载并执行程序 26

2.1.5 本节回顾 26

2.2 32位x86处理器 27

2.2.1 操作模式 27

2.2.2 基本执行环境 27

2.2.3 x86内存管理 30

2.2.4 本节回顾 30

2.3 64位x86-64处理器 30

2.3.1 64位操作模式 31

2.3.2 基本64位执行环境 31

2.4 典型x86计算机组件 32

2.4.1 主板 32

2.4.2 内存 34

2.4.3 本节回顾 34

2.5 输入输出系统 34

2.5.1 I/O访问层次 34

2.5.2 本节回顾 36

2.6 本章小结 36

2.7 关键术语 37

2.8 复习题 38

第3章 汇编语言基础 39

3.1 基本语言元素 39

3.1.1 第一个汇编语言程序 39

3.1.2 整数常量 40

3.1.3 整型常量表达式 41

3.1.4 实数常量 41

3.1.5 字符常量 42

3.1.6 字符串常量 42

3.1.7 保留字 42

3.1.8 标识符 43

3.1.9 伪指令 43

3.1.10 指令 44

3.1.11 本节回顾 46

3.2 示例:整数加减法 46

3.2.1 AddTwo程序 46

3.2.2 运行和调试AddTwo程序 48

3.2.3 程序模板 52

3.2.4 本节回顾 52

3.3 汇编、链接和运行程序 53

3.3.1 汇编–链接–执行周期 53

3.3.2 列表文件 53

3.3.3 本节回顾 55

3.4 定义数据 55

3.4.1 内部数据类型 55

3.4.2 数据定义语句 55

3.4.3 向AddTwo程序添加一个变量 56

3.4.4 定义BYTE和SBYTE数据 57

3.4.5 定义WORD和SWORD数据 59

3.4.6 定义DWORD和SDWORD数据 59

3.4.7 定义QWORD数据 60

3.4.8 定义压缩BCD(TBYTE)数据 60

3.4.9 定义浮点类型 61

3.4.10 变量加法程序 61

3.4.11 小端顺序 62

3.4.12 声明未初始化数据 62

3.4.13 本节回顾 63

3.5 符号常量 63

3.5.1 等号伪指令 63

3.5.2 计算数组和字符串的大小 64

3.5.3 EQU伪指令 65

3.5.4 TEXTEQU伪指令 66

3.5.5 本节回顾 66

3.6 64位编程 67

3.7 本章小结 68

3.8 关键术语 69

3.8.1 术语 69

3.8.2 指令、运算符和伪指令 70

3.9 复习题和练习 70

3.9.1 简答题 70

3.9.2 算法基础 71

3.10 编程练习 71

第4章 数据传送、寻址和算术运算 73

4.1 数据传送指令 73

4.1.1 引言 73

4.1.2 操作数类型 73

4.1.3 直接内存操作数 74

4.1.4 MOV指令 75

4.1.5 整数的全零/符号扩展 76

4.1.6 LAHF和SAHF指令 77

4.1.7 XCHG指令 78

4.1.8 直接–偏移量操作数 78

4.1.9 示例程序(Moves) 79

4.1.10 本节回顾 80

4.2 加法和减法 81

4.2.1 INC和DEC指令 81

4.2.2 ADD指令 81

4.2.3 SUB指令 81

4.2.4 NEG指令 82

4.2.5 执行算术表达式 82

4.2.6 加减法影响的标志位 82

4.2.7 示例程序(AddSubTest) 85

4.2.8 本节回顾 86

4.3 与数据相关的运算符和伪指令 87

4.3.1 OFFSET运算符 87

4.3.2 ALIGN伪指令 88

4.3.3 PTR运算符 88

4.3.4 TYPE运算符 89

4.3.5 LENGTHOF运算符 89

4.3.6 SIZEOF运算符 90

4.3.7 LABEL伪指令 90

4.3.8 本节回顾 90

4.4 间接寻址 91

4.4.1 间接操作数 91

4.4.2 数组 91

4.4.3 变址操作数 92

4.4.4 指针 93

4.4.5 本节回顾 95

4.5 JMP和LOOP指令 95

4.5.1 JMP指令 96

4.5.2 LOOP指令 96

4.5.3 在Visual Studio调试器中显示数组 97

4.5.4 整数数组求和 98

4.5.5 复制字符串 98

4.5.6 本节回顾 99

4.6 64位编程 99

4.6.1 MOV指令 99

4.6.2 64位的SumArray程序 100

4.6.3 加法和减法 101

4.6.4 本节回顾 102

4.7 本章小结 102

4.8 关键术语 104

4.8.1 术语 104

4.8.2 指令、运算符和伪指令 104

4.9 复习题和练习 104

4.9.1 简答题 104

4.9.2 算法基础 106

4.10 编程练习 107

第5章 过程 108

5.1 堆栈操作 108

5.1.1 运行时堆栈(32位模式) 108

5.1.2 PUSH和POP指令 110

5.1.3 本节回顾 112

5.2 定义并使用过程 112

5.2.1 PROC伪指令 112

5.2.2 CALL和RET指令 114

5.2.3 过程调用嵌套 115

5.2.4 向过程传递寄存器参数 116

5.2.5 示例:整数数组求和 116

5.2.6 保存和恢复寄存器 118

5.2.7 本节回顾 119

5.3 链接到外部库 119

5.3.1 背景知识 119

5.3.2 本节回顾 120

5.4 Irvine32链接库 120

5.4.1 创建库的动机 120

5.4.2 概述 122

5.4.3 过程详细说明 123

5.4.4 库测试程序 133

5.4.5 本节回顾 139

5.5 64位汇编编程 139

5.5.1 Irvine64链接库 139

5.5.2 调用64位子程序 140

5.5.3 x64调用规范 140

5.5.4 调用过程示例 141

5.6 本章小结 142

5.7 关键术语 143

5.7.1 术语 143

5.7.2 指令、运算符和伪指令 143

5.8 复习题和练习 143

5.8.1 简答题 143

5.8.2 算法基础 146

5.9 编程练习 146

第6章 条件处理 148

6.1 条件分支 148

6.2 布尔和比较指令 148

6.2.1 CPU状态标志 149

6.2.2 AND指令 149

6.2.3 OR指令 150

6.2.4 位映射集 151

6.2.5 XOR指令 152

6.2.6 NOT指令 153

6.2.7 TEST指令 153

6.2.8 CMP指令 154

6.2.9 置位和清除单个CPU标志位 155

6.2.10 64位模式下的布尔指令 155

6.2.11 本节回顾 156

6.3 条件跳转 156

6.3.1 条件结构 156

6.3.2 Jcond指令 156

6.3.3 条件跳转指令类型 157

6.3.4 条件跳转应用 159

6.3.5 本节回顾 163

6.4 条件循环指令 163

6.4.1 LOOPZ和LOOPE指令 163

6.4.2 LOOPNZ和LOOPNE指令 164

6.4.3 本节回顾 164

6.5 条件结构 164

6.5.1 块结构的IF语句 165

6.5.2 复合表达式 167

6.5.3 WHILE循环 168

6.5.4 表驱动选择 169

6.5.5 本节回顾 171

6.6 应用:有限状态机 172

6.6.1 验证输入字符串 172

6.6.2 验证有符号整数 172

6.6.3 本节回顾 176

6.7 条件控制流伪指令 176

……

感悟与笔记

汇编语言的世界观

1、每种编程语言都有自己的世界观。

C语言的世界观认为世界是由一个一个过程组成的,过程之间的相互调用是世界运行的根本

C++、JAVA的世界观认为世界是由一个一个对象组成的,对象之间相互影响是世界运行的根本

汇编语言认为世界是由 CPU+寄存器内存+内存主组成的。CPU不断地处理寄存器和内存中的信息是世界运行的根本。其中信息可以是指令,也可以是指令要处理的数据。信息都是二进制的,这是由数字电路的特性决定的。

2、学习汇编语言的意义

提升内功:汇编语言是软件工程师“入门语言”。“入门”说所有的软件工程师都要学习汇编语言。“入门”指的是汇编语言的在所有编程语言中的位置。她是级别最低的语言。她的下一级是人类无法直接读懂的机器语言,很难用机器语言直接编写软件。而机器语言再下一级就是电子电路了,那是硬件电气工程师的工作范畴,因此汇编语言应该是软件工程师能接触到的最低一级的编程语言。学习汇编语言对了解计算机软件软件的运行过程有极大的帮助。

现实作用:虽然目前高级别语言层出不穷但汇编语言仍有其用武之地,一些专用设备的嵌入式程序,如空调、电话、打印机等。之外大型程序某些小的功能可以共同汇编语言编写达到优化性能的效果,游戏就是个例子,为什么国内游戏效果没有国外游戏的效果好,但运行起来特别的卡顿。

汇编语言与机器语言的关系

上文提到汇编语言的下一等级是机器语言,那么汇编语言与机器语言是什么关系呢?

其实汇编语言只是机器语言的【助记符】,也就是说汇编语言与机器语言是一一对应的,每一个汇编指令都对应着一个机器指令的二进制编码。当人类用汇编语言写完程序后,就可以由汇编器将汇编指令翻译成对应的机器指令二进制编码,最终形成二进制的可执行文件。

因此汇编语言对学习黑客技术也有很大的好处,因为可以将已经形成二进制可执行文件反汇编成汇编语言来阅读。而这是高级语言无法具有的特性。

会员免费下载

链接:https://pan.baidu.com/s/1I6nP1HO3WAkGMG3Je38nhQ

提取码: ****** 查看

¥69/年 开通VIP会员

成为本站VIP会员即可无限下载。 请先点击百度网盘,看资源是否还在,不在请点击链接通知站长补资源。

资源标签点击标签可查看对应分类的资源

汇编语言

资源推荐

免费 图解数据结构:使用Java

C++ 程序设计语言:第4部分 标准库(原书第4版)

C++编程思想(两卷合订本)

CSS世界

JavaScript DOM编程艺术(第2版)

C++ Primer Plus(第6版) 中文版

Vue.js快速入门

Java编程思想(第4版) [thinking in java]

Copyright © 2021-2022 知识猫. All Rights Reserved.