【计算机组成 课程笔记】2.1 设计自己的计算机

课程链接:

计算机组成_北京大学_中国大学MOOC(慕课)

2 - 1 - 201-设计自己的计算机(14‘24’‘)_哔哩哔哩_bilibili

什么是指令系统体系结构?这个问题其实非常简单,但要想解释清楚也没有那么容易。我们还是从一个小故事开始吧。

有一天有两个小伙伴碰了面,发现对方都很愁苦,沟通后发现双方都碰到了一些运算上的问题,于是两人一拍即合,准备一起解决这个问题。怎么解决呢?不如一起设计一个计算机吧。那怎么分工呢?一个小伙伴说:我是软件程序猿,我来编写如何运算的软件指令。另一个小伙伴说:那正好,我是硬件攻城狮,我来设计计算机的硬件,主要是CPU。

OK, 那我们就分头干活吧!

真的就可以这么开始了吗?怎么保证软件程序猿写的软件就能在硬件攻城狮设计的硬件上运行起来呢?所以他们还得商量商量,把共同的接口定义好,然后才能分头去设计软件和硬件。

那他们要商量的共同的接口,就是指令系统体系结构。

他们面临的计算任务并不复杂,所以只需要一个简单的指令系统就可以了。看上去需要一个加法,所以先设计一个加法指令,另外存储器和寄存器之间的数据传送需要两条指令:LOAD和STORE。另外由于CPU是按照PC寄存器++来顺序执行指令的,有时候我们可能需要跳转到其他位置执行,这样的话就还需要一条跳转指令JMP。

这样我们就设计出了一个简单的计算机指令系统,能够满足当前所需要进行的运算。

但是这个用英文单词和字母描述的指令并不是计算机能识别的二进制代码,因此我们还要做进一步的规定。

我们约定每条指令都是等长的,都是2个字节。其中第一个字节的高4位是操作码,我们目前支持4种操作,所以只用到了其中的2位,实际上可以扩展到16个操作。第一个字节的低4位是寄存器号,我们约定目前只提供4个寄存器(R0~R3),实际上可以扩展到16个寄存器。第二个字节是存储单元地址,一共8位,所以可以索引256个存储器。

在约定好指令格式以后,我们再来看一个可以执行的任务的例子。

基于这样的任务,软件程序猿就可以编写出下面的机器语言程序。当然直接编写机器语言程序是非常困难的,随着计算机技术的发展,我们现在可以通过编写高级语言程序,再通过编译器转换成汇编语言程序,最后再转换成机器语言程序。

现在我们已经写好了一个程序,根据冯·诺依曼计算机存储程序的概念,我们把这个程序放到存储器当中。这里仅展示存储器的一个片段,即存储器的地址为5~18的存储单元中的内容。

与此同时,硬件攻城狮也完成了CPU的设计,并将CPU和存储器进行连接,构建出了完整的计算机系统。(为了便于理解,存储器中的内容还是以汇编代码的形式呈现。)

此时,如果CPU中的PC寄存器已经装入了0000 1000的地址,那么接下来的指令执行过程,我们已经很熟悉了。

现在我们已经对什么是指令系统体系结构有了初步了解,也知道了如何开始着手设计一个属于自己的计算机。下一节我们将分析一些真实的体系结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/90432.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习技术(六)——有监督学习算法之线性回归算法实操

机器学习技术(五)——有监督学习之线性回归算法实操 引言: 机器学习监督算法是一种基于已有标记数据的学习方法,通过对已知输入和输出数据的学习,建立一个模型来预测新的输入数据的输出。这种算法模仿人类的学习过程&a…

Pycharm保存自定义布局

1.启用特定窗口 在View->Tool Windows下可以启用特定窗口,窗口标签会出现在左边(图中红框处),下边或右边,可以拖动摆放位置 2.保存 在windows->layout下可以选择保存布局 1.图中第一个选项:选择或…

【Kafka】Kafka Stream简单使用

一、实时流式计算 1. 概念 一般流式计算会与批量计算相比较。在流式计算模型中,输入是持续的,可以认为在时间上是无界的,也就意味着,永远拿不到全量数据去做计算。同时,计算结果是持续输出的,也即计算结果…

计算机网络(速率、宽带、吞吐量、时延、发送时延)

速率: 最重要的一个性能指标。 指的是数据的传送速率,也称为数据率 (data rate) 或比特率 (bit rate)。 单位:bit/s,或 kbit/s、Mbit/s、 Gbit/s 等。 例如 4 1010 bit/s 的数据率就记为 40 Gbit/s。 速率往往是指额定速率或…

设计模式--代理模式(Proxy Pattern)

一、什么是代理模式(Proxy Pattern) 代理模式(Proxy Pattern)是一种结构型设计模式,它允许一个对象(代理)充当另一个对象(真实对象)的接口,以控制对该对象的…

video标签在安卓手机内置浏览器上的播放问题

道阻且长,行而不辍,未来可期 问题: 在手机内置浏览上,虽然没有给video标签设置controls,但在内置浏览器上,就是会显示。 而且,video一旦自动播放,video的层级就会提升到最前,想设置一个盒子覆盖…

lambda 表达式

C自学精简实践教程 目录(必读) 什么是lambda表达式? lambda表达式实际上就是一个类似函数的可以被调用的对象。 和函数一样可以使用圆括号调用。 只不过,这个函数可以定义在代码的任意位置。非常的灵活,自由。而函数不能定义在其他函数的…

【数据结构】多叉树转换为二叉树-c++代码实现-POJ 3437 Tree Grafting

文章目录 写这个题目的原因寻找提交网址题目解决思路AC代码成功AC 写这个题目的原因 1、今天在看王道考研数据结构的课(虽然我要保研,但是因为这些看保研面试的时候会问,所以看一下嘞orz),看到了这个多叉树转换为二叉…

【YOLOV5】YOLOV5添加SPPCSPC

当前YOLOV5版本为7.0 第一步 在models/common.py添加SPPCSPC class SPPCSPC(nn.Module):# CSP https://github.com/WongKinYiu/CrossStagePartialNetworksdef __init__(self, c1, c2, n1, shortcutFalse, g1, e0.5, k(5, 9, 13)):super(SPPCSPC, self).__init__()c_ int(2 *…

CS144(2023 Spring)Lab 0:networking warmup(环境搭建 webget bytestream)

文章目录 前言其他笔记相关链接 1. Set up GNU/Linux on your computer2. Networking by hand3. Writing a network program using an OS stream socket3.1 Linux配置3.2 C规范3.3 Writing webget3.3.1 实现3.3.2 测试 4. An in-memory reliable byte stream4.1 思路分析4.2 代…

以GitFlow分支模型为基准的Git版本分支管理流程

以GitFlow分支模型为基准的Git版本分支管理流程 文章目录 以GitFlow分支模型为基准的Git版本分支管理流程GitFlow分支模型中的主要概念GitFlow的分支管理流程图版本号说明借助插件Git Flow Integration Plus实现分支模型管理其他模型TBD模型阿里AoneFlow模型 GitFlow分支模型中…

Java处理 CDT时区转换CST时区

例如:夏令营时间(“Sat Aug 01 00:00:00 CDT 1987”) //TODO CDT时区转换CST时区Date date new Date(value);TimeZone cdtTZ TimeZone.getTimeZone("America/Chicago");TimeZone cstTZ TimeZone.getTimeZone("America/Mexi…