第一部分 计算机初步 1
第一章 计算机和程序设计的一般介绍 1
1.1什么是计算机? 1
目录 1
1.2数字计算机硬件 2
1.3计算机的基本组成 4
1.4计算机系统软件 6
1.5算法 7
1.6计算机的数据类型 8
1.7计算机分类 10
第二章 程序设计语言PASCAL 12
2.1综述 12
参考文献 12
2.2词汇集 14
2.3程序结构 16
2.4说明 17
2.5标准数据类型和表达式 19
2.5.1整数类型 19
2.5.2实数类型 20
2.5.3字符类型 20
2.5.4布尔类型 20
2.6由用户定义的类型 21
2.6.1枚举型 21
2.6.2子界类型 22
2.7.2GOTO语句 23
2.7.1赋值语句 23
2.7简单语句 23
2.7.3过程语句 24
2.8结构语句Ⅰ 25
2.8.1复合语句 25
2.8.2IF语句 26
2.8.3FOR语句 28
2.9结构语句Ⅱ 28
2.9.1WHILE语句 28
2.9.2REPEAT语句 30
2.9.3CASE语句 31
3.1一维数组 36
第三章 PASCAL程序的数据结构 36
习题 36
参考文献 36
3.2多维数组 39
3.3堆栈 40
3.4队列 44
3.5单向链接表 47
3.6双向链接表 50
3.7表的存贮管理 52
参考文献 56
习题 56
第四章 数制及其算术运算 56
4.1进位计数制 56
4.2八进制和十六进制数 57
4.3进位计数制的一般转换 58
4.4非十进制数的加法和减法 59
4.5负数的表示法 60
4.5.1带符号数值的表示法 60
4.5.2补码数制 61
4.5.3基数-补码表示法 61
4.5.42的补码表示法 62
4.5.5基数减1补码表示法 63
4.5.61的补码表示法 63
4.5.7余2m-1码表示法 64
4.62的补码的加法和减法 64
4.6.1加法规则 64
4.6.4减法规则 65
4.6.3溢出 65
4.6.2图示法 65
4.6.52的补码和无符号二进制数 67
4.71的补码的加法和减法 67
4.8二进制乘法 69
4.8.1不带符号的乘法 69
4.8.2带符号的乘法 70
4.9二进制除法 71
4.9.1不带符号的除法 71
4.9.2带符号的除法 75
4.10二进制编码的十进制表示法 75
4.11定点和浮点表示法 76
4.11.1定点表示法 76
4.11.2基本的浮点表示法 77
4.11.3典型计算机中的浮点表示法 78
4.11.4浮点运算 79
4.12字符码 80
参考文献 83
习题 83
第二部分 一般原理 83
第五章 基本的计算机组成 83
5.1存贮器 83
5.1.1存贮器组成 83
5.1.2处理器与存贮器的Pascal模拟 84
5.2累加器型处理器 85
5.2.1单累加器型处理器的组成 85
5.1.3存贮器的种类 85
5.2.2基本指令周期 86
5.2.3机器指令 87
5.2.4指令组 87
5.2.5机器语言程序 89
5.2.6汇编语言 90
5.2.7一个简单程序的运行 90
5.2.8执行指令的Pascal模拟 92
5.2.9间接寻址 93
5.2.1子程序 95
5.3通用寄存器型处理器 98
5.3.1通用寄存器型处理器的组成 98
5.3.2指令格式 99
5.3.4指令系统 100
5.3.5程序实例 101
5.4堆栈型机器 103
5.4.1堆栈型机器的组成 104
5.4.2指令系统 105
5.4.3程序实例 107
5.4.4堆栈型机器的强处和弱点 108
5.5其它处理器的组成及分类 110
参考文献 111
习题 112
第六章 汇编语言程序设计 116
6.1汇编语言 116
6.1.1汇编语言格式 117
6.1.2伪操作和PLC 118
6.1.3表达式 121
6.1.4汇编时间、装入时间和运行时间的操作 121
6.2两次扫描的汇编程序 122
6.3目标模块和装入程序 126
6.4浮动汇编程序及装载程序 127
6.4.1浮动 127
6.4.2连接 129
6.5宏命令 130
6.6结构化汇编语言 133
参考文献 135
习题 136
第七章 寻址方式 138
7.1一般概念 138
7.2单参量寻址方式 140
7.2.1寄存器寻址 140
7.2.2绝对寻址 140
7.2.3立即寻址 141
7.2.5自动增量和自动减量 142
注:号表示高级的课题,初次阅读可以略去。 142
7.2.4寄存器间接寻址 142
7.3多参量寻址方式 145
7.3.1页面寻址 145
7.3.2变址寻址 147
7.3.3基址寻址 151
7.3.4基址变址寻址 153
7.3.5相对寻址 154
7.4位置无关码 155
7.5存贮器的地址变换和管理 156
7.5.1存贮器地址变换 156
7.5.2存贮器管理 158
习题 160
5.3.3寻址方式 160
参考文献 160
第八章 操作 162
8.1指令格式 162
8.2条件位 163
8.3数据传送 165
8.4加法和减法 166
8.5某些单操作数指令 167
8.6程序控制 168
8.7逻辑操作 172
8.8旋转和移位 173
8.9多精度加法和减法 177
8.10乘法和除法 178
8.11十进制运算 179
习题 182
参考文献 182
第九章 子程序和参数 186
9.1Pascal中的过程和函数 186
9.1.1过程 186
9.1.2函数 189
9.2高级语言程序中的参数 190
9.2.1Pascal参数 190
9.2.2数值参数 191
9.2.3变量参数 192
9.2.4过程和函数的参数 193
9.2.5其它高级语言中的参数 193
9.3汇编语言子程序和参数 194
9.3.1子程序调用方法 194
9.3.2子程序参数 195
9.3.3在寄存器和存贮器单元中传递参数 196
9.3.4参数区域 197
9.3.5静态和动态分配 198
9.3.6面向堆栈的参数传递方法 198
9.3.7另一例子:队列管理子程序 201
9.4递归 204
9.4.1递归过程和函数 204
9.4.2递归子程序 205
9.5共用程序 207
9.5.1一般结构 207
9.5.2扩展Pascal共用程序 208
9.5.3汇编语言共用程序 209
9.5.4共用程序的应用 213
参考文献 213
习题 214
10.1.1总线 217
10.1I/O的组成 217
第十章 输入/输出 217
10.1.2设备与接口 218
10.1.3端口 218
10.2I/O编程 219
10.2.1独立编址的I/O 219
10.2.2存贮器编址的I/O 221
10.3I/O规约 223
10.3.1输入操作 223
10.3.2重迭的I/O 225
10.3.3输出操作 226
10.4I/O驱动程序 227
10.4.1终端I/O 227
10.4.2共用的I/O驱动程序 232
第十一章 中断、直接存贮器存取和进程 233
习题 233
参考文献 233
11.1基本的中断系统结构和编程 236
11.1.1一般考虑 236
11.1.2一个简单的中断系统 237
11.1.3一个使用中断的I/O程序 238
11.1.4其他中断线 240
11.1.5一个中断系统的Pascal模拟 242
11.2中断系统和编程的种类 243
11.2.1中断级别和允许 243
11.2.2中断优先权 244
11.2.3中断的鉴别和查询 244
11.2.4向量中断 244
11.3.1陷阱 246
11.3.2软件中断 246
11.3陷阱和软件中断 246
11.4直接存贮器存取 247
11.4.1动机的形成 247
11.4.2DMA通道的编程 248
11.4.3存贮器映象屏幕 250
11.5中断进程 250
11.5.1进程 250
11.5.2简化的限制 251
11.5.3并行操作和多重中断进程 252
11.5.4实现的细节 252
11.5.5醒着和睡着 254
11.5.6与时序有关的错误和临界区 255
11.5.7检测临界区 255
11.5.8锁位及信号 256
11.6共用的数据和指令 257
11.6.1共用的变量和数据结构 257
11.6.2共用的指令(可重入程序) 259
11.6.3汇编语言程序举例 261
参考文献 266
习题 266
第十二章 程序开发 270
12.1程序开发的步骤 270
12.2说明和设计 270
12.2.1程序结构 271
12.2.2详细的模块设计 271
12.2.3设计的逐步完善 272
12.2.4数据结构 273
12.3编制文档 274
12.3.1前言 274
12.3.2程序模块前言 274
12.3.3数据模块前言 275
12.3.4全程数据结构的所有权 276
12.3.5文档的编制 277
12.4编码 277
12.4.1编码规则 277
12.4.2编码技巧 278
12.5测试和调试 281
12.5.1开发的方法 281
12.5.2测试 282
12.5.3调试 282
12.6维护 284
参考文献 285
习题 285
第三部分 特定微型计算机的体系结构 285
第十三章 DECPDP-11和LSI-11 285
13.1.1计算机结构 287
13.1基本组成 287
13.1.2处理器编程模型 288
13.1.3指令格式 288
13.2汇编语言 289
13.3寻址方式 290
13.3.1基本寻址方式 290
13.3.2PC寻址方式 291
13.3.3寻址方式摘要 291
13.3.4寻址方式的Pascal模拟 291
13.3.5存贮器地址变换和管理 293
13.4操作类型 294
13.4.1双操作数指令 294
13.4.2单操作数指令 294
13.4.3程序控制指令 294
13.4.4杂类指令 296
13.4.5扩充指令 297
13.4.6PDP-11作为一个堆栈型机器 298
13.5程序实例 299
13.6输入/输出、中断和陷阱 308
13.6.1输入/输出 308
13.6.2中断 310
13.6.3陷阱 312
参考文献 314
习题 314
第十四章 MOTOROLA68000 314
14.1基本组成 316
14.1.1计算机结构 316
14.1.2处理器编程模型 317
14.1.3指令格式 318
14.2汇编语言 318
14.3.1寄存器直接寻址 320
14.3寻址方式 320
14.3.2立即寻址 321
14.3.3绝对寻址 322
14.3.4地址寄存器间接寻址 322
14.3.5自动增量和自动减量寻址 322
14.3.6基址寻址 322
14.3.7变址寻址 323
14.3.8基址变址寻址 323
14.3.9相对寻址 323
14.3.10相对变址寻址 324
14.4操作 324
14.4.1存贮器访问指令 324
14.4.2特殊的存贮器访问指令 324
14.4.3移位和循环指令 327
14.4.4程序控制指令 327
14.4.5规则性和一致性 330
14.5程序实例 332
14.6输入/输出、中断和陷阱 342
14.6.1输入/输出 342
14.6.2中断 344
14.6.3陷阱 346
参考文献 347
习题 347
第十五章 ZILOGZ8000 349
15.1基本组成 349
15.1.1计算机结构 349
15.1.2处理器编程模型 350
15.1.3指令格式 351
15.2汇编语言 351
15.3寻址方式 351
15.3.1Z8001同Z8002的寻址比较 352
15.3.2寄存器寻址 354
15.3.3立即寻址 354
15.3.4绝对寻址 354
15.3.5寄存器间接寻址 355
15.3.6变址寻址 355
15.3.7基址寻址 355
15.3.8基址变址寻址 356
15.3.9相对寻址 356
15.4操作 356
15.4.1存贮器访问指令 356
15.4.2特殊的存贮器访问指令 358
15.4.3寄存器访问指令 358
15.4.4程序控制指令 359
15.5程序实例 361
15.4.5串操作指令 361
15.6输入/输出、中断和陷阱 372
15.6.1输入/输出 372
15.6.2中断 375
15.6.3陷阱 379
参考文献 379
习题 380
第十六章 TEXASINSTRUMENTS9900- 381
16.1基本组成 381
16.1.1计算机结构 381
16.1.2处理器编程模型 381
16.1.3指令格式 383
16.2汇编语言 383
16.3寻址方式 383
16.3.3绝对寻址 384
16.3.1寄存器直接寻址 384
16.3.2立即寻址 384
16.3.4寄存器间接寻址 385
16.3.5自动增量寻址 385
16.3.6基址或变址寻址 385
16.4操作 385
16.4.1存贮器到存贮器指令 385
16.4.2存贮器到寄存器指令 386
16.4.3单操作数指令 387
16.4.4程序控制指令 388
16.5程序实例 390
16.6输入/输出、中断和陷阱 399
16.6.1输入/输出 399
16.6.2中断 400
参考文献 403
16.6.3陷阱 403
习题 404
第十七章 MOTOROLA6809 405
17.1基本组成 405
17.1.1计算机结构 405
17.1.2处理器编程模型 405
17.1.3指令格式 406
17.2汇编语言 406
17.3寻址方式 408
17.3.1立即寻址 408
17.3.2绝对寻址 409
17.3.3直接页面寻址 410
17.3.4“变址”寻址方式 412
17.3.5寄存器间接寻址 412
17.3.6基址和变址寻址 412
17.3.9相对寻址 413
17.3.7基址变址寻址 413
17.3.8自动增量和自动减量寻址 413
17.3.10间接寻址 414
17.4操作 415
17.4.1存贮器访问指令 415
17.4.2程序控制指令 416
17.4.3杂类指令 417
17.5程序实例 418
17.6输入/输出、中断和陷阱 420
17.6.1输入/输出 420
17.6.2中断 420
17.6.3陷阱 421
参考文献 421
习题 421
18.1.1计算机结构 423
第十八章 INTEL8086 423
18.1基本组成 423
18.1.2处理器编程模型 424
18.1.3指令格式 426
18.2汇编语言 427
18.3寻址方式 429
18.3.1寻址方式后继字节 430
18.3.2寄存器寻址 432
18.3.3立即寻址 432
18.3.4绝对寻址 432
18.3.5寄存器间接寻址 432
18.3.6基址寻址 432
18.3.10存贮器地址变换 433
18.3.9相对寻址 433
18.3.8基址变址寻址 433
18.3.7变址寻址 433
18.4操作 436
18.4.1数据传送指令 436
18.4.2算术运算指令 438
18.4.3逻辑和移位指令 439
18.4.4程序控制指令 440
18.4.5串操作指令 441
18.5程序实例 442
18.6输入/输出、中断和陷阱 457
18.6.1输入/输出 457
18.6.2中断 458
18.6.3陷阱 462
习题 463
参考文献 463
第十九章 INTELMCS48系列 465
19.1基本组成 465
19.1.1计算机结构 465
19.1.2处理器编程模型 466
19.1.3指令格式 467
19.2汇编语言 467
19.3寻址方式 468
19.3.1程序存贮器 468
19.3.2数据存贮器 469
19.4操作 470
19.4.1累加器和数据存贮器指令 470
19.4.2程序控制和杂类指令 470
19.5程序实例 472
19.6.1输入/输出 477
19.6输入/输出和中断 477
19.6.2中断 478
参考文献 479
习题 479
附录A ASCII字符码 481
A.1ASCII编码 481
A.2ASCII和终端 481
附录B 扩展PASCAL 483
B.1无符号整数 483
B.2位类型 483
B.3位数组和子数组 483
B.4简单位数组的赋值 484
B.6链接 485
B.7位数组的标准函数 485
B.5位数组表达式和一般的赋值 485
B.8中缀运算符 486
B.9位数组常数 486
B.10位数组表达式 487
B.11类型的自动转换 487
B.12举例 487
附录C 串行通信 488
C.1串行数据链路 488
C.2异步串行通信格式 490
C.3串行I/O接口电路 492
C.3.1Motorola6850ACIA 492
C.3.2控制端口 492
C.3.3发送器数据端口 494
C.3.4接收器数据端口 494
C.3.5状态端口 494
C.3.6调制解调器控制线 495