《80386程序员参考手册》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:章立生等编
  • 出 版 社:北京科海集团公司培训中心
  • 出版年份:2222
  • ISBN:
  • 页数:357 页
图书介绍:

目录 1

第一章 80386引论 1

1.1 本手册的组织 1

1.1.1 第一部分——应用程序设计 2

1.1.2 第二部分——系统程序设计 2

1.1.3 第三部分——兼容性 3

1.1.4 第四部分——指令系统 3

1.3.2 未定义位和软件兼容性 4

1.3.1 数据结构格式 4

1.3 表示约定 4

1.2 相关的文献 4

1.1.5 附录 4

1.3.3 指令操作数 5

1.3.4 十六进制数 5

第一部分 应用程序设计 6

第二章 基本程序设计模型 6

2.1 存贮器组织和分段 6

2.1.1 “平面”模型 6

2.1.2 分段模型 7

2.2 数据类型 8

2.3 寄存器 10

2.3.1 通用寄存器 10

2.3.2 段寄存器 10

2.3.3 堆栈的实现 12

2.3.4 标志寄存器 13

2.3.4.1 状态标志 13

2.3.4.2 控制标志 14

2.3.4.3 指令指针 14

2.4 指令格式 14

2.5 操作数选择 15

2.5.1 立即操作数…………………………………………………………………(16 )2.5.2 寄存器操作数 16

2.5.3 存贮器操作数 16

2.5.3.1 段选择 17

2.5.3.2 有效地址计算 18

2.6 中断和异常 20

第三章 应用指令系统 22

3.1 数据移动指令 22

3.1.1 通用数据移动指令 22

3.1.2 堆栈操作指令 23

3.1.3 类型转换指令 24

3.2 二进制算术运算指令 25

3.2.1 加法和减法指令 26

3.2.2 比较和符号改变指令 26

3.2.3 乘法指令 26

3.2.4 除法指令 27

3.3 十进制算术运算指令 27

3.3.1 压缩的BCD调整指令 28

3.3.2 未压缩的BCD调整指令 28

3.4 逻辑运算指令 28

3.4.3 位扫描指令 29

3.4.1 布尔运算指令 29

3.4.2 位测试和修改指令 29

3.4.4 移位和循环移位指令 30

3.4.4.1 移位指令 30

3.4.4.2 双倍移位指令 31

3.4.4.3 循环移位指令 32

3.4.4.4 使用双移位指令作快速“位块传输” 33

3.4.4.5 快速位串插入和提取 34

3.5.1.1 跳转指令 37

3.5.1 无条件转移指令 37

3.4.6 测试指令 37

3.4.5 按条件字节设置指令 37

3.5 控制转移指令 37

3.5.1.2 调用指令 38

3.5.1.3 返回和中断返回指令 38

3.5.2 条件转移指令 38

3.5.2.1 条件跳转指令 38

3.5.2.2 循环指令 38

3.5.2.3 执行一次循环或重复零次 40

3.5.3 软件产生的中断 40

3.6.1 重复前缀 41

3.6 串和字符转换指令 41

3.6.2 索引和方向标志控制 42

3.6.3 串指令 42

3.7 块结构语言的指令 43

3.8 标志控制指令 47

3.8.1 进位和方向标志控制指令 47

3.8.2 标志传递指令 47

3.9 协处理器接口指令 48

3.10 段寄存器指令 48

3.10.2 远程控制转移指令 49

3.10.1 段寄存器传递指令 49

3.10.3 数据指针指令 50

3.11 其它指令 50

3.11.1 地址计算指令 50

3.11.2 空操作指令 51

3.11.3 转换指令 51

4.1.1 系统标志 52

4.1 系统寄存器 52

第四章 系统体系结构 52

第二部分 系统程序设计 52

4.1.2 存贮器管理寄存器 53

4.1.3 控制寄存器 53

4.1.4 调试寄存器 54

4.1.5 测试寄存器 54

4.2 系统指令 54

第五章 存贮器管理 57

5.1 段转换 57

5.1.1 描述符 58

5.1.3 选择指针 59

5.1.2 描述符表 59

5.1.4 段寄存器 60

5.2 页面变换 61

5.2.1 页面框架 61

5.2.2 线性地址 61

5.2.3 页表 61

5.2.4 页表项 62

5.2.4.1 页面框架地址 62

5.2.4.2 出现位 62

5.2.5 页面转换高速缓存 63

5.2.4.3 访问位和修改位 63

5.2.4.4 读/写位和用户/管理员位 63

