《计算机系统基础》——计算机系统导论
文章目录
- 《计算机系统基础》——计算机系统导论
- 计算机的基本组成
- 程序开发与执行过程
- 机器语言
- 汇编语言
- 高级语言
- 程序的转换处理
- 程序的数据流动
- 计算机系统层次结构
- 早期计算机系统
- 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 segmentmov ax,0123Hmov bx,0456Hadd ax,bxadd ax,axmov ax,4c00Hint 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是计算机组成的抽象。
相关文章:
《计算机系统基础》——计算机系统导论
文章目录《计算机系统基础》——计算机系统导论计算机的基本组成程序开发与执行过程机器语言汇编语言高级语言程序的转换处理程序的数据流动计算机系统层次结构早期计算机系统1GL2GL现代计算机系统3GL4GL指令集体系结构《计算机系统基础》——计算机系统导论 🚀接下…...
华为OD机试 - 获取最大软件版本号(JavaScript) | 机试题算法思路 【2023】
获取最大软件版本号 题目 Maven版本号定义,<主版本>.<次版本>.<增量版本>-<里程碑版本> 举例3.1.4-beta 其中,主版本和次版本都是必须的,主版本,次版本,增量版本由多位数字组成,可能包含前导零,里程碑版本由字符串组成。 <主版本>.<…...
python--pygame实现各级菜单栏目设置
随着学期的开始,同学们也即将进入计算机相关课程的课程设计了,对于python课程设计的小伙伴,可能有些是需要利用pygame来写应该小游戏的,因为最近很多小伙伴同学也在想我要一些基于python的pygame模块做的游戏项目,此外…...
C++Primer15.3节练习
练习15.11: debug定义如下所示: //基类 class Quote { public:Quote() default;Quote(const std::string& book,double sales_price):bookNo(book),price(sales_price){ }std::string isbn()const { return bookNo; }virtual double net_price(st…...
解决实际项目中stalled时间过久的问题
背景 在公司参与了一个做度量统计的项目,该项目的特点是页面上的表格、卡片、图标非常多。项目经常出现一种情况:页面加载速度较慢,开始怀疑是由于计算量较大,后端接口相应速度较慢。优化了一版后端接口后(加缓存、优…...
vim编辑器
目录 前言 1.下载安装vim 2.三种模式互换 3.vim配置 前言 vim是从 vi 发展出来的一个文本编译器。 代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了&am…...
Python 使用 pip 安装 matplotlib 模块(秒解版)
长话短说:本人下载 matplotlib 花了大概三个半小时屡屡碰壁,险些暴走。为了不让新来的小伙伴走我的弯路,特意创作本片文章指明方向。 1.首先需要下载 python 我直接是在电脑自带的软件商店里下载的,图方便,当然在官网下…...
python-openCV—入门到精通系列讲解(配效果图)- 总览
前言: python-openCV是一种强大的计算机视觉库,可用于处理图像和视频等多媒体数据。它可以帮助您快速处理和分析图像和视频数据,并且在计算机视觉领域具有广泛的应用。在学习python-openCV时,一个速查手册是一个必不可少的工具。 你可以当本专栏当做一个速查手册,可以看…...
智能小车红外避障原理
红外避障电路红外避障电路由电位器R17,R28;发光二极管D8,D9;红外发射管 D2,D4和红外接收管D3,D5和芯片LM324等组成,LM234用于信号的比较,并产生比较结果输出给单片机进行处理。智能小车红外避障…...
(三十六)Vue解决Ajax跨域问题
文章目录环境准备vue的跨域问题vue跨域问题解决方案方式一方式二上一篇:(三十五)Vue之过渡与动画 环境准备 首先我们要借助axios发送Ajax,axios安装命令:npm i axios 其次准备两台服务器,这里使用node.j…...
【CSAPP】整数表示
文章目录整型数据类型无符号数的编码补码编码确定大小的整数类型练习1练习2有符号数和无符号数之间的转换练习C语言中的有符号数与无符号数练习扩展一个数字的位表示练习1练习2截断数字练习关于有符号数与无符号数的建议练习1练习2使用 位编码整数有两种不同的方式:…...
Python基础2
1. python函数定义 函数定义语法: def 函数名(传入参数): 函数体 return 返回值 —————————————— 参数如果不需要,可以省略返回值如果不需要,可以省略函数必须先定义在使用 注意ÿ…...
【项目立项管理】
项目立项管理 很杂,可以根据左边的列表查看自己不会的 。。。 立项管理主要是解决项目的组织战略符合性问题 开发所需的成本和资源属于经济可行性 承建方组织资源和项目的匹配程度 内部立项目的: 为项目进行资源分配,确定项目绩效目标&am…...
【验证码的识别】—— 极验验证码的识别
前言 (结尾有彩蛋欧) 目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英文字母和混…...
华为OD机试 -旋转骰子(Python) | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路 华为OD机试 - 网上商城优惠活动(一)(Python) | 机试题算法思路 华为OD机试 - 统计匹配的二元组个数(Python) | 机试题算法思路 华为OD机试 - 找到它(Python) | 机试题算法思路 华为OD机试…...
C生万物 | 模拟实现库函数strcpy之梅开n度
文章目录【梅开一度】:观察库函数strcpy()的实现【梅开二度】:模仿实现strcpy()【梅开三度】:优化简练代码【梅开四度】:assert()断言拦截【梅开五度】:const修饰常量指针【梅开六度】:还可以有返回值哦&am…...
家庭理财,轻松记账修改收支记录这样操作
我们在记账的时候难免会出现记错或者想修改的地方,又或者是想将之前太久没有用的记账记录删除掉,今天,小编就教大家如何修改收支记录,一起接着往下看吧! 第一步,运行【晨曦记账本】在软件主界面中ÿ…...
河南工程学院2.17蓝桥杯培训
乘法口诀数列:https://www.acwing.com/problem/content/3466/ 剪绳子:https://www.acwing.com/problem/content/68Sin SinSine之舞:http://lx.lanqiao.cn/problem.page?gpidD5272 数列:https://www.acwing.com/problem/content/…...
【JavaSE】数据类型与变量
JAVA之父:詹姆斯高斯林 (James Gosling) 前言: 大家好,我是程序猿爱打拳。今天我给大家讲解的是Java基础中的数据类型。主要讲解的是各个类型的应用场景以及注意事项。 目录 1.数据类型 2.常量与变量 2.1常量 2.2变…...
生成模型技术发展过程
生成模型生成模型和判别模型的差异生成模型的目标是在给定了数据集D,并且假设这个数据集的底层分布(underlying distribution)是Pdata,我们希望够近似出这个数据分布。如果我们能够学习到一个好的生成模型,我们就能用这个生成模型为下游任务做…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
