第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机系统 10
1.2.1 存储器和输入/输出系统 11
1.2.2 DOS操作系统 17
1.2.3 微处理器 20
1.3 数制系统 24
1.3.1 数字 24
1.3.2 位计数法 25
1.3.3 任意进制转换成十进制 25
1.3.4 十进制转换成任意进制 26
1.3.5 二进制编码的十六进制 28
1.3.6 补码和反码 29
1.4 计算机中的数据格式 29
1.4.1 ASCII码 30
1.4.2 BCD数据 31
1.4.3 字节数据 32
1.4.4 字数据 33
1.4.5 双字数据 34
1.4.6 实数 35
1.5 本章小结 37
1.6 思考与练习 39
第2章 微处理器及其结构 44
2.1 微处理器的内部结构 44
2.2 实地址方式下的存储器寻址 49
2.2.1 段地址和偏移地址 49
2.2.2 默认(缺省)的段地址寄存器和偏移地址寄存器 51
2.2.3 段和偏移寻址机制允许重定位 54
2.3 保护虚拟地址方式下存储器寻址 54
2.3.1 选择子和描述符 54
2.3.2 对程序不可见的寄存器 57
2.4 存储器分页机制 59
2.4.1 分页寄存器 59
2.4.2 页目录和页表 61
2.5 本章小结 62
2.6 思考与练习 63
第3章 寻址方式 66
3.1 与数据有关的寻址方式 66
3.1.1 寄存器寻址 69
3.1.2 立即寻址 71
3.1.3 直接数据寻址 73
3.1.4 寄存器间接寻址 76
3.1.5 基址变址寻址 79
3.1.6 寄存器相对寻址 81
3.1.7 相对基址变址寻址 83
3.1.8 带比例因子的变址寻址 86
3.1.9 结构 87
3.2 与程序转换地址有关的寻址方式 90
3.2.1 直接程序存储器寻址 90
3.2.2 相对程序存储器寻址 90
3.2.3 间接程序存储器寻址 91
3.3 堆栈存储器寻址方式 92
3.4 本章小结 95
3.5 思考与练习 99
第4章 数据传送指令 103
4.1 机器语言 103
4.1.1 为什么要了解机器语言 103
4.1.2 机器语言 104
4.2 PUSH/POP指令 112
4.2.1 PUSH指令 112
4.2.2 POP指令 114
4.2.3 初始化堆栈 115
4.3 地址传送指令 116
4.3.1 LEA指令 117
4.3.2 LDS、LES、LFS、LGS和LSS指令 118
4.4 数据串传送指令 120
4.4.1 方向标志 120
4.4.2 DI和SI 120
4.4.3 LODS指令 120
4.4.4 STOS指令 122
4.4.5 带REP的STOS指令 122
4.4.6 MOVS指令 123
4.4.7 INS指令 124
4.4.8 OUTS指令 125
4.5 其他数据传送指令 126
4.5.1 XCHG指令 126
4.5.2 LAHF和SAHF指令 126
4.5.3 XLAT指令 126
4.5.4 IN和OUT指令 127
4.5.5 MOVSX和MOVZX指令 129
4.5.6 BSWAP指令 130
4.5.7 CMOV指令 130
4.6 段超越前缀 131
4.7 汇编程序详述 131
4.7.1 伪操作 131
4.7.2 存储器组织 136
4.7.3 一个实例程序 140
4.8 本章小结 141
4.9 思考与练习 143
第5章 算术和逻辑运算指令 146
5.1 加法、减法和比较指令 146
5.1.1 加法指令 146
5.1.2 减法指令 152
5.1.3 比较指令 155
5.2 乘法和除法指令 157
5.2.1 乘法指令 157
5.2.2 除法指令 159
5.3 BCD和ASCII码的算术运算指令 162
5.3.1 BCD算术运算 162
5.3.2 ASCII算术运算指令 163
5.4 基本逻辑运算指令 165
5.4.1 AND指令 165
5.4.2 OR指令 167
5.4.3 XOR指令 168
5.4.4 测试指令和位测试指令 169
5.4.5 NOT和NEG指令 171
5.5 移位和循环移位指令 171
5.5.1 移位指令 171
5.5.2 循环移位指令 174
5.5.3 位扫描指令 175
5.6 串比较指令 175
5.6.1 SCAS指令 175
5.6.2 CMPS指令 176
5.7 本章小结 177
5.8 思考与练习 179
第6章 程序控制指令 183
6.1 转移指令 183
6.1.1 无条件转移指令(JMP) 183
6.1.2 条件转移和条件置位指令 190
6.1.3 LOOP指令 193
6.2 对汇编语言程序流程的控制 194
6.2.1 条件汇编语句.IF 195
6.2.2 DO_WHILE循环语句 198
6.2.3 REPEAT_UNTIL循环语句 202
6.3 过程(procedure) 203
6.3.1 CALL指令 203
6.3.2 RET指令 209
6.4 中断 210
6.4.1 中断向量 210
6.4.2 中断指令 211
6.4.3 中断控制指令 213
6.4.4 PC机中的中断分配 213
6.5 机器控制及其他指令 214
6.5.1 对进位标志的控制 214
6.5.2 WAIT指令 215
6.5.3 HLT指令 215
6.5.4 NOP指令 215
6.5.5 LOCK前缀 215
6.5.6 ESC指令 215
6.5.7 BOUND指令 215
6.5.8 ENTER和LEAVE指令 216
6.6 本章小结 217
6.7 思考与练习 220
第7章 微处理器级的程序设计 223
7.1 模块化程序设计 223
7.1.1 汇编程序和连接程序 223
7.1.2 PUBLIC和EXTRN伪操作 225
7.1.3 库 226
7.1.4 宏 228
7.1.5 宏序列中的条件语句 231
7.1.6 条件汇编语句 231
7.1.7 在宏中使用条件语句 233
7.1.8 模块化的程序设计方法 239
7.2 使用键盘和视频显示器 239
7.2.1 用DOS功能调用读键盘 240
7.2.2 用DOS功能调用写视频显示器 245
7.2.3 使用BIOS视频功能调用 246
7.2.4 一个用于显示字符的宏 249
7.2.5 鼠标 250
7.2.6 检测鼠标的存在 250
7.2.7 获取鼠标的类型及其驱动程序的版本号 251
7.2.8 使用鼠标 254
7.3 数据转换 258
7.3.1 将二进制数转换成ASCII码 258
7.3.2 将ASCII码转换成三进制数 261
7.3.3 显示和读取十六进制数据 262
7.3.4 使用查询表实现数据转换 265
7.3.5 一个使用数据转换的实例程序 267
7.4 磁盘文件 272
7.4.1 磁盘的组织 272
7.4.2 顺序存取文件 274
7.4.3 随机存取文件 281
7.5 程序举例 283
7.5.1 计算器程序 283
7.5.2 数字排序程序 285
7.5.3 十六进制文件的显示 289
7.6 中断接管 293
7.6.1 拦截一个中断 293
7.6.2 TSR报时程序示例 294
7.6.3 热键程序举例 301
7.7 本章小结 308
7.8 思考与练习 309
第8章 8086/8088硬件描述 312
8.1 引脚及其功能 312
8.1.1 引脚 312
8.1.2 电源要求 312
8.1.3 直流特性 313
8.1.4 引脚功能 314
8.2 时钟发生器(8284A) 317
8.2.1 8284A时钟发生器 318
8.2.2 8284A的操作 319
8.3 总线缓冲与锁存 320
8.3.1 分离总线信息 320
8.3.2 缓冲系统 323
8.4 总线时序 325
8.4.1 基本的总线操作 325
8.4.2 一般的时序 325
8.4.3 读时序 326
8.4.4 写时序 330
8.5 就绪与等待状态 330
8.5.1 READY输入信号 330
8.5.2 RDY与8284A 330
8.6 最小方式与最大方式 332
8.6.1 最小方式操作 334
8.6.2 最大方式操作 334
8.6.3 8288总线控制器 334
8.7 本章小结 336
8.8 思考与练习 336
第9章 存储器接口 339
9.1 存储器器件 339
9.1.1 存储器的引脚 339
9.1.2 ROM 341
9.1.3 静态RAM(SRAM)器件 343
9.1.4 动态RAM(DRAM) 344
9.2 地址译码 351
9.2.1 为什么要译码 351
9.2.2 简单的与非门译码器 351
9.2.3 3-8译码器(741S138) 352
9.2.4 双2-4译码器(74LS139) 354
9.2.5 PROM地址译码器 354
9.2.6 PLD可编程译码器 356
9.3 8088与80188(8位)存储器接口 359
9.3.1 基本的8088/80188存储器接口 359
9.3.2 连接flash闪速存储器 362
9.3.3 用奇偶性检查存储器错误 363
9.3.4 错误校正 364
9.4 8086、80186、80286与80386SX(16位)存储器接口 366
9.5 80386DX与80486(32位)存储器接口 372
9.5.1 存储体 372
9.5.2 32位存储器接口 373
9.6 Pentium与Pentium Pro(64位)存储器接口 376
9.7 动态RAM 378
9.7.1 DRAM回顾 378
9.7.2 EDO存储器 381
9.7.3 DRAM控制器 381
9.8 本章小结 384
9.9 思考与练习 385
第10章 基本I/O接口 388
10.1 I/O接口简介 388
10.1.1 I/O指令 388
10.1.2 独立编址I/O与存储器映象I/O 390
10.1.3 PC机I/O映象 391
10.1.4 基本输入输出接口 391
10.1.5 信号交换 393
10.2 I/O端口地址译码 393
10.2.1 译码8位I/O地址 395
10.2.2 译码16位I/O地址 396
10.2.3 8位与16位I/O端口 397
10.2.4 32位I/O端口 399
10.3 可编程外围接口 401
10.3.1 8255概述 401
10.3.2 编程82C55 402
10.3.3 方式0操作 404
10.3.4 方式1选通输入 412
10.3.5 方式1选通输出 415
10.3.6 方式2双向操作 417
10.3.7 82C55方式总结 420
10.4 8279可编程键盘/显示器接口 420
10.4.1 8279概述 420
10.4.2 8279与微处理器的接口 422
10.4.3 键盘接口 423
10.4.4 6位显示器接口 426
10.5 8254可编程间隔定时器 427
10.5.1 8254功能描述 428
10.5.2 编程8254 429
10.5.3 直流电动机的转速与方向控制 434
10.6 16550可编程通信接口 437
10.6.1 异步串行数据 437
10.6.2 16550功能描述 438
10.6.3 编程16550 440
10.7 模/数转换器(ADC)与数/模转换器(DAC) 445
10.7.1 DAC0830数/模转换器 445
10.7.2 ADC0804模/数转换器 446
10.7.3 ADC0804与DAC0830应用举例 449
10.8 本章小结 451
10.9 思考与练习 452
第11章 中断 455
11.1 基本中断处理 455
11.1.1 中断的目的 455
11.1.2 中断 455
11.1.3 中断指令:BOUND,INTO,INT,INT3和IRET 458
11.1.4 实方式中断操作 459
11.1.5 保护方式中断操作 459
11.1.6 中断标志位 460
11.1.7 将一个中断向量存于向量表 463
11.2 硬件中断 464
11.2.1 INTR与INTA? 465
11.2.2 82C55键盘中断 466
11.3 扩充中断结构 470
11.3.1 用74ALS244扩充 470
11.3.2 菊花链中断 470
11.4 8259A可编程中断控制器 473
11.4.1 8259A概述 473
11.4.2 连接单个8259A 474
11.4.3 级连多个8259A 474
11.4.4 编程8259A 474
11.4.5 8259A编程举例 479
11.5 实时时钟 486
11.6 本章小结 489
11.7 思考与练习 490
第12章 直接存储器存取以及DMA控制下的I/O 492
12.1 基本的DMA操作 492
12.2 8237DMA控制器 494
12.2.1 软件命令 499
12.2.2 地址寄存器和字计数寄存器编程 499
12.2.3 8237和80×86微处理器相连 500
12.2.4 用8237实现存储器到存储器传输 501
12.2.5 DMA控制的打印机接口 506
12.3 共享总线操作 509
12.3.1 定义总线类型 509
12.3.2 总线仲裁器 510
12.3.3 使用8289的优先级逻辑 514
12.3.4 打印假脱机系统和接口 516
12.4 磁盘存储器系统 525
12.4.1 软盘存储器 526
12.4.2 硬盘存储器 530
12.4.3 光盘存储器 533
12.5 视频显示器 534
12.5.1 视频信号 534
12.5.2 TTL RGB监视器 534
12.5.3 模拟RGB监视器 536
12.6 本章小结 540
12.7 思考与练习 541
第13章 协处理器 543
13.1 协处理器的数据格式 543
13.1.1 带符号的整数 543
13.1.2 二进制编码的十进制数(BCD) 545
13.1.3 浮点数 545
13.2 80×87结构 548
13.3 指令系统 553
13.3.1 数据传送指令 554
13.3.2 算术指令 556
13.3.3 比较指令 558
13.3.4 超越指令 558
13.3.5 常数操作 559
13.3.6 协处理器控制指令 559
13.3.7 协处理器指令 562
13.4 协处理器编程 584
13.4.1 计算圆的面积 584
13.4.2 求共振频率 585
13.4.3 通过二次方程求根 586
13.4.4 应用存储数组存储结果 588
13.4.5 显示单精度浮点数 589
13.4.6 键盘读入混合数 591
13.5 本章小结 593
13.6 思考与练习 594
第14章 总线接口 597
14.1 ISA总线 597
14.1.1 ISA总线的发展 597
14.1.2 8位ISA总线输出接口 597
14.1.3 8位ISA总线输入接口 602
14.1.4 16位ISA总线 603
14.2 扩展的ISA(EISA)和VESA局部总线 604
14.2.1 EISA总线引脚图 604
14.2.2 关于EISA总线接口的例子 605
14.2.3 VESA局部总线 608
14.2.4 VESA局部总线引脚图 608
14.3 外围部件连接(PCI)总线 610
14.3.1 PCI总线的引脚图 610
14.3.2 PCI总线的地址/数据连线 612
14.3.3 PCI总线命令 613
14.3.4 配置空间 613
14.3.5 PCI总线的BIOS 615
14.4 本章小结 618
14.5 思考与练习 618
第15章 80186、80188及80286微处理器 620
15.1 80186/80188的结构 620
15.1.1 80186/80188的各型号 621
15.1.2 80186基本结构框图 621
15.1.3 80186/80188基本特征 622
15.1.4 引脚 624
15.1.5 直流操作特性 627
15.1.6 80186/80188时序 627
15.2 80186/80188增强功能编程 631
15.2.1 外围设备控制块(Periphcral Conlrol Bolck) 631
15.2.2 80186/80188中断 632
15.2.3 中断控制器 632
15.2.4 定时器 638
15.2.5 DMA控制器 645
15.2.6 片选单元 647
15.3 80C188EB接口举例 652
15.4 80286简介 656
15.4.1 硬件特性 656
15.4.2 新增指令 657
15.4.3 虚拟存储机 660
15.5 本章小结 660
15.6 思考与练习 661
第16章 80386和80486微处理器 663
16.1 80386微处理器简介 663
16.1.1 存储器系统 666
16.1.2 输入/输出系统 672
16.1.3 存储器和I/O控制信号 674
16.1.4 时序 674
16.1.5 等待状态 676
16.2 特殊的80386寄存器 677
16.2.1 控制寄存器 677
16.2.2 排错和测试寄存器 678
16.3 80386存储管理 680
16.3.1 描述符和选择子 680
16.3.2 描述符表 684
16.3.3 任务状态段(TSS) 686
16.4 向保护方式的转换 688
16.5 虚拟8086方式 704
16.6 存储器分页机制 705
16.6.1 页目录 705
16.6.2 页表 706
16.7 80486微处理器简介 709
16.7.1 80486DX和80486SX微处理器的引脚 710
16.7.2 80486基本结构 714
16.7.3 80486存储系统 715
16.7.4 80486存储管理 718
16.7.5 Cache检测 719
16.8 本章小结 719
16.9 思考与练习 721
第17章 Pentium与Pentium Pro微处理器 724
17.1 Pentium微处理器简介 724
17.1.1 存储器系统 729
17.1.2 输入/输出系统 729
17.1.3 系统时序 729
17.1.4 分支预测逻辑 732
17.1.5 cache结构 733
17.1.6 超标量体系结构 733
17.2 特殊的Pentium寄存器 733
17.2.1 控制寄存器 733
17.2.2 EFLAG寄存器 734
17.2.3 内置自检(BIST) 735
17.3 Pentium存储器管理 735
17.3.1 分页单元 735
17.3.2 存储器管理模式 735
17.4 新的Pentium指令 737
17.5 Pentium Pro微处理器简介 740
17.5.1 Pentium Pro的内部结构 741
17.5.2 引脚连接 743
17.5.3 存储器系统 747
17.5.4 输入/输出系统 748
17.5.5 系统时序 748
17.6 特殊的Pentium Pro特性 749
17.6.1 控制寄存器4 750
17.7 本章小结 750
17.8 思考与练习 751
附录A 汇编程序、DOS、BIOS鼠标及DPMI内存管理程序 753
A.1 使用汇编程序 753
A.2 存储模式 755
A.3 DOS功能调用 759
A.4 BIOS功能调用 784
A.4.1 INT 10H 784
A.4.2 INT 11H 789
A.4.3 INT 12H 789
A.4.4 INT 13H 789
A.4.5 INT 14H 790
A.4.6 INT 15H 790
A.4.7 INT 16H 791
A.4.8 INT 17H 791
A.4.9 DOS低端存储区 791
A.5 鼠标功能 793
A.6 DPMI控制功能 803
附录B 指令系统一览 823
附录C 标志位的变化 916
附录D 思考与练习题中偶数题答案 918