5.3 联合段变换和页面变换 64

5.3.1 “平面”体系结构 64

5.3.2 跨过几个页面的段 64

5.3.3 跨过几个段的页面 65

5.3.4 未对界的页面和段界线 65

5.3.5 对界的页面和段界线 65

5.3.6 每个段的页表 65

6.3 段级保护 66

6.2 80386保护机构概述 66

6.1 为什么要保护 66

第六章 保护 66

6.3.1 描述符存放保护参数 67

6.3.1.1 类型检查 68

6.3.1.2 界限检查………………………………………………………………(70 )6.3.1.3 特权级 70

6.3.2 限制对数据的访问 71

6.3.3 限制控制转移 72

6.3.4 门描述符保护过程入口点 73

6.3.4.1 堆栈切换 75

6.3.4.2 从一个过程返回 77

6.3.5 一些为操作系统保留的指令 78

6.3.5.1 特权指令 78

6.3.5.2 敏感指令 78

6.3.6 关于指针合法性的指令 78

6.3.6.1 描述符合法性 80

6.3.6.2 指针一致性和RPL 80

6.4.1.2 类型检查……………………………………………………………( 81 )6.4.2 联合两级页表的保护 81

6.4.1.1 限制可寻址区间 81

6.4.3 对页面保护的取代 81

6.4 页面级保护 81

6.4.1 页表项含有保护参数 81

6.5 联合页面和段保护 82

第七章 多任务 84

7.1 任务状态段………………………………………………………………(84 )7.2 TSS描述符 85

7.3 任务寄存器 86

7.4 任务门描述符 87

7.5 任务切换 88

7.6 任务链接 90

7.6.1 忙碌位防止循环 91

7.6.2 修改任务链接 91

7.7.2 任务的逻辑地址空间 92

7.7 任务地址空间 92

7.7.1 任务的线性地址到物理地址的变换 92

第八章 输入/输出 94

8.1 I/O寻址 94

8.1.1 I/O地址空间 94

8.1.2 存贮器变换的I/O 94

8.2 I/O指令 95

8.2.1 寄存器I/O指令 95

8.2.2 块I/O指令 96

8.3 保护和I/O 96

8.3.2 I/O允许位图 97

8.3.1 I/O特权级 97

第九章 异常和中断 99

9.1 识别中断 99

9.2 使能和禁止中断 100

9.2.1 NMI屏蔽进一步的NMI 100

9.2.2 IF屏蔽INTR 101

9.2.3 RF屏蔽调试故障 101

9.2.4 MOV或POP到SS屏蔽某些异常和中断 101

9.3 在同时出现的中断和异常中的优先权 101

9.4 中断描述符表 102

9.5 IDT描述符 103

9.6 中断任务和中断过程 103

9.6.1 中断过程 103

9.6.1.1 中断过程的堆栈 104

9.6.1.2 从中断过程返回 105

9.6.1.3 中断过程的标志使用 105

9.6.1.4 中断过程中的保护 105

9.6.2 中断任务 105

9.8 异常条件 106

9.7 错误代码 106

9.8.1 中断0——除法错 107

9.8.2 中断1——调试异常 107

9.8.3 中断3——断点 107

9.8.4 中断4——溢出 107

9.8.5 中断5——界限检查 107

9.8.6 中断6——无效操作码 107

9.8.7 中断7——协处理器不可用 108

9.8.8 中断8——双故障 108

9.8.9 中断9——协处理器段溢出 109

9.8.10 中断10—非法TSS 110

9.8.11 中断11——段不出现 110

9.8.12 中断12——堆栈异常 111

9.8.13 中断13——一般保护异常 111

9.8.14 中断14——页面故障 112

9.8.14.1 任务切换过程中的页面故障 113

9.8.14.2 具有不一致堆栈指针的页面故障 113

9.8.15 中断16——协处理器错 114

9.9 异常概述 115

9.10 错误代码概述 116

10.1 复位后的处理器状态 117

第十章 初始化 117

10.2 对实地址方式的软件初始化………………………………………………(117 )10.2.1 堆栈 118

10.2.2 中断表 118

10.2.3 第一条指令 118

10.3 切换到保护方式 118

10.4.3 全局描述符表 119

10.4.4 页表 119

10.4.5 第一个任务 119

10.4.2 堆栈 119

10.4.1 中断描述符表 119

10.4 为保护方式的软件初始化 119

10.5 初始化举例 120

10.6 TLB测试 128

10.6.1 TLB的结构 128

10.6.2 测试寄存器 128

