转载请遵循GNU开源宣言。Copyleft ! <2013>, <http://www.cnblogs.com/sciencefans from buaa 华罗庚班>

阅读此文,你需要拥有以下基础:

1.能理解本系列第2节和第4节;2.已经阅读了第4节。

=========================================================================

(为什么mac总是配图失败呢,,)

  很久没有更新本系列了诶。。。有一个月了吧。但是经过这接近一个月来对code的重新阅读以及对其他一些书的草草翻翻,更加进一步的对计算机领域本身,计算机的数学发展以及计算机的哲学发展这三个方面进行了了解和深入理解与思考。作为一个数学系的计算机系学生,加上这些理解,自然会有自己一些会对或错的想法。或许这些将会在以后的文章中隐隐约约地显现出来。

  一直在纠结到底应该先写汇编还是先写自动操作。csapp一书是直接从寄存器开始讲汇编,刚开始开的时候还真有些不好理解,有些东西没有听说过(毕竟是数学系的),而计算机组成与设计(以后简称COD H/S)一书却索性放到了附录,唯独code一书是从最简单慢慢在不知不觉中让读者发现:哇,我现在看的原来就是汇编啊!那么我决定走code路线~

那么进入正题吧~

之前我们已经做出了最简易的加减器,单位存储器。其中加减器可以认为是一个非常不完善的cpu,而存储器可以认为是最简陋的RAM。面对上一次提出的三个问题,今天开始的接下来三节一共要搞明白以下几件事:

  1. 多位存储器;
  2. 怎样自动就能不停地进行累加;
  3. ‘累加’该怎么停止;
  4. 怎么让‘硬件’通过‘代码’自动化。

  首先是多位存储器。上一次已经做出了一个单位存储器,在本文中我用下面这个集成小块儿来代表它(具体电路见第四节):

  根据之前我们制作多位运算器的经验,多位存储器应该也是多个单位存储器的某种形式的链接,唯独不同的一点就是需要增加一些调度电路——它必须知道总线发过来的信号应该给多位存储器中的哪一‘位’,它也应该知道怎么进行‘读’‘写’操作。

  首先要解决的问题是‘调度’电路怎么设计。现在以8位存储器为例,想要确定某一时刻数据应该往8个子位的哪一位存,应该消耗多少输入端口来确定呢?或者说,假设这八个单位存储器的地址分别是1,2,3,。。。,8,需要多少个输入端口来把他们区分开呢?这里要引入一个新的东西——3-8译码器。我们知道,想要表达8种不同的状态最少需要3个二进制位(还记得小白鼠的实验那个游戏吗?8杯水只有一杯有毒,只喂一次的情况下最小需要3只小白鼠才能知道哪杯有水)。所以输入地址位应该是3个。下面就是3-8译码器(顾名思义)的电路:

  左下角的DI代表的意思是数据输入,这个输入的数据应该给右边8个端口中的哪一个呢?由左下角的S0,S1,S2确定。仔细看看电路就不难发现这个电路的精妙所在。S0,S1,S2三个端口的原本信号和取反信号分别构成了1,0,三个1,0位的全部结合构成了这8个输出口的‘地址’——000,001,010,。。。,111.

  解决了数据输入调度,现在该解决数据输出调度了,输出和输入是两个相反的过程,所以输出调度就是把输入调度元件反着画一下就好了,他有一个新名字——8-1选择器:

  左边的输入口自上向下分别是8个单位存储器的输出,三个S地址调度器代表特定的某个输出口被打开。右边的输出端口就代表被选中的那一‘位’存储器的输出值。

  现在准备工作都完成了,分别把3-8译码器,8个单位锁存器,8-1选择器进行连接,变成下面这个样子:

  蓝色,红色和绿色本别是3-8译码器,单位锁存器和8-1选择器。

  大功告成之后,该做测试了:现在这个8位存储器初期的状态是:EEEE EEEE(未知状态)

  现在我想写入0001 0111怎么办呢?只需要两步:1.全部复位成0:0000 0000

                          2.将0,1,2,4位写入1

  具体来说,只需要先将D(data)位一直输入0,打开W位(输入1),再依次在A(address)0,A1,A2位输入000,001一直到111即可完成归零操作,再将D输入1,打开W,地址依次输入000,001,010,100即可完成写入工作。最后的状态如下图:

  画红圈代表该位存储值为1,不画代表为0.各位存储器的编号已经标出,很容易读出:0001 0111 和我们的预期相同。

  我们知道,8bit=1byte,也就是说一个8位存储器的存储能力是1byte。我们可以并联很多个这样的8位存储器,比如如果把1073741824个这样的8位存储器并连到一块儿,就变成了一个容量为1GByte的大存储器,而那时候我们的地址位就不仅仅是3个就能存下这么简单的了。思考一个问题:现在主流的32/64位操作系统分别最大支持4G和16EB,(1EB=1024PB=1048576TB=......)(实际也到不了那么大,这和总线寻址,操作系统有关),这是为什么呢?再想想刚才3-8译码器的原理,不难得出以下公式:

 BitNum = Log()(MaxMemBit)

  也就是说地址位数(比如3-8译码器的地址位为3,32位操作系统地址最大是32位)等于最大内存寻址大小对2取对数。

  事实上,这里所说的‘地址’只是一个我们想当然的某一个‘位’的地址,事实并非如此。人们把存储器分为很多区,每个区分为很多存储器板,每个存储器板会有一定量的存储体,每一个存储体可以存储很多位,每一个位在存储体里有特定的地址。这就相当于我们把100000个学生不仅仅从学号进行寻找,还给他们分配了班级,系别,年级等等嵌套式的整理,这使得管理起来非常明了,但是本质上和我们对他们直接进行‘学号寻址’是一样的。这些内容将在以后的总线设计中提到。

  综上,我们对内存和地址的关系或许有了一定的了解,这样一来我们就有了一些大胆的猜想——既然所有计算机操作在处理器上都可以归结成‘加法’,‘移位’等非常少的基本逻辑运算,那么实现自动‘累加’就是实现自动化的一大进步。累加的加数的存储问题已经在本节被解决了,而怎么让处理器来处理‘累加’呢?每次‘累加’的结果怎么存储才有效率?这些将在不久以后解决。

  至此,一个多位存储器也基本完成了。

