![78233a0b0d8f86d47b9cac994256bdbd.png](https://i-blog.csdnimg.cn/blog_migrate/fc7e820172e15c49de6e7f4ea8cf5445.jpeg)
tips:本系列是学习南京大学袁春风老师“计算机系统基础”系列mooc课程所做的notes;
程序的表示、转换与链接
一、计算机系统概述
I. 为什么要学习计算机系统基础
- 程序执行结果不仅依赖于高级语言语法和语义,还与其他的方面有关,理解程序的执行结果要从系统层面考虑;“系统思维”,站在“计算机系统”的角度考虑问题
- 程序执行结果不仅取决于算法、程序编写,而且取决于语言处理系统、操作系统,ISA,微体系结构;ISA(指令集体系结构)是计算机软硬件的中间层,指令集是对计算机硬件功能的抽象,功能转换:下层是上层的实现,上层是下层的抽象,底层为上层提供支撑环境
- 计算机系统抽象层:应用(问题)—> 算法 —> 编程(语言)—> OS/VM —> ISA —> 微体系结构 —> 功能部件 —> 电路 —> 器件
II. 冯. 诺伊曼结构的主要思想
- 1946年,第一台通用电子计算机ENIAC(Electronic Numerical Integrator And Computer)(电子数字积分计算机)在宾夕法尼亚大学诞生,特点:真空电子管、十进制表示信息并运算、手动编程(设置开关和拔插电缆)
- 冯. 诺依曼结构最重要的思想是 存储程序(stored-program)
- 工作方式:任何要计算机完成的工作都要实现编写成程序,然后将程序和原始数据送入主存并启动执行,一旦程序被执行,计算机应能在不需要工作人员的干预之下,自动完成逐条取出指令和执行指令的任务
- IAS计算机是现代计算机的原型机
- 主要思想:
- 计算机应由运算器、控制器、存储器、输入输出设备五个基本部件组成
- 各部件的基本功能:
- 存储器存放数据和指令,形式上没有区别,但计算机应能区分数据和指令
- 控制器自动取出指令执行
- 运算器能进行加减乘除四种基本算术运算,也能执行逻辑运算和附加运算
- 操作人员能通过输入输出设备和计算机通信
- 内部以二进制表示指令和数据,每条指令由操作码和地址码组成,操作码指出操作类型,地址码指出操作数的地址,由指令组成程序
- 采取”存储程序“工作方式
![11475d4464b395e3dc19c4821269b70f.png](https://i-blog.csdnimg.cn/blog_migrate/4c1e80fcc0c79b0a30059d60843520ef.jpeg)
![a4dfef0075ec628fe563bdb4dab7862a.png](https://i-blog.csdnimg.cn/blog_migrate/b557eef68f07523206cc63cc397c7eaa.jpeg)
6. 计算机是如何工作的:
-
- 程序由指令组成
- 指令执行过程中,指令和数据从存储器取到CPU,存放CPU的寄存器中,指令在IR中,数据在GPR中
- 程序在执行前:数据和指令事先存放在存储器中,每条指令和每个数据都有地址,指令按序存放,指令由OP、ADDR字段组成,程序起始地址置PC
- 开始执行程序:(指令执行的循环)
- 一、根据PC取指令
- 二、指令译码
- 三、取操作数
- 四、指令执行
- 五、回写结果
- 六、修改PC的值,继续执行下一条指令
7. 总结:
-
- 什么是计算机:计算机是一种能对数字信息化进行自动、高速算术和逻辑运算的处理装置
- 计算机的基本部件和功能:
- 运算器(数据运算):ALU(Arithmetic logic unit 算术逻辑运算单元)、GPRs( General purpose register 通用寄存器)、标志寄存器等
- 存储器(数据存储):存储阵列、地址译码器、读写控制电路
- 总线(数据传送):数据(MDR Memory Data Register 数据寄存器)、地址(MAR Memory Address Register 地址寄存器)和控制线
- 控制器(控制):对指令译码生成控制信号
- 计算机实现的所有任务都是通过执行一条条指令完成的
III. 从机器语言到高级编程语言
- 机器语言:用0/1代码编写程序,并记录在纸袋或卡片上
- 汇编语言:用助记符表示操作码和寄存器,用标号表示位置
- 汇编语言的优点:
- 不会因为增减指令而修改其他指令
- 不需记忆指令编码,编写方便
- 可读性比机器语言强
4. 汇编语言(源)程序由汇编指令构成
-
- 什么是汇编指令:用助记符和标号来表示的指令(与机器指令一一对应)
- 什么是指令: 包含操作码和操作数或其地址码(机器指令用二进制表示,汇编指令用符号表示)
- 只能描述:取(或存一个数)、两个数相加(或减、乘、除、与、或等)、根据运算结果判断是否转移执行
- 机器语言和汇编语言都是面向机器结构的语言,故统称为机器级语言
5. 高级语言的特点:
-
- 与具体机器结构无关
- 面向算法描述,比机器级语言描述能力强
- 一条语句对应多条指令
- 面向过程和面向对象之分
- 处理逻辑分为 顺序、选择、循环
- 转换方式分为 编译、解释
- 编译(complier):将高级语言源程序转换为机器级目标程序,执行时启动目标程序即可
- 解释(interpreter):将高级语言语句逐条翻译成机器指令并立即执行 ,不生成目标文件
![56bf06213aad6e0820d82818f16c6880.png](https://i-blog.csdnimg.cn/blog_migrate/f7dffa3c0af4ec17df0e7872ffd444cb.jpeg)
![0dd8697fb87536d4eb2c55e0c5362487.png](https://i-blog.csdnimg.cn/blog_migrate/740afca9f67d2d1ff49dba6aeb64128a.jpeg)
![f37f3304dcb459a00c9349ccdb1df07d.png](https://i-blog.csdnimg.cn/blog_migrate/0ebafffa5f55411d598cd543c05d42a3.jpeg)
IV. 编程语言和计算机系统层次
- 第一代程序设计语言:机器语言(1GL)应用程序—>指令集体系结构—>计算机硬件
- 第二代程序设计语言:汇编语言(2GL)应用程序—>汇编程序—>操作系统—>指令集体系结构—>计算机硬件
- 第三代程序设计语言:过程式语言(3GL)编码时需要描述实现过程,即“如何做”
- 第四代程序设计语言:非过程化语言(4GL)编码时只需说明“做什么”,不需要描述具体的算法实现细节
- 三四代程序设计语言:应用程序—>语言处理程序—>操作系统—>指令集体系结构—>计算机硬件
- notes:语言的发展是一个不断“抽象”的过程,因而,相应的计算机系统也不断有新的层次出现
- 语言处理系统包括:各种语言处理程序(如编译、汇编、链接)、运行时系统(如库函数、调试、优化等功能),操作系统包括人机交互界面、提供服务功能的内核例程
- 回顾:计算机系统抽象层的转换(见上文)
![033ccb27f6d24c60d06001630f6726ad.png](https://i-blog.csdnimg.cn/blog_migrate/6af6822cd029793dafd17a9abea89e2d.jpeg)
10. 什么是ISA
![9a2bc0d1bdfb3d5431dfa37c2944f7d0.png](https://i-blog.csdnimg.cn/blog_migrate/382b9f3d2477a114857d57818842a73e.jpeg)
11. ISA和计算机组成之间的关系:ISA是计算机硬件功能的抽象
![41a9a851b5b759643ecd22d8394678e4.png](https://i-blog.csdnimg.cn/blog_migrate/db65bb398eb081a73ee48ef2ea898310.jpeg)
V. 本课程内容
- 表示:(Representation)
- 不同数据类型(包括有无符号整数、浮点数、数组、结构等)在寄存器或存储器中如何表示和存储
- 指令如何表示和编码(译码)
- 存储地址(指针)如何表示,如何生成复杂数据结构中数据元素的地址
2. 转发:(Translation)
-
- 高级语言程序对应的机器级代码是怎样的,如何转换并链接生成可执行文件
3. 执行控制流:(Control flow)
-
- 计算机能理解的程序是如何组织和控制的
- 如何在计算机中组织多个程序的并发执行
- 逻辑控制流中的异常事件及其处理
- I/O操作的执行控制流(用户态 -> 内核态)