计算机科学: 寄存器&内存
参考:
【十分钟速成课:计算机科学】6.寄存器&内存
要想聊寄存器Latch,首先要聊内存。什么是内存?
Memory,就是储存信息的东西。
我们都玩过单机游戏,如果突然关机,游戏结束但是没有存档,那么下次就必须从新再玩。
这是因为游戏储存进度而使用的内存是RAM,类似于人的短期记忆。
那么问题来了,我们如何储存信息?
我们知道对于计算机来说,信息就是1或者0
因此,我们只要控制每一个位置的信息是1,或是0不变,就能把信息保存下来。
现在来聊点实际的:
如何储存信息1?
来看这个门:

这个门的输出永远是1,不论A的输入是什么。
同理,这个门的输出永远是0

我们可以结合这两个电路,得到 :

我们通过置1或者置0的电路输入信号,让他的输出永远是1或者0。
它记住了一个信息!!! That‘s what we call Memory~
这叫做锁存,因为它锁住了一个值。
再优化一下:

这个电路由两个信号控制,enable 和 Input 如果enable了,就允许数据读入,否则无法读入数据。
接下来,把他抽象成一个黑盒就好了。这个盒子能够储存一个bit
我们可以并排8个latches 这就是一个八位寄存器。其中八个成为位宽
然而一个寄存器有三条线,Input output enable ,对于一个128位宽的寄存器来说,
即使enable只用一根线来代替,那也是128*2+1 根线。
如何减少?
Matirx
我们把256个寄存器放入16 *16 的矩阵中:

其中,我们通过导通某行和某列交叉线的位置上寄存器的enable,而其他寄存器上的enable 关闭。
这可以通过与门实现。
然后让数据在电路里流过,但是只有enable 打开的寄存器才能读入数据。
这样只需要35条线。
那么如何指定交叉位置?
比如说我想指定第12行,第8列的位置。
首先地址最多有6行,那么只需要用四位二进制数表示就好了。
12=1100
8=1000
那么,我们把12行8列对应的地址就可以表达为:11001000(就是12的二进制表示和8的二进制表示连接起来)
我们现在知道了如何将地址存储为二进制数了,
那么如何解读成第几行第几列呢、
here comes mutilplexer
现在我们把一个128位的寄存器抽象一下:“

他需要你输入一个储存的地址,和read enable write enable 还有data
这样一个256位的 memory 也没啥用,我们需要更大的内存,所以把它叠起来。

计算机科学: 寄存器&内存的更多相关文章
- 汇编寄存器(内存访问)基础知识之三---mov指令
1 内存中字的存储 一个字型数据占2个内存单元,内存里面一个内存单元一个字节(8位),高地址单位放高8位,低地址单元放低8位. 注意:0号是地址单元,1是高地址单元(上是低地址,下面是高地址) (1 ...
- CPU/寄存器/内存
因为要了解多线程,自然少不了一些硬件知识的科普,我没有系统学习过硬件知识,仅仅是从书上以及网络上看来的,如果有错误请指出来. CPU,全名Central Processing Unit(中央处理器). ...
- 【reverse】逆向2 寄存器与内存
[reverse]逆向2 寄存器与内存 1.通用寄存器 主要用途其实没必要记下来,因为只是CPU建议你这么做. 寄存器需要按照顺序被下来 32位就是可以存32个0或1 所以存储范围就是0-0xFFFF ...
- 5. c++ 内存管理 C/C++ 内存机制
参考自:http://blog.csdn.net/wpf_ml/article/details/7759911 1. 内存,Cache,寄存器内存:通常计算机将数据存放在物理内存,cache及寄存器中 ...
- X86-64寄存器和栈帧
简介 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果.除此之外,它们还各自具有一些特殊功能.通用寄存器的长度取决于机器字长,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途, ...
- 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))
java虚拟机的内存区域分配 在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...
- JVM内存划分以及值传递和引用传递的区别
Day05_SHJavaTraing_4-8-2017 一.JVM对自己的内存划分为5个区域 1.方法栈:所有的方法运行的时候进入内存 2.堆:存储的是容器和对象 3.方法和数据共享 ...
- 【嵌入式开发】裸机引导操作系统和ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )
[嵌入式开发]ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 ) 一. 内存 ...
- DirectX11 With Windows SDK--29 计算着色器:内存模型、线程同步;实现顺序无关透明度(OIT)
前言 由于透明混合在不同的绘制顺序下结果会不同,这就要求绘制前要对物体进行排序,然后再从后往前渲染.但即便是仅渲染一个物体(如上一章的水波),也会出现透明绘制顺序不对的情况,普通的绘制是无法避免的.如 ...
随机推荐
- 算法——单词拆分 II
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 链接: leetcode. 解题思路 ...
- (干货)构建镜像之Dockerfile
Dockerfile是一个文本文件,记录了镜像构建的所有步骤. 饭提示:学习Dockerfile构建镜像,就是在学习Dockerfile文件构建的命令+shell脚本语句 Dockerfile简单介绍 ...
- JavaScript:记录一些字符串和数组常用的方法
字符串: 字符串的方法:注意:都不会改变原来的字符串,返回值为新的字符串.如果(1,2),一般是包含小标1,不包含下标2 str.charAt(i): 取str的第i+1个字符,类似数组的arr[i] ...
- 移动端 CSS3动画属性
一.transform 转换属性 #1. translate位移 transform : translate(50px,100px); //把元素水平移动 50 像素,垂直移动 100 像素 tran ...
- 用DirectX 11绘制一个Cube
之前一篇文章讲了如何初始化DirectX 11,现在在此基础上绘制一个Cube,总体可概括为以下几个步骤: 定义Cube顶点数据结构 创建Vertex Buffer和Index Buffer 编写应用 ...
- Java基础知识面试题详解(2019年)
文章目录 1. 面向对象和面向过程的区别 2. Java 语言有哪些特点? 3. 关于 JVM JDK 和 JRE 最详细通俗的解答 JVM JDK 和 JRE 4. Oracle JDK 和 Ope ...
- K8S构建1台master2台node+Harbor_笔记
部署环境: master.node:centos7虚拟机 网络使用本地网卡共享到VMnet1(仅主机),虚拟机使用VMnet1. 准备文件: CentOS-7-x86_64-Minimal-1810. ...
- 精尽Spring MVC源码分析 - ViewResolver 组件
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 神奇的 SQL 之 HAVING → 容易被轻视的主角
开心一刻 一天,楼主和隔壁小男孩一起坐电梯,中途进来一位高挑的美女,她牵着一条雪白的贵宾犬 小男孩看着这条雪白的贵宾犬,甚是喜欢,说道:阿姨,我能摸下这个狗狗吗? 美女:叫姐姐 小男孩低头看了下贵宾犬 ...
- Redis 设计与实现:字符串 SDS
本文的分析没有特殊说明都是基于 Redis 6.0 版本源码 redis 6.0 源码:https://github.com/redis/redis/tree/6.0 在 Redis 中,字符串都用自 ...