组建一台计算机5_硬件5 多位存储器&累加器&初始汇编(1)的更多相关文章

  1. FAT16/32不等于ESP:windows安装程序无法将windows配置为在此计算机的硬件上运行

    今天给公司电脑装系统,由于公司特殊需要,要给新电脑装win7系统.三台完全一样的华硕adol笔记本,前两台都和win10并存装成了双系统,第三台被不懂系统的人尝试装win7搞坏了,只能全盘格式化后再装 ...

  2. Reading Notes : 180213 计算机的硬件构成与处理流程

    读书<计算机组成原理>,<鸟哥的Linux私房菜基础篇> 基本上接触过计算机的人,都多少知道计算机的具体构成,但是真正能讲明白的却说了很多,本节将讲解一下计算机的基本硬件构成和 ...

  3. 计算机三大硬件和操作系统以及python解释器

    今日分享内容概要 计算机五大组成部分详解 计算机三大核心硬件 操作系统 编程与编程语言 编程语言的发展历史 编程语言的分类 python解释器 python解释器多版本共存 分享详细 计算机五大组成部 ...

  4. [原创]用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题

    用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题,原因是终端服务器授权方式设置为了"每 ...

  5. (转)无法打开C盘,提示"本次操作由于这台计算机的限制被取消,请与你的管理员联系”

    今天下了一个网吧用的工具一不小心把系统给限制了好多双击打开C的时候就出现本次操作由于这台计算机的限制被取消,请与你的管理员联系下载一个精锐网吧辅助工具解除了一下现在但是还是不能双击 于是就在网上找帮啊 ...

  6. MySql集群FAQ----mysql主从配置与集群区别、集群中需要多少台计算机呢?为什么? 等

    抽取一部分显示在这里,如下, What's the difference in using Clustervs using replication? 在复制系统中,一个MySQL主服务器会更新一个或多 ...

  7. 集群中配置多台计算机之间ssh无密码登录的一种简便方法

    当我们在配置多台计算,使之可以相互使用无密码登录-ssh,之前都是一台一台的配置,现在一台A上添加B,然后在另一台B上再次添加A,这样使得 authorized_keys中的内容相同,但时并不是完全相 ...

  8. Windows 安装程序无法将 Windows 配置为在此计算机的硬件上运行

    遇到这个问题是用辅助工具(WinNTSetup3.exe)进行的安装,重启后就就遇到“Windows 安装程序无法将 Windows 配置为在此计算机的硬件上运行” 解决:在WIN PE 下挂载安装光 ...

  9. 如何ping通两台计算机

    如何ping通两台计算机 因为ping是基于IP协议的,所以,先要保证两台计算机在同一个子网中,这里涉及到vlan和子网的概念 若两台主机不在同一个子网中则无法ping通 若两台主机在同一个子网中却p ...

随机推荐

  1. 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)(1)

    原文:http://developer.51cto.com/art/201501/464174.htm 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定 ...

  2. Sn.exe(强名称工具)

    Sn.exe(强名称工具) .NET Framework 4.5   强名称工具 (Sn.exe) 有助于使用强名称对程序集进行签名. Sn.exe 提供了用于密钥管理.签名生成和签名验证的选项. 强 ...

  3. IIS7.5 取消301重定向

    今天想把一个域名解析到对应的www的域名,添加了301重定向.   结果域名解析那里是把www解析到了对应的域名,结果就是重定向循环.立即删除了IIS中重定向,结果还是无法解决.   以为是有缓存,重 ...

  4. SLAX初体验

    Slax是一个便捷.便携的Linux操作系统.它的界面既充满时尚感,又可基于不同模块的功能运作.它的界面富有时尚感,并集成了不同的模块的界面.尽 管它的容量十分娇小,Slax依然预载了不少日常应用的软 ...

  5. Unity Editor类常用方法

    http://www.cnblogs.com/zhaoqingqing/p/3944718.html 一些比较常用的Editor功能我在之前的博客中也有提到过所以就不详细写啦,今天参考了一下 麒麟子( ...

  6. taro 填坑之路(三)taro 缓存

    1.taro 缓存 /** * 缓存数据 H5 小程序 * {food.id:{菜品信息 Num}, } */ import Taro from '@tarojs/taro'; // 取值 let s ...

  7. Android-PullToRefresh(一)

    先讲下这篇写啥东西,也就是这家伙(chrisbanes)写的一个上拉下拉刷新的Demo,连接https://github.com/fengcunhan/Android-PullToRefresh 东西 ...

  8. Native App、Web App 还是Hybrid App

    Native App.Web App 还是Hybrid App? 技术 标点符 1年前 (2014-05-09) 3036℃ 0评论 一.什么是Native App? Native App即原生应用, ...

  9. ADBport被占用,adb server is out of date

    wd=adb&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YdPWD1uyP-PHf1ryRYP1Nh0ZwV5Hcvrj ...

  10. 【php】php路径目录解析函数dirname basename pathinfo区别及实例

    php获取路径.目录或文件名称,我们经常会使用到dirname().basename().pathinfo()这三个函数,本文章向大家详细介绍这三个函数的区别以及使用实例,需要的朋友可以参考一下. d ...