第1章 微处理器和PC入门 1
1.1历史回顾 1
1.1.1机械时代 2
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系统 13
1.2.2 DOS操作系统 20
1.2.3微处理器 22
1.3数制 26
1.3.1数字 26
1.3.2位计数法 26
1.3.3其他数制转换到十进制 27
1.3.4十进制转换成其他进制 28
1.3.5二进制编码的十六进制 30
1.3.6补码 31
1.4计算机数据格式 32
1.4.1 ASCII数据 32
1.4.2 BCD(二进制编码的十进制)数据 34
1.4.3字节数据 34
1.4.4字数据 36
1.4.5双字数据 37
1.4.6实数 38
1.5小结 40
1.6习题 42
第2章 微处理器及其结构 47
2.1微处理器的内部结构 47
2.1.1程序设计模型 47
2.2实模式存储器寻址 52
2.2.1段和偏移 52
2.2.2默认段和偏移寄存器 54
2.2.3段加偏移寻址机制允许重定位 57
2.3保护模式存储器寻址 57
2.3.1选择子和描述符 57
2.3.2程序不可见寄存器 61
2.4内存分页 62
2.4.1分页寄存器 62
2.4.2页目录和页表 64
2.5小结 65
2.6习题 66
第3章 寻址方式 69
3.1数据寻址方式 69
3.1.1寄存器寻址 70
3.1.2寄存器寻址 73
3.1.3立即寻址 74
3.1.4直接数据寻址 76
3.1.5寄存器间接寻址 78
3.1.6基址加变址寻址 81
3.1.7寄存器相对寻址 83
3.1.8相对基址加变址寻址 85
3.1.9比例变址寻址 87
3.1.10数据结构 88
3.2程序存储器寻址方式 90
3.2.1直接程序寻址方式 91
3.2.2相对程序存储器寻址 91
3.2.3间接程序存储器寻址 92
3.3堆栈存储器寻址 93
3.4小结 95
3.5习题 98
第4章 数据传送指令 101
4.1 MOV回顾 101
4.1.1机器语言 102
4.2 PUSH/POP 109
4.2.1 PUSH 110
4.2.2 POP指令 111
4.2.3初始化堆栈 113
4.3装入有效地址 114
4.3.1 LEA 114
4.3.2 LDS、LES、 LFS、 LGS和LSS 115
4.4串数据传送 117
4.4.1方向标志 117
4.4.2 DI和SI 117
4.4.3 LODS 118
4.4.4 STOS 119
4.4.5 MOVS 120
4.4.6 INS 121
4.4.7 OUTS 122
4.5杂项数据传送指令 122
4.5.1 XCHG 122
4.5.2 LAHF和SAHF 123
4.5.3 XLAT 123
4.5.4 IN和OUT 124
4.5.5 MOVSX和MOVZX 126
4.5.6 BSWAP 127
4.5.7 CMOV 127
4.6段超越前缀 127
4.7汇编程序详述 128
4.7.1伪指令 128
4.7.2存储器组织 133
4.7.3程序举例 136
4.8小结 138
4.9习题 140
第5章 算术和逻辑运算指令 143
5.1加法、减法和比较指令 143
5.1.1加法指令 143
5.1.2减法指令 149
5.1.3比较指令 151
5.2乘法和除法 152
5.2.1乘法指令 152
5.2.2除法指令 154
5.3 BCD码和ASCII码算术运算指令 157
5.3.1 BCD算术运算 157
5.3.2 ASCII算术运算指令 158
5.4基本逻辑指令 160
5.4.1 AND指令 160
5.4.2 OR指令 162
5.4.3 XOR指令 163
5.4.4测试和位测试指令 164
5.4.5 NOT指令和NEG指令 165
5.5移位和循环指令 166
5.5.1移位指令 166
5.5.2循环指令 168
5.5.3位扫描指令 169
5.6串比较指令 169
5.6.1 SCAS指令 169
5.6.2 CMPS指令 170
5.7小结 171
5.8习题 173
第6章 程序控制指令 177
6.1转移类 177
6.1.1无条件转移指令(JMP) 177
6.1.2条件转移和条件设置 183
6.1.3 LOOP 186
6.2控制汇编语言程序的流程 187
6.2.1 DO-WHILE循环 190
6.2.2 REPEAT-UNTIL循环 194
6.3过程 195
6.3.1 CALL 196
6.3.2 RET 200
6.4中断介绍 201
6.4.1中断向量 201
6.4.2中断指令 202
6.4.3中断控制 204
6.4.4 PC机的中断 204
6.5机器控制及杂项指令 205
6.5.1控制进位标志位 205
6.5.2 WAIT 205
6.5.3 HLT 206
6.5.4 NOP 206
6.5.5 LOCK前缀 206
6.5.6 ESC 206
6.5.7 BOUND 206
6.5.8 ENTER和LEAVE 207
6.6小结 208
6.7习题 211
第7章 微处理器程序设计 214
7.1模块化程序设计 214
7.1.1汇编程序和连接程序 215
7.1.2 PUBLIC和EXTRN 216
7.1.3库 217
7.1.4宏 219
7.1.5宏序列中的条件语句 221
7.1.6条件汇编语句 221
7.1.7在宏中使用条件语句 223
7.1.8模块化的程序设计方法 229
7.2使用键盘和视频显示器 229
7.2.1用DOS功能调用读取键盘 229
7.2.2用DOS功能调用写视频显示器 233
7.2.3使用BIOS视频功能调用 235
7.2.4显示字符的宏 237
7.2.5鼠标 238
7.2.6测试鼠标 238
7.2.7确定鼠标类型和驱动程序版本 239
7.2.8使用鼠标 241
7.3数据转换 245
7.3.1从二进制转换为ASCII码 245
7.3.2 ASCII码转换为二进制 247
7.3.3显示和读入十六进制数 249
7.3.4使用查找表实现数据转换 251
7.3.5使用数据转换的实例程序 253
7.4磁盘文件 257
7.4.1磁盘的组织 257
7.4.2文件名 259
7.4.3顺序存取文件 260
7.4.4随机存取文件 267
7.5程序举例 268
7.5.1计算器程序 269
7.5.2数字排序程序 270
7.5.3十六进制文件的转储 273
7.6中断钩连 277
7.6.1拦截一个中断 277
7.6.2 TSR报时程序实例 278
7.6.3热键程序实例 284
7.7小结 290
7.8习题 291
第8章 在C/C++中使用汇编语言 294
8.1在16位应用程序中使用汇编语言与C/C++语言 294
8.1.1基本规则 295
8.1.2_asm块中不能使用的MASM功能 297
8.1.3使用字符串 297
8.1.4使用数据结构 299
8.1.5混合语言编程的例子 301
8.2在32位应用程序中使用汇编语言与C/C++语言 302
8.2.1使用控制台I/O访问键盘和显示卡的例子 303
8.2.2直接访问I/O端口 304
8.3独立的汇编目标码 306
8.3.1用Visual C连接汇编语言 306
8.3.2给C/C++程序中添加新的汇编语言指令 311
8.4小结 312
8.5习题 312
第9章 8086/8088硬件特性 314
9.1引脚和引脚功能 314
9.1.1引脚 314
9.1.2电源要求 315
9.1.3引脚功能 316
9.2时钟产生器(8284A) 319
9.2.1 8284A时钟产生器 319
9.3总线缓冲及锁存 322
9.3.1多路分离总线 322
9.3.2缓冲系统 323
9.4总线时序 327
9.4.1基本的总线操作 327
9.4.2一般的时序 328
9.4.3读时序 328
9.4.4写时序 331
9.5就绪和等待状态 331
9.5.1 READY输入 332
9.5.2 RDY和8284A 332
9.6最小模式与最大模式 334
9.6.1最小模式操作 335
9.6.2最大模式操作 335
9.6.3 8288总线控制器 335
9.7小结 337
9.8习题 338
第10章 存储器接口 340
10.1存储器件 340
10.1.1存储器引脚 340
10.1.2 ROM存储器 342
10.1.3静态RAM(SRAM)器件 344
10.1.4动态RAM(DRAM)存储器 345
10.2地址译码 352
10.2.1为什么要进行存储器译码 352
10.2.2简单的与非门译码器 352
10.2.3 3-8线译码器(74LS138) 353
10.2.4双2-4线译码器(74LS139) 356
10.2.5 PROM地址译码器 356
10.2.6 PLD可编程译码器 357
10.3 8088和80188(8位)存储器接口 360
10.3.1基本的8088/80188存储器接口 361
10.3.2与快闪存储器接口 362
10.3.3奇偶校验用于存储器错误检测 364
10.3.4错误校正 366
10.4 8086、 80186、 80286和80386SX (16位)存储器接口 368
10.4.1 16位总线控制 369
10.5 80386DX和80486 (32位)存储器接口 376
10.5.1存储体 376
10.5.2 32位存储器接口 377
10.6 Pentium、 Pentium Pro和Pentium Ⅱ (64位)存储器接口 379
10.6.1 64位存储器接口 380
10.7动态RAM 382
10.7.1 DRAM回顾 382
10.7.2 EDO存储器 383
10.7.3 SDRAM 383
10.7.4 DRAM控制器 385
10.8小结 386
10.9习题 388
第11章 基本I/O接口 391
11.1 I/O接口简介 391
11.1.1 I/O指令 391
11.1.2独立编址I/O与存储器映像I/O 392
11.1.3 PC机I/O映像 394
11.1.4基本输入与输出接口 395
11.1.5信号交换 396
11.1.6关于接口电路的注释 398
11.2 I/O端口地址译码 400
11.2.1译码8位I/O地址 400
11.2.2译码16位I/O地址 402
11.2.3 8位与16位I/O端口 403
11.2.4 32位I/O端口 405
11.3可编程外围设备接口 406
11.3.1 82C55基本描述 406
11.3.2编程82C55 408
11.3.3方式0操作 410
11.3.4方式1选通输入 424
11.3.5方式1选通输出 426
11.3.6方式2双向操作 428
11.3.7 82C55方式小结 431
11.4 8279可编程键盘/显示器接口 431
11.4.1 8279的概述 431
11.4.2 8279与微处理器的接口 432
11.4.3键盘接口 433
11.4.4 6位显示器接口 437
11.5 8254可编程间隔定时器 438
11.5.1 8254功能描述 439
11.5.2编程8254 440
11.5.3直流电机速度与方向控制 445
11.6 16550可编程通信接口 449
11.6.1异步串行数据 449
11.6.2 16550功能描述 449
11.6.3编程16550 451
11.7模/数转换器(ADC)与数/模转换器(DAC) 456
11.7.1 DAC0830数/模转换器 456
11.7.2 ADC080X模/数转换器 458
11.7.3使用 ADC0804和DAC0830的实例 461
11.8小结 463
11.9习题 464
第12章 中断 468
12.1基本中断处理 468
12.1.1中断的目的 468
12.1.2中断 469
12.1.3中断指令:BOUND、 INTO、 INT、 INT 3和IRET 471
12.1.4实模式中断操作 472
12.1.5保护模式中断操作 473
12.1.6中断标志位 473
12.1.7将一个中断向量存于向量表 476
12.2硬件中断 478
12.2.1 INTR和INTA 479
12.2.2 82C55键盘中断 482
12.3扩展中断结构 484
12.3.1使用74ALS244扩展 484
12.3.2菊花链中断 485
12.4 8259A可编程中断控制器 487
12.4.1 8259A概述 487
12.4.2连接单个8259A 488
12.4.3级联多个8259A 489
12.4.4编程8259A 489
12.4.5 8259A编程实例 493
12.5中断实例 502
12.5.1实时时钟 502
12.5.2中断处理键盘 503
12.6小结 506
12.7习题 507
第13章 直接存储器存取及DMA控制I/O 509
13.1基本DMA操作 509
13.1.1基本DMA定义 510
13.2 8237 DMA控制器 511
13.2.1软件命令 515
13.2.2编程地址寄存器和计数寄存器 516
13.2.3 8237与80X86微处理器相连 517
13.2.4用8237进行存储器到存储器传输 518
13.2.5 DMA处理的打印机接口 524
13.3共享总线操作 526
13.3.1定义总线类型 527
13.3.2总线仲裁器 529
13.3.3使用8289的优先级逻辑 533
13.3.4并行优先级 534
13.3.5打印假脱机系统与接口 535
13.4磁盘存储器系统 544
13.4.1软盘存储器 544
13.4.2硬盘存储器 549
13.4.3光盘存储器 551
13.5视频显示器 553
13.5.1视频信号 553
13.5.2 TTL RGB显示器 554
13.5.3模拟RGB显示器 555
13.6小结 559
13.7习题 560
第14章 算术协处理器与MMX技术 562
14.1算术协处理器的数据格式 563
14.1.1带符号的整数 563
14.1.2二进制编码的十进制(BCD) 564
14.1.3浮点数 564
14.2 80X87的结构 567
14.2.1 80X87的内部结构 567
14.3指令系统 571
14.3.1数据传送指令 572
14.3.2算术运算指令 574
14.3.3比较指令 575
14.3.4超越运算 576
14.3.5常数操作 577
14.3.6协处理器控制指令 577
14.3.7协处理器指令 579
14.4算术协处理器编程 596
14.4.1计算圆的面积 596
14.4.2求谐振频率 597
14.4.3使用二次方程求根 598
14.4.4使用内存数组存储结果 599
14.4.5显示单精度浮点数 600
14.4.6从键盘读入混合数 602
14.5 MMX技术简介 604
14.5.1数据类型 604
14.5.2指令系统 605
14.6小结 617
14.7习题 618
第15章 总线接口 621
15.1 ISA总线 621
15.1.1 ISA总线的发展 621
15.1.2 8位ISA总线输出接口 621
15.1.3 8位ISA总线输入接口 626
15.1.4 16位ISA总线 628
15.2扩展的ISA (EISA)和VESA局部总线结构 628
15.2.1 IESA总线引脚图 629
15.2.2 EISA总线接口实例 629
15.2.3 VESA局部总线 632
15.2.4 VESA局部总线引脚图 632
15.3外围部件互连(PCI)总线 634
15.3.1 PCI总线的引脚图 634
15.3.2 PCI总线的地址/数据线 636
15.3.3配置空间 637
15.3.4 PCI总线的BIOS 639
15.3.5 PCI接口 642
15.4通用串行总线(USB) 642
15.4.1连接器 643
15.4.2 USB数据 643
15.4.3 USB命令 644
15.5高速图形端口(AGP) 646
15.6小结 647
15.7习题 647
第16章 80186、80188及80286微处理器 649
16.1 80186/80188的结构 649
16.1.1 80186/80188的型号 649
16.1.2 80186基本结构框图 650
16.1.3 80186/80188基本特征 651
16.1.4引脚 652
16.1.5直流工作特性 655
16.1.6 80186/80188时序 655
16.2 80186/80188增强功能编程 658
16.2.1外设控制块(PCB) 658
16.2.2 80186/80188的中断 659
16.2.3中断控制器 660
16.2.4定时器 665
16.2.5 DMA控制器 671
16.2.6片选单元 674
16.3 80C188EB接口举例 677
16.4 80286介绍 681
16.4.1硬件特性 681
16.4.2新增指令 683
16.4.3虚拟存储机 684
16.5小结 685
16.6习题 686
第17章 80386和80486微处理器 688
17.1 80386微处理器简介 688
17.1.1存储系统 692
17.1.2输入/输出系统 698
17.1.3存储器和I/O控制信号 699
17.1.4时序 700
17.1.5等待状态 701
17.2特定的80386寄存器 703
17.2.1控制寄存器 703
17.2.2调试和测试寄存器 704
17.3 80386存储管理 705
17.3.1描述符和选择子 705
17.3.2描述符表 709
17.3.3任务状态段 711
17.4向保护模式转换 713
17.5虚拟8086模式 729
17.6内存分页机制 730
17.6.1页目录 730
17.6.2页表 731
17.7 80486微处理器简介 734
17.7.1 80486DX和80486SX微处理器的引脚 735
17.7.2 80486的基本结构 739
17.7.3 80486存储系统 740
17.7.4 80486的存储管理 743
17.7.5 cache检测寄存器 744
17.8小结 745
17.9习题 746
第18章 Pentium和Pentium Pro微处理器 749
18.1 Pentium微处理器简介 749
18.1.1存储器系统 754
18.1.2输入/输出系统 756
18.1.3系统时序 756
18.1.4分支预测逻辑 758
18.1.5高速缓存结构 759
18.1.6超标量体系结构 759
18.2 Pentium的特定寄存器 759
18.2.1控制寄存器 759
18.2.2 EFLAG寄存器 760
18.2.3内置自检(BIST) 761
18.3 Pentium的存储器管理 761
18.3.1分页单元 761
18.3.2存储器管理模式 762
18.4 Pentium的新指令 763
18.5 Pentium Pro微处理器介绍 766
18.5.1 Pentium Pro的内部结构 768
18.5.2引脚连接 770
18.5.3存储器系统 773
18.5.4输入/输出系统 775
18.5.5系统时序 775
18.6 Pentium Pro的特性 776
18.6.1控制寄存器4 776
18.7小结 776
18.8习题 777
第19章 PentiumⅡ微处理器 779
19.1 Pentium Ⅱ微处理器简介 779
19.1.1存储器系统 785
19.1.2输入/输出系统 787
19.1.3系统时序 787
19.2 Pentium Ⅱ软件变化 788
19.2.1 CPUID指令 788
19.2.2 SYSENTER和SYSEXIT指令 788
19.2.3 FXSAVE和FXRSTOR指令 790
19.3小结 790
19.4习题 791
附录A 汇编语言、磁盘操作系统(DOS)、基本输入输出系统(BIOS)、鼠标及DPMI内存管理器 792
A.1 汇编语言的使用 792
A.2汇编语言的存储模型 794
A.2 DOS功能调用 798
A.3 BIOS功能调用 815
A.3.1 INT 10H 815
A.3.2 INT 11H 819
A.3.3 INT 12H 819
A.3.4 INT 13H 820
A.3.5 INT 14H 820
A.3.6 INT 15H 821
A.3.7 INT 16H 821
A.3.8 INT 17H 822
A.3.9 DOS低端内存的分配 822
A.3.10鼠标功能调用 823
A.3.11 DPMI控制功能 831
附录B 指令系统一览 845
附录C 标志位的变化 904
附录D 偶数号习题的标准答案 906