第1章 引言 1
1.1本书的目标 1
1.2计算机与计算机系统 1
1.3计算系统 3
1.4本书的结构 6
习题1 7
第2章 C语言程序设计简介 9
2.1高级程序设计语言 9
2.2高级语言程序翻译技术 9
2.3 C语言概述 10
2.4第一个例子:Hello World 11
习题2 16
第3章 类型和变量 18
3.1类型和变量 18
3.1.1 3种基本数据类型 18
3.1.2标识符 20
3.1.3作用域 21
3.2运算符 22
3.3附加主题 29
3.4问题求解:长度单位换算 32
习题3 33
第4章 结构化程序设计和控制结构 36
4.1结构化程序设计 36
4.2选择结构 38
4.2.1 if语句 38
4.2.2 if-else语句 40
4.3循环结构 43
4.3.1 while语句 43
4.3.2 for语句 44
4.3.3 do-while语句 47
4.4其他控制结构 47
4.4.1 switch语句 48
4.4.2 break和continue语句 51
4.5问题求解 51
4.5.1问题1:计算自然对数之底e的近似值 51
4.5.2问题2:找出100~200之间的素数 54
4.5.3问题3:计算字符串“int”出现的次数 56
习题4 58
第5章 测试和调试 63
5.1软件开发过程 63
5.2错误类型 64
5.3测试 67
5.4调试 69
5.5正确编程 72
习题5 73
第6章 数据的机器级表示 76
6.1位和数据类型 76
6.2整数数据类型 77
6.3二进制补码整数 79
6.4二进制-十进制转换 81
6.5算术运算 83
6.6逻辑运算 85
6.7其他表示法 89
6.7.1 ASCII码 89
6.7.2浮点数类型 91
6.7.3十六进制表示法 93
6.8 C语言中的数据类型 95
习题6 98
第7章 数字逻辑电路 101
7.1晶体管 101
7.2门电路 102
7.3组合逻辑电路 107
7.4基本存储元件 112
7.5存储器 114
7.6时序逻辑电路 117
7.6.1状态的概念 117
7.6.2有限状态机 118
7.6.3示例:交通灯控制器 119
7.7DLX子集的数据通路 122
习题7 124
第8章 冯·诺依曼模型 127
8.1基本组件 127
8.2 DLX——冯·诺依曼模型示例 129
8.3指令处理 131
8.4 DLX的有限状态机 135
习题8 137
第9章 指令集结构 139
9.1指令集结构概述 139
9.2算术/逻辑运算指令 143
9.2.1 I-类型运算指令 143
9.2.2 R-类型运算指令 146
9.3数据传送指令 147
9.3.1基址+偏移量模式 148
9.3.2示例 150
9.4控制指令 150
9.4.1条件分支 151
9.4.2示例:计算10个整数的和 152
9.4.3控制循环的两种方法 154
9.4.4示例:利用标志加一列数 154
9.4.5 J指令 155
9.4.6 TRAP指令 155
9.5 DLX数据通路 156
9.6 C语言的数据类型与计算机的ISA 157
习题9 159
第10章 机器语言程序设计 162
10.1解决问题 162
10.1.1实现3种结构的DLX控制指令 162
10.1.2示例:文档加密 163
10.2调试 167
10.2.1调试操作 167
10.2.2示例:调试器的使用 168
习题10 173
第11章 汇编语言 176
11.1汇编语言程序设计 176
11.2 DLX汇编语言 176
11.2.1指令 177
11.2.2伪操作 181
11.2.3示例:文档加密 183
11.3汇编过程 185
11.3.1一个“两趟”的过程 185
11.3.2第一趟:构建符号表 185
11.3.3第二趟:生成机器语言程序 187
11.4链接 189
11.4.1可执行映像 189
11.4.2链接器的主要工作 190
11.5编译:C-DLX 191
11.5.1一个简单的例子 191
11.5.2控制结构的例子 192
11.6栈——一种抽象数据类型 194
11.6.1两个实现栈的例子 195
11.6.2在存储器中实现栈 195
11.7为变量分配空间 197
11.7.1全局数据区和运行时栈 197
11.7.2 C语言源水平调试器 199
习题11 199
第12章 输入和输出 205
12.1 I/O基础 205
12.2键盘输入 207
12.3显示器输出 208
12.4内存映射I/O的数据通路 210
12.5 DLX键盘输入例程 211
习题12 214
第13章 自陷例程和中断 215
13.1 DLX自陷例程 215
13.1.1系统调用 215
13.1.2 TRAP机制 216
13.1.3 TRAP指令 217
13.1.4完整的机制 218
13.1.5 IN/OUT服务例程 219
13.1.6 HALT服务例程 222
13.1.7 PUTS服务例程 223
13.1.8寄存器的保存和恢复 225
13.2中断驱动的I/O 226
13.2.1中断驱动的I/O概述 226
13.2.2中断信号的产生 227
13.2.3中断服务例程 229
13.3 C中的I/O 235
13.3.1 I/O流 235
13.3.2 putchar和getchar 235
13.3.3 printf和scanf 237
习题13 239
第14章 子例程 243
14.1调用/返回机制 243
14.1.1 JAL(R)指令 244
14.1.2改进IN服务例程 245
14.2示例:两个多位整数加法 248
14.3库例程 255
14.3.1示例:计算直角三角形斜边长 255
14.3.2 C标准库 258
14.4子例程的测试与调试 258
习题14 259
第15章 函数 263
15.1函数 263
15.2 C语言中的函数 263
15.2.1带参数的函数 264
15.2.2示例:计算直角三角形斜边长 266
15.3 C函数在底层的实现 268
15.3.1运行时栈 268
15.3.2函数调用机制 270
15.3.3完整的调用实现 274
15.4问题求解 275
15.4.1问题1:小写转换为大写 276
15.4.2问题2:计算凸多边形的面积 277
15.5函数的测试与调试 279
15.6 C中的库函数 281
习题15 283
第16章 指针和数组 288
16.1指针 288
16.1.1声明指针变量 290
16.1.2指针运算符 291
16.1.3使用指针传递引用 292
16.1.4问题求解:计算商和除数 294
16.1.5空指针 296
16.2数组 296
16.2.1数组的声明和使用 296
16.2.2问题求解 297
16.2.3数组与指针之间的关系 301
16.2.4数组作为参数 301
16.2.5字符串 304
16.2.6示例:冒泡排序 307
16.2.7数组的常见错误 309
16.2.8二维数组 309
习题16 311
第17章 递归 315
17.1递归简介 315
17.2问题求解 317
17.2.1问题1:汉诺塔 317
17.2.2问题2:二分法查找 321
17.3递归在底层的实现 323
17.3.1示例:斐波纳契数列 323
17.3.2递归调用机制 324
习题17 327
附录 330
附录A 文件I/O 330
附录A.1 ASCII文件 331
附录A.2二进制文件 333
附录B 结构体 334
附录B.1结构体定义和变量声明 334
附录B.2结构体数组 338
附录C 动态数据结构 341
附录C.1动态存储分配 341
附录C.2链表 344
附录D DLX模拟器 352
附录D.1 DLX汇编语言编辑器 352
附录D.2 DLX模拟器 354
附录D.3链接多个目标文件 358
附录E 附录练习题 360
索引 362
参考文献 367