第1章 微处理器和计算机导论 1
1.1 历史背景 1
1.1.1 机械时代 1
1.1.2 电子时代 2
1.1.3 程序设计的进步 3
1.1.4 微处理器时代 4
1.1.5 现代微处理器 5
1.2 基于微处理器的PC系统 12
1.2.1 存储器和I/O系统 12
1.2.2 微处理器 17
1.3 数制 20
1.3.1 数字 20
1.3.2 按位计数法 20
1.3.3 其他数制转换到十进制 21
1.3.4 十进制转换成其他进制 22
1.3.5 二进制编码的十六进制 23
1.3.6 补码 24
1.4 计算机数据格式 24
1.4.1 ASCII和Unicode数据 25
1.4.2 BCD数据 26
1.4.3 字节数据 27
1.4.4 字数据 28
1.4.5 双字数据 30
1.4.6 实数 31
1.5 小结 32
1.6 习题 33
第2章 微处理器及其体系结构 36
2.1 微处理器的内部体系结构 36
2.1.1 程序设计模型 36
2.1.2 多功能寄存器 38
2.2 实模式存储器寻址 41
2.2.1 段和偏移 41
2.2.2 默认段和偏移寄存器 42
2.2.3 段和偏移寻址机制允许重定位 43
2.3 保护模式存储器寻址简介 43
2.3.1 选择子和描述符 44
2.3.2 程序不可见寄存器 47
2.4 内存分页 48
2.4.1 分页寄存器 48
2.4.2 页目录和页表 50
2.5 平展模式内存 51
2.6 小结 52
2.7 习题 52
第3章 寻址方式 54
3.1 数据寻址方式 54
3.1.1 寄存器寻址 57
3.1.2 立即寻址 58
3.1.3 直接数据寻址 60
3.1.4 寄存器间接寻址 63
3.1.5 基址加变址寻址 65
3.1.6 寄存器相对寻址 67
3.1.7 相对基址加变址寻址 68
3.1.8 比例变址寻址 70
3.1.9 RIP相对寻址 71
3.1.10 数据结构 71
3.2 程序存储器寻址 72
3.2.1 直接程序存储器寻址 72
3.2.2 相对程序存储器寻址 72
3.2.3 间接程序存储器寻址 73
3.3 堆栈存储器寻址 74
3.4 小结 76
3.5 习题 78
第4章 数据传送指令 80
4.1 MOV回顾 80
4.1.1 机器语言 80
4.1.2 Pentium 4和Core2的64位模式 86
4.2 PUSH/POP指令 87
4.2.1 PUSH指令 87
4.2.2 POP指令 89
4.2.3 初始化堆栈 90
4.3 装入有效地址 91
4.3.1 LEA指令 91
4.3.2 LDS、LES、LFS、LGS和LSS指令 92
4.4 数据串传送 94
4.4.1 方向标志 94
4.4.2 DI和SI 94
4.4.3 LODS指令 94
4.4.4 STOS指令 95
4.4.5 MOVS指令 96
4.4.6 INS指令 98
4.4.7 OUTS指令 99
4.5 其他数据传送指令 99
4.5.1 XCHG指令 99
4.5.2 LAHF和SAHF指令 100
4.5.3 XLAT指令 100
4.5.4 IN和OUT指令 101
4.5.5 MOVSX和MOVZX指令 102
4.5.6 BSWAP指令 103
4.5.7 CMOV指令 103
4.6 段超越前缀 103
4.7 汇编程序详述 104
4.7.1 伪指令 104
4.7.2 存储器组织 108
4.7.3 程序举例 110
4.8 小结 112
4.9 习题 113
第5章 算术和逻辑运算指令 115
5.1 加法、减法和比较指令 115
5.1.1 加法指令 115
5.1.2 减法指令 119
5.1.3 比较指令 121
5.2 乘法和除法指令 122
5.2.1 乘法指令 122
5.2.2 除法指令 124
5.3 BCD码和ASCII码算术运算指令 127
5.3.1 BCD算术运算指令 127
5.3.2 ASCII算术运算指令 128
5.4 基本逻辑运算指令 130
5.4.1 AND指令 130
5.4.2 OR指令 131
5.4.3 XOR指令 132
5.4.4 测试和位测试指令 133
5.4.5 NOT指令和NEG指令 134
5.5 移位指令和循环移位指令 134
5.5.1 移位指令 134
5.5.2 双精度移位指令 135
5.5.3 循环移位指令 136
5.5.4 位扫描指令 136
5.6 串比较指令 137
5.6.1 SCAS指令 137
5.6.2 CMPS指令 137
5.7 小结 138
5.8 习题 139
第6章 程序控制指令 141
6.1 转移指令 141
6.1.1 无条件转移指令 141
6.1.2 条件转移和条件设置 145
6.1.3 LOOP指令 148
6.2 控制汇编语言程序的流程 149
6.2.1 WHILE循环 151
6.2.2 REPEAT-UNTIL循环 152
6.3 过程 153
6.3.1 CALL指令 154
6.3.2 RET指令 156
6.4 中断概述 157
6.4.1 中断向量 157
6.4.2 中断指令 158
6.4.3 中断控制 159
6.4.4 PC机的中断 159
6.4.5 64位模式中断 160
6.5 机器控制及其他指令 160
6.5.1 控制进位标志位 160
6.5.2 WAIT指令 160
6.5.3 HLT指令 161
6.5.4 NOP指令 161
6.5.5 LOCK前缀 161
6.5.6 ESC指令 161
6.5.7 BOUND指令 161
6.5.8 ENTER和LEAVE指令 161
6.6 小结 162
6.7 习题 163
第7章 在C/C++中使用汇编语言 165
7.1 在16位DOS应用程序中使用汇编语言与C/C++语言 165
7.1.1 基本规则和简单程序 166
7.1.2 _asm块中不能使用的MASM功能 167
7.1.3 使用字符串 167
7.1.4 使用数据结构 169
7.1.5 混合语言编程的例子 171
7.2 在32位应用程序中使用汇编语言与Visual C/C++语言 172
7.2.1 使用控制台I/O访问键盘和显示器的例子 173
7.2.2 直接访问I/O端口 174
7.2.3 开发Windows的Visual C++应用程序 174
7.3 汇编和C++混合目标码 180
7.3.1 用Visual C++链接汇编语言 181
7.3.2 在C/C++程序中添加新的汇编语言指令 184
7.4 小结 185
7.5 习题 185
第8章 微处理器程序设计 187
8.1 模块化程序设计 187
8.1.1 汇编程序和链接程序 187
8.1.2 PUBLIC和EXTRN 189
8.1.3 库 190
8.1.4 宏 193
8.2 使用键盘和视频显示器 195
8.2.1 读取键盘 195
8.2.2 使用视频显示器 198
8.2.3 在程序中使用定时器 201
8.2.4 鼠标 202
8.3 数据转换 204
8.3.1 二进制转换为ASCII码 204
8.3.2 ASCII码转换为二进制 205
8.3.3 显示和读入十六进制数 206
8.3.4 使用查找表实现数据转换 208
8.3.5 使用查找表的示例程序 209
8.4 磁盘文件 210
8.4.1 磁盘的组织 211
8.4.2 文件名 212
8.4.3 顺序存取文件 212
8.4.4 随机存取文件 220
8.5 程序举例 222
8.5.1 时间/日期显示程序 222
8.5.2 数字排序程序 223
8.5.3 数据加密 225
8.6 小结 226
8.7 习题 227
第9章 8086/8088硬件特性 228
9.1 引脚和引脚功能 228
9.1.1 引脚 228
9.1.2 电源要求 229
9.1.3 直流特性 229
9.1.4 引脚定义 229
9.2 时钟产生器8284A 232
9.2.1 8284A时钟产生器 232
9.2.2 8284A的操作 233
9.3 总线缓冲及锁存 233
9.3.1 多路分离总线 234
9.3.2 缓冲系统 236
9.4 总线时序 237
9.4.1 基本的总线操作 237
9.4.2 一般的时序 238
9.4.3 读时序 238
9.4.4 写时序 241
9.5 就绪和等待状态 241
9.5.1 READY输入 241
9.5.2 RDY和8284A 242
9.6 最小模式与最大模式 244
9.6.1 最小模式操作 244
9.6.2 最大模式操作 244
9.6.3 8288总线控制器 244
9.7 小结 246
9.8 习题 246
第10章 存储器接口 248
10.1 存储器器件 248
10.1.1 存储器引脚 248
10.1.2 ROM存储器 249
10.1.3 静态RAM(SRAM)器件 251
10.1.4 动态RAM(DRAM)存储器 254
10.2 地址译码 258
10.2.1 为什么要进行存储器译码 258
10.2.2 简单的与非门译码器 258
10.2.3 3-8线译码器(74LS138) 259
10.2.4 双2-4线译码器(74LS139) 261
10.2.5 PLD可编程译码器 262
10.3 8088和80188(8位)存储器接口 265
10.3.1 基本的8088/80188存储器接口 265
10.3.2 与快闪存储器接口 268
10.3.3 错误校正 270
10.4 8086、80186、80286和80386SX(16位)存储器接口 271
10.5 80386DX和80486(32位)存储器接口 278
10.5.1 存储体 278
10.5.2 32位存储器接口 279
10.6 Pentium~Core2(64位)存储器接口 281
10.7 DRAM 284
10.7.1 DRAM回顾 284
10.7.2 EDO存储器 286
10.7.3 SDRAM 286
10.7.4 DDR 286
10.7.5 DRAM控制器 287
10.8 小结 287
10.9 习题 288
第11章 基本I/O接口 289
11.1 I/O接口概述 289
11.1.1 I/O指令 289
11.1.2 独立编址I/O与存储器映像I/O 290
11.1.3 PC机I/O映像 291
11.1.4 基本输入输出接口 291
11.1.5 握手 293
11.1.6 关于接口电路的注释 294
11.2 I/O端口地址译码 296
11.2.1 译码8位I/O地址 296
11.2.2 译码16位I/O地址 297
11.2.3 8位与16位I/O端口 298
11.2.4 32位I/O端口 300
11.3 可编程外围设备接口 303
11.3.1 82C55基本描述 303
11.3.2 82C55编程 304
11.3.3 方式0操作 305
11.3.4 与82C55接口的LCD显示器 309
11.3.5 方式1选通输入 319
11.3.6 方式1选通输出 321
11.3.7 方式2双向操作 322
11.3.8 82C55方式小结 324
11.3.9 串行EEPROM接口 325
11.4 8254可编程间隔定时器 326
11.4.1 8254功能描述 326
11.4.2 8254编程 327
11.4.3 直流电机速度与方向控制 331
11.5 16550可编程通信接口 334
11.5.1 异步串行数据 335
11.5.2 16550功能描述 335
11.5.3 16550编程 336
11.6 模/数转换器(ADC)与数/模转换器(DAC) 340
11.6.1 DAC0830数/模转换器 341
11.6.2 ADC080X模/数转换器 342
11.6.3 使用ADC0804和DAC0830的实例 344
11.7 小结 345
11.8 习题 346
第12章 中断 348
12.1 基本中断处理 348
12.1.1 中断的目的 348
12.1.2 中断 349
12.1.3 中断指令:BOUND、INTO、INT、INT3和IRET 351
12.1.4 实模式中断操作 351
12.1.5 保护模式中断操作 352
12.1.6 中断标志位 352
12.1.7 将一个中断向量存入向量表 353
12.2 硬件中断 354
12.2.1 INTR和INTA 355
12.2.2 82C55键盘中断 358
12.3 扩展中断结构 360
12.3.1 使用74ALS244扩展 360
12.3.2 菊花链中断 361
12.4 8259A可编程中断控制器 362
12.4.1 8259A概述 362
12.4.2 连接单个8259A 363
12.4.3 级联多个8259A 364
12.4.4 8259A编程 364
12.4.5 8259A编程实例 368
12.5 中断实例 375
12.5.1 实时时钟 375
12.5.2 中断处理键盘 377
12.6 小结 379
12.7 习题 379
第13章 直接存储器存取及DMA控制I/O 381
13.1 基本DMA操作 381
13.2 8237 DMA控制器 382
13.2.1 软件命令 386
13.2.2 地址寄存器和计数寄存器编程 386
13.2.3 8237与80X86微处理器相连 387
13.2.4 用8237进行存储器到存储器传输 387
13.2.5 DMA处理的打印机接口 392
13.3 共享总线操作 394
13.3.1 定义的总线类型 395
13.3.2 总线仲裁器 395
13.4 磁盘存储系统 400
13.4.1 软盘存储器 400
13.4.2 笔式驱动器 403
13.4.3 硬盘存储器 403
13.4.4 光盘存储器 405
13.5 视频显示器 406
13.5.1 视频信号 407
13.5.2 TTL RGB显示器 407
13.5.3 模拟RGB显示器 408
13.6 小结 411
13.7 习题 412
第14章 算术协处理器、MMX和SIMD技术 413
14.1 算术协处理器的数据格式 413
14.1.1 带符号的整数 413
14.1.2 二进制编码的十进制(BCD) 414
14.1.3 浮点数 414
14.2 80X87的结构 416
14.3 指令系统 421
14.3.1 数据传送指令 421
14.3.2 算术运算指令 422
14.3.3 比较指令 423
14.3.4 超越运算指令 424
14.3.5 常数操作指令 424
14.3.6 协处理器控制指令 424
14.3.7 协处理器指令 426
14.4 算术协处理器编程 438
14.4.1 计算圆的面积 438
14.4.2 求谐振频率 439
14.4.3 使用一元二次方程求根 440
14.4.4 使用内存数组存储结果 441
14.4.5 将单精度浮点数转换为字符串 442
14.5 MMX技术简介 443
14.5.1 数据类型 443
14.5.2 指令系统 444
14.6 SSE技术概述 452
14.6.1 浮点数 453
14.6.2 指令集 454
14.6.3 控制/状态寄存器 454
14.6.4 编程实例 455
14.6.5 优化 458
14.7 小结 458
14.8 习题 459
第15章 总线接口 461
15.1 ISA总线 461
15.1.1 ISA总线的发展 461
15.1.2 8位ISA总线输出接口 461
15.1.3 8位ISA总线输入接口 466
15.1.4 16位ISA总线 468
15.2 外围部件互连(PCI)总线 468
15.2.1 PCI总线的引脚图 469
15.2.2 PCI总线的地址/数据线 469
15.2.3 配置空间 470
15.2.4 PCI总线的BIOS 472
15.2.5 PCI接口 474
15.2.6 PCI Express总线 474
15.3 并行打印机接口(LPT) 475
15.3.1 端口介绍 475
15.3.2 使用并行端口而不需要ECP支持 477
15.4 串行COM端口 477
15.5 通用串行总线(USB) 480
15.5.1 连接器 480
15.5.2 USB数据 480
15.5.3 USB命令 481
15.5.4 USB总线节点 482
15.5.5 USBN9604/3编程 482
15.6 加速图形端口(AGP) 485
15.7 小结 485
15.8 习题 485
第16章 80186、80188及80286微处理器 487
16.1 80186/80188的结构 487
16.1.1 80186/80188的型号 487
16.1.2 80186基本结构框图 488
16.1.3 80186/80188基本特征 488
16.1.4 引脚 490
16.1.5 直流工作特性 492
16.1.6 80186/80188时序 492
16.2 80186/80188增强功能编程 495
16.2.1 外设控制块(PCB) 495
16.2.2 80186/80188的中断 495
16.2.3 中断控制器 496
16.2.4 定时器 500
16.2.5 DMA控制器 505
16.2.6 片选单元 507
16.3 80C188EB接口举例 510
16.4 实时操作系统(RTOS) 516
16.4.1 实时操作系统(RTOS)概述 516
16.4.2 实例系统 517
16.4.3 线程系统 519
16.5 80286简介 523
16.5.1 硬件特性 523
16.5.2 新增指令 524
16.5.3 虚拟存储机 525
16.6 小结 526
16.7 习题 526
第17章 80386和80486微处理器 528
17.1 80386微处理器简介 528
17.1.1 存储系统 530
17.1.2 输入/输出系统 536
17.1.3 存储器和I/O控制信号 537
17.1.4 时序 537
17.1.5 等待状态 538
17.2 特定的80386寄存器 538
17.2.1 控制寄存器 538
17.2.2 调试和测试寄存器 540
17.3 80386存储管理 541
17.3.1 描述符和选择子 541
17.3.2 描述符表 544
17.3.3 任务状态段(TSS) 545
17.4 向保护模式转换 547
17.5 虚拟8086模式 556
17.6 内存分页机制 557
17.6.1 页目录 557
17.6.2 页表 557
17.7 80486微处理器简介 559
17.7.1 80486DX和80486SX微处理器的引脚 560
17.7.2 80486的基本结构 563
17.7.3 80486的存储系统 564
17.8 小结 566
17.9 习题 566
第18章 Pentium和Pentium Pro微处理器 568
18.1 Pentium微处理器简介 568
18.1.1 存储系统 571
18.1.2 输入/输出系统 572
18.1.3 系统时序 572
18.1.4 分支预测逻辑 574
18.1.5 高速缓存结构 574
18.1.6 超标量体系结构 574
18.2 Pentium的特定寄存器 574
18.2.1 控制寄存器 574
18.2.2 EFLAG寄存器 575
18.2.3 内置自检(BIST) 575
18.3 Pentium的存储管理 576
18.3.1 分页单元 576
18.3.2 存储管理模式 576
18.4 Pentium的新指令 577
18.5 Pentium Pro微处理器简介 581
18.5.1 Pentium Pro的内部结构 582
18.5.2 引脚连接 583
18.5.3 存储系统 586
18.5.4 输入/输出系统 587
18.5.5 系统时序 587
18.6 Pentium Pro的特性 587
18.7 小结 588
18.8 习题 589
第19章 Pentium Ⅱ、Pentium Ⅲ、Pentium 4和Core2微处理器 590
19.1 Pentium Ⅱ微处理器简介 590
19.1.1 存储系统 595
19.1.2 输入/输出系统 596
19.1.3 系统时序 596
19.2 Pentium Ⅱ软件变化 597
19.2.1 CPUID指令 597
19.2.2 SYSENTER和SYSEXIT指令 597
19.2.3 FXSAVE和FXRSTOR指令 598
19.3 Pentium Ⅲ 598
19.3.1 芯片组 598
19.3.2 总线 598
19.3.3 引脚 599
19.4 Pentium 4和Core2 600
19.4.1 存储器接口 600
19.4.2 寄存器组 601
19.4.3 超线程技术 602
19.4.4 多核技术 602
19.4.5 CPUID 602
19.4.6 特定模型寄存器 605
19.4.7 性能监视寄存器 605
19.4.8 64位扩展技术 606
19.5 小结 607
19.6 习题 607
附录A 汇编程序、Visual C++和DOS 608
附录B 指令系统一览 614
附录C 标志位的变化 674
附录D 偶数号习题的答案 676