深圳建筑人才网官方网站/企业培训课程名称
文章目录
- 《计算机系统基础》——计算机系统导论
- 计算机的基本组成
- 程序开发与执行过程
- 机器语言
- 汇编语言
- 高级语言
- 程序的转换处理
- 程序的数据流动
- 计算机系统层次结构
- 早期计算机系统
- 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,我们希望够近似出这个数据分布。如果我们能够学习到一个好的生成模型,我们就能用这个生成模型为下游任务做…...

计算机网络第2章(物理层)学习笔记
❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...

4564: 保留尾部*
描述规定输入的字符串中只包含字母和*号,除了尾部的*号之外,请将字符串中其他*号全部删除。输入输入数据包括一串字符串,只包含字母和*,总长度不超过80。输出输出按要求删除*后的字符串。样例输入*******A*BC*DEF*G****样例输出AB…...

安卓项目搭建grpc环境
本篇文章使用的IDE是Android Studio。这里先吐槽一句,安卓项目搭建grpc环境,不管是引入插件还是引入第三方库,对于版本的要求都极为苛刻,一旦版本不匹配就会报错,所以对于版本的搭配一定要注意。 下面介绍的这个版本搭…...

Flink01: 基本介绍
一、什么是Flink 1. Flink是一个开源的分布式,高性能,高可用,准确的流处理框架 (1)分布式:表示flink程序可以运行在很多台机器上, (2)高性能:表示Flink处理性…...

设计模式之单例模式
文章の目录一、什么是单例模式二、如何实现单例模式1、利用JavaScript中的全局对象2、静态成员改造参考写在最后一、什么是单例模式 单例模式也称为单体模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。 举个栗子:一个班级只有一…...

[oeasy]python0086_ASCII_出现背景_1963年_DEC_PDP系列主机_VT系列终端
编码进化 回忆上次内容 上次 回顾了 字符编码的新陈代谢 ibm 曾经的EBCDIC 由于 字符不连续导致 后续 出现无数问题 随着 网络的发展 数据交换的 需要原来的小隐患现在 产生了 巨大问题 Bemer 联合各方巨头 想要推出 字符连续的编码集 这新编码集 具体长什么样 呢࿱…...

基于FFmpeg实现的无声音屏幕录制
UI自动化测试时,有时需要进行录屏操作,这时我们是不需要声音的,我们可以通过FFmpeg进行简单的录制工作。 以下是在windows10环境下,基于FFmpeg实现的简单录制: Ffmpeg简介: 功能:有非常强大的…...

【项目精选】基于JSP物流信息网(论文+源码+视频)
点击下载源码 近年来,随着时代的进步,社会随之不断发展,经济也快速发展起来了,人民的消费水平在不断地提高,平常的实体店消费已经不能满足人们的需求;在者,互联网技术的不断发展也为电子商务的兴…...

linux异步IO编程实例分析
在Direct IO模式下,异步是非常有必要的(因为绕过了pagecache,直接和磁盘交互)。linux Native AIO正是基于这种场景设计的,具体的介绍见:KernelAsynchronousI/O (AIO)SupportforLinux。下面我们就来分析一下…...

日常英语口语练习-情景交际场景25(三)
登山踏青m: hey Carol, what are you doing this weekend?o: im going hiking /haikiŋ/登山with my husband and our hiking clubm: you have a hiking culb?o: yes, we do, we have 30 to 40 people of all ages and skill levelsm: thats great, do you gus do…...