课程详情
课程评价
spContent=主要介绍高级语言程序中的数据运算、语句和过程调用等如何在计算机系统中实现,包含:(1)数据、指针、指令等的表示和存储;(2)高级语言程序中语句与机器级代码间的对应关系;(3)静态链接和动态链接。
—— 课程团队
课程概述

   本课程是“计算机系统基础”系列课程中的第一门,主要介绍高级语言程序中的数据类型及其运算、语句和过程调用等是如何在计算机系统中实现的。主要包含三个主题:(1)表示。不同数据类型(如带符号整数、无符号整数、浮点数、数组、结构等)数据在寄存器或存储器中的表示和存储;指令的格式、编码及其在存储器中的存储;存储地址(指针)的表示。(2)转换。高级语言程序中的过程(函数调用)、循环、选择等语句与机器级代码之间的对应关系。(3)链接。多个可重定位目标文件如何链接生成可执行目标文件并加载到系统中。

通过本课程的学习,使学习者能从程序员角度认识计算机系统,能够建立高级语言程序、ISAOS、编译器、链接器等之间的相互关联,对指令在硬件上的执行过程和指令的底层硬件执行机制有一定的认识和理解,从而增强在程序调试、性能提升、程序移植和健壮性等方面的能力,并为后续的计算机组成与设计操作系统编译原理计算机体系结构等课程打下坚实基础。

学完本课程后,学习者将对以下问题有比较深刻的认识,并能解决相关实际问题。

  • 程序中处理的数据在机器中如何表示和运算?

  • 程序中各类控制语句对应的机器级代码结构是怎样的?

  • 多个程序模块是如何链接起来形成可执行目标文件的?

  • 机器级代码及构成机器级代码的指令是如何在机器上执行的?

 

授课目标

通过本课程的学习,使学习者能从程序员角度认识计算机系统,能够建立高级语言程序、ISAOS、编译器、链接器等之间的相互关联,对指令在硬件上的执行过程和指令的底层硬件执行机制有一定的认识和理解,从而增强在程序调试、性能提升、程序移植和健壮性等方面的能力,并为后续的计算机组成与设计操作系统编译原理计算机体系结构等课程打下坚实基础。

课程大纲

第一周 计算机系统概述

第一周小测验

第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. 课程共12周,每周对应一次小测验,每次小测验由10道单选题构成,每题0.5分,共60分。

3. 期末考试40分。

总成绩60分及以上合格,85分及以上优秀。

电子版的课程结业证书免费。纸质版认证证书收费:100/ 

参考资料

1.袁春风. 计算机系统基础 [M]. 北京:机械工业出版社,2014 (前4章)

2.Randal E. Bryant, David R. O'Hallaron. 深入理解计算机系统(原书第2版)[M]. 龚奕利,雷迎春译北京:机械工业出版社,2011

 

常见问题

1.学习“计算机系统基础”系列课程时,最重要的学习方法是什么?

首先,不要死记硬背,关键是要不断将所学内容关联起来,以真正理解所学内容。

其次,要多动手实践。不明白的地方就编写一个程序,通过打印结果或利用gdb等调试工具查看机器级代码来分析。

此外,多提问和多参与讨论。真理越辩越明,在与他人的讨论过程中,往往会忽然开朗,有时,一个问题自己冥思苦想几天都想不明白,但实际上课程讨论区早就有人讨论过了,或者在讨论区一提问,马上就有人帮你解决了。

 

2.该系列课程属于硬件课程还是软件课程?

该系列课程涉及到其他很多课程,包括硬件课程和软件课程。它与高级语言程序设计、组成原理、汇编、编译、链接和操作系统等课程的内容有关。虽然涉及到很多其他课程的内容,但是,我们在本课程中只会讲解这些课程内容之间的关联,而不会讲解这些课程的细节内容,例如,本课程不会讲解如何实现编译器和如何实现操作系统。

 

3.《计算机系统基础》系列一共包含几门慕课?

包含以下三门慕课:

1)计算机系统基础(一):程序的表示、转换与链接。

2)计算机系统基础(二):程序的执行和存储访问。

3)计算机系统基础(三):异常、中断和输入/输出。