计算系统基础
作者: 陈道蓄,王浩然,葛季栋
出版时间:2013-04
出版社:高等教育出版社
普通高等教育“十一五”国家级规划教材
- 高等教育出版社
- 9787040367607
- 1版
- 161631
- 44259178-0
- 平装
- 异16开
- 2013-04
- 450
- 376
- 工学
- 计算机科学与技术
- TP3
- 计算机科学与技术、软件工程
- 本科
本书是国家精品课程“计算系统基础”的主讲教材。该课程作为软件工程专业的第一门专业课程,以一个经典计算机指令集MIPS的简化版本DLX为线索,选择C语言作为载体,采用程序设计与系统级认识双优先的方式,使初学者在对计算机系统有基本了解的基础上,更好地掌握结构化程序设计的基本思想和方法。
本书采用自顶向下和自底向上相结合的方式介绍计算系统,全书分为三部分,共17章,其中第一部分为第1章~第5章,主要介绍程序设计基础,使没有编程基础的学生获取对程序设计的感性认识;第二部分为第6章~第14章,主要介绍计算机硬件和系统软件的基础知识,并通过介绍一个简单的DLX计算机系统的工作原理,来帮助读者理解高级语言程序是如何在计算机系统中运行的;第三部分为第15章~第17章,主要介绍函数、指针、数组和递归等内容,以及一些复杂程序在DLX系统下的运行机制。
本书有与“计算系统基础”课程配套的DLX套件。该套件提供了C语言(部分非常用功能除外)编译和基本运行环境,能够满足本课程教学的需要。此外,DLX模拟器提供了较完整的模拟CPU,有兴趣的学生可以尝试在DLX模拟器上设计和实现基于DLX指令集的仿真操作系统DLX OS。
第1章 引言
1.1 本书的目标
1.2 计算机与计算机系统
1.3 计算系统
1.4 本书的结构
习题1
第2章 C语言程序设计简介
2.1 高级程序设计语言
2.2 高级语言程序翻译技术
2.3 C语言概述
2.4 第一个例子:Hello World
习题2
第3章 类型和变量
3.1 类型和变量
3.1.1 3 种基本数据类型
3.1.2 标识符
3.1.3 作用域
3.2 运算符
3.3 附加主题
3.4 问题求解:长度单位换算
习题3
第4章 结构化程序设计和控制结构
4.1 结构化程序设计
4.2 选择结构
4.2.1 if语句
4.2.2 if-else语句
4.3 循环结构
4.3.1 while语句
4.3.2 for语句
4.3.3 do-while语句
4.4 其他控制结构
4.4.1 switch语句
4.4.2 break和continue语句
4.5 问题求解
4.5.1 问题1:计算自然对数之底e的近似值
4.5.2 问题2:找出100 ~200之间的素数
4.5.3 问题3:计算字符串“int”出现的次数
习题4
第5章 测试和调试
5.1 软件开发过程
5.2 错误类型
5.3 测试
5.4 调试
5.5 正确编程
习题5
第6章 数据的机器级表示
6.1 位和数据类型
6.2 整数数据类型
6.3 二进制补码整数
6.4 二进制十进制转换
6.5 算术运算
6.6 逻辑运算
6.7 其他表示法
6.7.1 ASCII码
6.7.2 浮点数类型
6.7.3 十六进制表示法
6.8 C语言中的数据类型
习题6
第7章 数字逻辑电路
7.1 晶体管
7.2 门电路
7.3 组合逻辑电路
7.4 基本存储元件
7.5 存储器
7.6 时序逻辑电路
7.6.1 状态的概念
7.6.2 有限状态机
7.6.3 示例:交通灯控制器
7.7 DLX子集的数据通路
习题7
第8章 冯·诺依曼模型
8.1 基本组件
8.2 DLX———冯·诺依曼模型示例
8.3 指令处理
8.4 DLX的有限状态机
习题8
第9章 指令集结构
9.1 指令集结构概述
9.2 算术/逻辑运算指令
9.2.1 I-类型运算指令
9.2.2 R-类型运算指令
9.3 数据传送指令
9.3.1 基址+偏移量模式
9.3.2 示例
9.4 控制指令
9.4.1 条件分支
9.4.2 示例:计算10个整数的和
9.4.3 控制循环的两种方法
9.4.4 示例:利用标志加一列数
9.4.5 J指令
9.4.6 TRAP指令
9.5 DLX数据通路
9.6 C语言的数据类型与计算机的ISA
习题9
第10章 机器语言程序设计
10.1 解决问题
10.1.1 实现3 种结构的DLX 控制指令
10.1.2 示例:文档加密
10.2 调试
10.2.1 调试操作
10.2.2 示例:调试器的使用
习题10
第11章 汇编语言
11.1 汇编语言程序设计
11.2 DLX 汇编语言
11.2.1 指令
11.2.2 伪操作
11.2.3 示例:文档加密
11.3 汇编过程
11.3.1 一个“两趟”的过程
11.3.2 第一趟:构建符号表
11.3.3 第二趟:生成机器语言程序
11.4 链接
11.4.1 可执行映像
11.4.2 链接器的主要工作
11.5 编译:C-DLX
11.5.1 一个简单的例子
11.5.2 控制结构的例子
11.6 栈———一种抽象数据类型
11.6.1 两个实现栈的例子
11.6.2 在存储器中实现栈
11.7 为变量分配空间
11.7.1 全局数据区和运行时栈
11.7.2 C语言源水平调试器
习题11
第12章 输入和输出
12.1 I/O基础
12.2 键盘输入
12.3 显示器输出
12.4 内存映射I/O的数据通路
12.5 DLX 键盘输入例程
习题12
第13章 自陷例程和中断
13.1 DLX 自陷例程
13.1.1 系统调用
13.1.2 TRAP机制
13.1.3 TRAP指令
13.1.4 完整的机制
13.1.5 IN/OUT服务例程
13.1.6 HALT服务例程
13.1.7 PUTS服务例程
13.1.8 寄存器的保存和恢复
13.2 中断驱动的I/O
13.2.1 中断驱动的I/O概述
13.2.2 中断信号的产生
13.2.3 中断服务例程
13.3 C 中的I/O
13.3.1 I/O流
13.3.2 putchar和getchar
13.3.3 printf和scanf
习题13
第14章 子例程
14.1 调用/返回机制
14.1.1 JAL(R)指令
14.1.2 改进IN服务例程
14.2 示例:两个多位整数加法
14.3 库例程
14.3.1 示例:计算直角三角形斜边长
14.3.2 C标准库
14.4 子例程的测试与调试
习题14
第15章 函数
15.1 函数
15.2 C语言中的函数
15.2.1 带参数的函数
15.2.2 示例:计算直角三角形斜边长
15.3 C函数在底层的实现
15.3.1 运行时栈
15.3.2 函数调用机制
15.3.3 完整的调用实现
15.4 问题求解
15.4.1 问题1:小写转换为大写
15.4.2 问题2:计算凸多边形的面积
15.5 函数的测试与调试
15.6 C中的库函数
习题15
第16章 指针和数组
16.1 指针
16.1.1 声明指针变量
16.1.2 指针运算符
16.1.3 使用指针传递引用
16.1.4 问题求解:计算商和除数
16.1.5 空指针
16.2 数组
16.2.1 数组的声明和使用
16.2.2 问题求解
16.2.3 数组与指针之间的关系
16.2.4 数组作为参数
16.2.5 字符串
16.2.6 示例:冒泡排序
16.2.7 数组的常见错误
16.2.8 二维数组
习题16
第17章 递归
17.1 递归简介
17.2 问题求解
17.2.1 问题1:汉诺塔
17.2.2 问题2:二分法查找
17.3 递归在底层的实现
17.3.1 示例:斐波纳契数列
17.3.2 递归调用机制
习题17
附录
附录A 文件I/O
附录A.1 ASCII文件
附录A.2 二进制文件
附录B 结构体
附录B.1 结构体定义和变量声明
附录B.2 结构体数组
附录C 动态数据结构
附录C.1 动态存储分配
附录C.2 链表
附录D DLX 模拟器
附录D.1 DLX汇编语言编辑器
附录D.2 DLX模拟器
附录D.3 链接多个目标文件
附录E 附录练习题
索引
参考文献