10.6.3 测试操作 130

第十一章 协处理和多道处理 131

11.1 协处理 131

11.1.1 协处理器识别 131

11.1.2 ESC和WAIT指令 131

11.1.5.2 中断9——协处理器段溢出 132

11.1.5.1 中断7——协处理器不可用 132

11.1.3 EM和MP标志 132

11.1.5 协处理器异常 132

11.1.4 任务切换标志 132

11.1.5.3 中断16——协处理器错 133

11.2 一般多道处理 133

11.2.1 Lock和Lock#信号 133

11.2.2 自动封锁 134

11.2.3 高速缓存考虑 134

12.1 体系结构的调试特性 136

第十二章 调试 136

12.2 调试寄存器 137

12.2.1 调试地址寄存器(DR0~DR3) 137

12.2.2 调试控制寄存器(DR7) 138

12.2.3 调试状态寄存器(DR6) 138

12.2.4 断点域识别 139

12.3 调试异常 140

12.3.1 中断1——调试异常 140

12.3.1.1 指令地址断点 140

12.3.1.4 单步自陷 141

12.3.1.3 一般测试故障 141

12.3.1.2 数据地址断点 141

12.3.1.5 任务切换断点 142

12.3.2 中断3——断点异常 142

第三部分 兼容性 143

第十三章 执行80286保护方式代码 143

13.1 80286代码作为80386的一个子集执行 143

13.2 执行80286任务的两种方法 143

13.3.3 新的描述符类型代码 144

13.3.5 增加的异常 144

13.3.4 受限的LOCK语义 144

13.3.2 描述符的保留字 144

13.3.1 80286 24位物理地址空间的环绕 144

13.3 与80286的差别 144

第十四章 80386实地址方式 146

14.1 物理地址形成 146

14.2 寄存器和指令 147

14.3 中断和异常处理 147

14.4 进入和离开实地址方式 148

14.5 切换回到实地址方式 148

14.7 与8086的差别 149

14.6 实地址方式异常 149

14.8 与80286实地址方式的不同 152

14.8.1 总线封锁 152

14.8.2 第一条指令的位置 153

14.8.3 通用寄存器的初始值 153

14.8.4 MSW的初始化 153

第十五章 虚拟8086方式 154

15.1 执行8086代码 154

15.1.1 寄存器和指令 154

15.2 V86任务的结构 155

15.1.2 线性地址形成 155

15.2.1 为V86任务使用分页功能 156

15.2.2 在V86任务中的保护 156

15.3 进入和离开V86方式 157

15.3.1 通过任务切换的变换 158

15.3.2 通过自陷门和中断门的变换 158

15.4 增加的敏感指令 159

15.4.1 模拟8086操作系统调用 159

15.5.3 专用I/O缓冲区 160

15.5.2 存贮器变换的I/O 160

15.5.1 I/O变换的I/O 160

15.5 虚拟I/O 160

15.4.2 虚拟中断使能标志 160

15.6 与8086的差别 161

15.7 与80286实地址方式的差别 162

第十六章 混合16位和32位代码 164

16.1 80386怎样实现16位和32位特性 164

16.2 混合32位和16位操作 165

16.4.1 代码段指针的尺寸 166

16.4 在混合的代码段之中转移控制 166

16.3 在混合的代码段之中共享数据段 166

16.4.2 为控制转移的堆栈管理 167

16.4.2.1 为一个CALL控制操作数尺寸 168

16.4.2.2 改变调用的尺寸 168

16.4.3 中断控制转移 168

16.4.4 参数变换 169

16.4.5 接口过程 169

17.1.3 堆栈的操作数尺寸属性 170

17.1.2 操作数尺寸和地址尺寸指令前缀 170

17.1.1 缺省段属性 170

17.1 操作数尺寸和地址尺寸属性 170

第十七章 80386指令系统 170

第四部分 指令系统 170

17.2 指令格式 171

17.2.1 Mod R/M和SIB字节 172

17.2.2 如何阅读指令系统 173

17.2.2.1 操作码 173

17.2.2.2 指令 177

17.2.2.3 时钟 178

17.2.2.5 操作 179

17.2.2.4 描述 179

17.2.2.6 描述 183

17.2.2.7 受影响的标志 183

17.2.2.8 保护方式异常 183

17.2.2.9 实地址方式异常 184

17.2.2.10 虚拟8086方式异常 184

附录A 操作码图表 318

附录B 全部标志的相互引用 325

附录C 状态标志小结 327

附录D 条件码 329

附录E 指令格式和时序 331