文章目录
- 《计算机系统基础》——计算机系统导论
- 计算机的基本组成
- 程序开发与执行过程
- 机器语言
- 汇编语言
- 高级语言
- 程序的转换处理
- 程序的数据流动
- 计算机系统层次结构
- 早期计算机系统
- 1GL
- 2GL
- 现代计算机系统
- 3GL
- 4GL
- 指令集体系结构
《计算机系统基础》——计算机系统导论
🚀接下来我们要开始学习计算机系统基础,并且会以此开设一整个系列,感兴趣的同学可以订阅本专栏,后期会不断地更行这个系列。本系列所使用的教材是《深入理解计算机系统》这本书,也叫做SCAPP,然后配套课程是南京大学袁春风老师的课程。好了,关于本专栏的介绍就到这里了,让我们开始学习吧。
计算机的基本组成
🚀对于计算机的基本组成,我在计算机组成原理专栏进行了详细的介绍,不清楚的同学可以先去看一下以前下的文章:(二)计算机组成原理——计算机的基本组成_花园宝宝小点点的博客-CSDN博客。在这里,我对其进行一个简单的复习,希望能帮助大家去理解。
🚀首先,我们看到下面这个现代计算机结构模型,接下来我们会以此为例子来对计算机结构进行一个简短的介绍。在此之前,我们先对图中各个部位进行一个简单的说明。
- CPU:中央处理器。
- PC:程序计数器。
- MAR:存储器地址寄存器 。
- MDR:存储器数据寄存器 。
- ALU:算术逻辑部件。
- IR:指令寄存器。
- GPRs:通用寄存器组。
🚀接下来,我们举个例子来介绍计算机的工作原理,这个例子是关于厨师做饭的故事。不过在这之前我们需要树立一些概念。
首先,CPU就是我们的厨房,一切的工作都在此运行;然后控制器就是我们的厨师;GPRS就是盘;ALU就是厨房的厨具;存储器就相当于厨房外的架子,原材料和菜谱都放在这。
- 首先,我们从一号架子上面取下菜谱(根据PC取指令)。
- 看菜谱(指令译码)。
- 从架上或盘中取原材料(取操作数)。
- 洗、切、炒等具体操作(指令执行)。
- 装盘或直接送桌(回写结果)。
- 算出下一菜谱所在架子号2=1+1(修改PC的值)。
程序开发与执行过程
🚀接下来我们介绍一下程序开发的发展过程,以及其执行过程。
机器语言
🚀我们最原始的开发方式就是使用机器语言去编程,也就是在纸片上打孔来表示0和1,但是这样不够灵活,并且书写与阅读起来比较的困难,所以人们就创造了汇编语言来开发程序了。
汇编语言
🚀汇编语言就是用助记符和标号来表示的指令(与机器指令一一对应),它使用助记符表示操作码, 用标号表示位置,用助记符表示寄存器……,因为这样的话就不会增减指令而需要修改其他指令,并且不需记忆指令编码,编写方便,可读性比机器语言强。
指令:包含操作码和操作数或其地址码(机器指令用二进制表示,汇编指令用符号表示) 只能描述以下三个方面。
- 取(或存一个数) 。
- 两个数加(或减、乘、除、与、或等) 。
- 根据运算结果判断是否转移执行。
assume cs:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00H
int 21h
codesg ends
end
🚀虽然方便了开发人员,但是这样机器就不认识我们的代码了,这下怎么办呢?所以我们就需要使用汇编程序去将汇编代码转换成机器语言。但是随着技术的发展,我们发现汇编语言还是太麻烦了,于是我们逐渐使用高级语言去开发。
高级语言
此处的高级语言为C语言,肯定有很多人觉得C语言不算高级语言,但是在面对汇编以及机器语言的时候,他还是能叫做“高级语言”。
🚀随着技术的发展,我们开始进入了高级语言的世界,它们与具体机器结构无关 ,直接面向算法描述,比机器级语言描述能力强得多。
并且有“面向过程”和“面向对象”的语言之分,还有两种转换方式:“编译”和“解释”。
- 编译程序(Complier):将高级语言源程序转换为机器级目标程序,执行时只要启动目标程序即可。
- 解释程序(Interpreter ):将高级语言语句逐条翻译成机器指令并立即执行,不生成目标文件。
程序的转换处理
🚀接下来我们就以我们的hello.c程序来介绍一下程序的转换处理过程。
#include <stdio.h>
int main()
{
printf("hello, world\n");
}
🚀首先,我们的代码都是通过ASCII码保存在文件里面的,之后通过cpp 的预处理,得到一个.i文件;再经过编译,获得我们的汇编语言程序,也就是以.s结尾的程序;再经过汇编程序去把汇编语言转变为.o的可重定位目标 程序 (二进制);最后加上链接的printf.o文件,就能生成可执行目标程序 (二进制)。
程序的数据流动
🚀接下来我们来介绍一下在这个过程中,我们程序的数据是如何流动的。
- shell命令行处理:将字符逐一读入寄存器,再把它放到内存中。
- 可执行文件加载:利用DMA技术,数据直接从磁盘到达主存。
- hello程序执行过程:一旦目标文件hello中的代码和数据被加载到主存,处理器就开始执行hello 程序的main程序中的机器语言指令。这些指令将“hello, world\n” 字符串中的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。
支撑程序开发和运行的环境由系统软件提供,最重要的系统软件是操作系统和语言处理系统 语言处理系统运行在操作系统之上,操作系统利用指令管理硬件。
计算机系统层次结构
🚀接下来我们需要介绍的就是计算机系统层次结构。
早期计算机系统
1GL
🚀机器语言称为第一代程序设计语言( First generation programming language ,1GL )。
2GL
🚀汇编语言称为第二代程序设计语言( Second generation programming language ,2GL )
现代计算机系统
3GL
🚀第三代程序设计语言(3GL)为过程式 语言,编码时需要描述实现过程,即“ 如何做”。
4GL
🚀四代程序设计语言(4GL) 为非过程化语言,编码时只需说明“做什么”, 不需要描述具体的算法实现细节。
语言处理系统包括:各种语言处理程序(如编译、汇编、链接)、运行时系统(如库函数,调试、优化等功能)。
操作系统包括人机交互界面、 提供服务功能的内核例程。
指令集体系结构
ISA指Instruction Set Architecture,即指令集体系结构,有时简称为指令系统,它规定了如何使用硬件。
- 可执行的指令的集合,包括指令格式、操作种类以及每种操作对应的操作数的相应规定;
- 指令可以接受的操作数的类型;
- 操作数所能存放的寄存器组的结构,包括每个寄存器的名称、编号、 长度和用途;
- 操作数所能存放的存储空间的大小和编址方式;
- 操作数在存储空间存放时按照大端还是小端方式存放;
- 指令获取操作数的方式,即寻址方式;
- 指令执行过程的控制方式,包括程序计数器(PC)、条件码定义等。
ISA是计算机组成的抽象。