《计算机系统基础》——计算机系统导论

《计算机系统基础》——计算机系统导论

🚀🚀接下来我们要开始学习计算机系统基础,并且会以此开设一整个系列,感兴趣的同学可以订阅本专栏,后期会不断地更行这个系列。本系列所使用的教材是《深入理解计算机系统》这本书,也叫做SCAPP,然后配套课程是南京大学袁春风老师的课程。好了,关于本专栏的介绍就到这里了,让我们开始学习吧。

计算机的基本组成

🚀🚀对于计算机的基本组成,我在计算机组成原理专栏进行了详细的介绍,不清楚的同学可以先去看一下以前下的文章:(二)计算机组成原理——计算机的基本组成_花园宝宝小点点的博客-CSDN博客。在这里,我对其进行一个简单的复习,希望能帮助大家去理解。

🚀🚀首先,我们看到下面这个现代计算机结构模型,接下来我们会以此为例子来对计算机结构进行一个简短的介绍。在此之前,我们先对图中各个部位进行一个简单的说明。

在这里插入图片描述

  1. CPU:中央处理器。
  2. PC:程序计数器。
  3. MAR:存储器地址寄存器 。
  4. MDR:存储器数据寄存器 。
  5. ALU:算术逻辑部件。
  6. IR:指令寄存器。
  7. GPRs:通用寄存器组。

🚀🚀接下来,我们举个例子来介绍计算机的工作原理,这个例子是关于厨师做饭的故事。不过在这之前我们需要树立一些概念。

🚀🚀 首先,CPU就是我们的厨房,一切的工作都在此运行;然后控制器就是我们的厨师;GPRS就是盘;ALU就是厨房的厨具;存储器就相当于厨房外的架子,原材料和菜谱都放在这。

  1. 首先,我们从一号架子上面取下菜谱(根据PC取指令)。
  2. 看菜谱(指令译码)。
  3. 从架上或盘中取原材料(取操作数)。
  4. 洗、切、炒等具体操作(指令执行)。
  5. 装盘或直接送桌(回写结果)。
  6. 算出下一菜谱所在架子号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文件,就能生成可执行目标程序 (二进制)。

在这里插入图片描述

程序的数据流动

🚀🚀接下来我们来介绍一下在这个过程中,我们程序的数据是如何流动的。

在这里插入图片描述

  1. shell命令行处理:将字符逐一读入寄存器,再把它放到内存中。
  2. 可执行文件加载:利用DMA技术,数据直接从磁盘到达主存。
  3. 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,即指令集体系结构,有时简称为指令系统,它规定了如何使用硬件。

  1. 可执行的指令的集合,包括指令格式、操作种类以及每种操作对应的操作数的相应规定;
  2. 指令可以接受的操作数的类型;
  3. 操作数所能存放的寄存器组的结构,包括每个寄存器的名称、编号、 长度和用途;
  4. 操作数所能存放的存储空间的大小和编址方式;
  5. 操作数在存储空间存放时按照大端还是小端方式存放;
  6. 指令获取操作数的方式,即寻址方式;
  7. 指令执行过程的控制方式,包括程序计数器(PC)、条件码定义等。

🚀🚀 ISA是计算机组成的抽象。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值