本课程是“计算机系统基础”系列课程中的第一门,主要介绍高级语言程序中的数据类型及其运算、语句和过程调用等是如何在计算机系统中实现的。主要包含三个主题:(1)表示。不同数据类型(如带符号整数、无符号整数、浮点数、数组、结构等)数据在寄存器或存储器中的表示和存储;指令的格式、编码及其在存储器中的存储;存储地址(指针)的表示。(2)转换。高级语言程序中的过程(函数调用)、循环、选择等语句与机器级代码之间的对应关系。(3)链接。多个可重定位目标文件如何链接生成可执行目标文件并加载到系统中。
通过本课程的学习,使学习者能从程序员角度认识计算机系统,能够建立高级语言程序、ISA、OS、编译器、链接器等之间的相互关联,对指令在硬件上的执行过程和指令的底层硬件执行机制有一定的认识和理解,从而增强在程序调试、性能提升、程序移植和健壮性等方面的能力,并为后续的“计算机组成与设计”、“操作系统”、“编译原理”、“计算机体系结构”等课程打下坚实基础。
学完本课程后,学习者将对以下问题有比较深刻的认识,并能解决相关实际问题。
通过本课程的学习,使学习者能从程序员角度认识计算机系统,能够建立高级语言程序、ISA、OS、编译器、链接器等之间的相互关联,对指令在硬件上的执行过程和指令的底层硬件执行机制有一定的认识和理解,从而增强在程序调试、性能提升、程序移植和健壮性等方面的能力,并为后续的“计算机组成与设计”、“操作系统”、“编译原理”、“计算机体系结构”等课程打下坚实基础。
第一周 计算机系统概述
第1讲 为什么要学习计算机系统基础
第2讲 计算机系统基本组成与基本功能
第3讲 程序开发和执行过程简介
第4讲 计算机系统层次结构
第5讲 本课程的主要学习内容
第一周小测验
第二周 数据的表示和存储
第1讲 数制和编码
第2讲 定点数的编码表示
第3讲 C语言中的整数
第4讲 浮点数的编码表示
第5讲 非数值数据的编码表示
第6讲 数据宽度和存储容量的单位
第7讲 数据存储时的字节排列
第二周小测验
第三周 运算电路基础
第1讲 数字逻辑电路基础
第2讲 从C表达式到逻辑电路
第3讲 C语言中的各类运算
第4讲 整数加减运算
第三周小测验
第四周 乘除运算及浮点数运算
第1讲 整数乘法运算
第2讲 整数除法运算
第3讲 浮点数运算
第四周小测验
第五周 IA-32指令系统概述
第1讲 程序转换概述
第2讲 IA-32指令系统概述
第五周小测验
第六周 IA-32指令类型
第1讲 传送指令
第2讲 定点算术运算指令
第3讲 按位运算指令
第4讲 控制转移指令
第5讲 x87浮点处理指令
第6讲 MMX及SSE指令集
第六周小测验
第七周 C语言语句的机器级表示
第1讲 过程(函数)调用的机器级表示
第2讲 选择和循环语句的机器级表示
第七周小测验
第八周 复杂数据类型的机器级表示
第1讲 数组和指针类型的分配和访问
第2讲 结构和联合数据类型的分配和访问
第3讲 数据的对齐存放
第4讲 越界访问和缓冲区溢出攻击
第八周小测验
第九周 x86-64指令系统
第1讲 x86-64指令系统概述
第2讲 x86-64的基本指令
第3讲 x86-64的过程调用
第九周小测验
第十周 链接概述和目标文件格式
第1讲 可执行文件生成概述
第2讲 目标文件格式概述
第3讲 ELF可重定位目标文件
第4讲 ELF可执行目标文件
第十周小测验
第十一周 符号及符号解析
第1讲 符号及符号表
第2讲 静态链接和符号解析
第十一周小测验
第十二周 重定位及动态链接
第1讲 符号的重定位
第2讲 可执行文件的加载
第3讲 共享库和动态链接
第十二周小测验
高级语言程序设计(最好有C语言程序设计的基础)
1.袁春风. 计算机系统基础(第2版) [M]. 北京:机械工业出版社,2018 (前4章)
2.Randal E. Bryant, David R. O'Hallaron. 深入理解计算机系统(原书第3版)[M]. 龚奕利,雷迎春译北京:机械工业出版社,2016
1.学习“计算机系统基础”系列课程时,最重要的学习方法是什么?
首先,不要死记硬背,关键是要不断将所学内容关联起来,以真正理解所学内容。
其次,要多动手实践。不明白的地方就编写一个程序,通过打印结果或利用gdb等调试工具查看机器级代码来分析。
此外,多提问和多参与讨论。真理越辩越明,在与他人的讨论过程中,往往会忽然开朗,有时,一个问题自己冥思苦想几天都想不明白,但实际上课程讨论区早就有人讨论过了,或者在讨论区一提问,马上就有人帮你解决了。
2.该系列课程属于硬件课程还是软件课程?
该系列课程涉及到其他很多课程,包括硬件课程和软件课程。它与高级语言程序设计、组成原理、汇编、编译、链接和操作系统等课程的内容有关。虽然涉及到很多其他课程的内容,但是,我们在本课程中只会讲解这些课程内容之间的关联,而不会讲解这些课程的细节内容,例如,本课程不会讲解如何实现编译器和如何实现操作系统。
3.《计算机系统基础》系列一共包含几门慕课?
包含以下三门已经上线的理论课程和另外两门将要上线的实践类课程。
(1)计算机系统基础(一):程序的表示、转换与链接。
(2)计算机系统基础(二):程序的执行和存储访问。
(3)计算机系统基础(三):异常、中断和输入/输出。
( 4 )计算机系统基础(四):编程与调试实践。
(5)计算机系统基础(五):x86模拟器 编程实践。