转载请遵循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. (C++)C++多态性中的静态绑定和动态绑定

    静态绑定和动态绑定是C++多态性的一种特性. 1.对象的静态类型和动态类型: 对象的静态类型: 对象在声明是采用的类型,在编译期确定: 对象的动态类型: 当前对象所指的类型,在运行期决定,对象的动态类 ...

  2. CSS基础和布局复习

    table布局 div布局优势   浏览器支持完善   表现和结构分离   样式设计控制功能强大   可以继承,层叠处理 Transitional // 松散过度型 Strict //严格型 Fram ...

  3. [javase学习笔记]-8.1 statickeyword之特点

    这一节我们来学习java语言中一个新的keyword就是statickeyword. 当然对于每个keyword,我们都要明白的是它有什么作用,怎么用.我们先来看一个样例: class Person ...

  4. UNIX网络编程读书笔记:基本UDP套接口编程

    概述 使用UDP编写的一些流行的应用程序有:DNS(域名系统).NFS(网络文件系统)和SNMP(简单网络管理协议). 如下图所示,给出了典型的UDP客户/服务器程序的函数调用: 客户不与服务器建立连 ...

  5. UNIX网络编程学习笔记:值-结果(value-result)参数

    前言 当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针.结构的长度也作为参数来传递,其传递的方式取决于结构的传递方向:从进程到内核,还是从内核到进程. 1.从进 ...

  6. Java多线程具体解释

    Java多线程具体解释 多线程简单介绍 概述 多线程(multithreading).是指从软件或者硬件上实现多个线程并发运行的技术.具有多线程能力的计算机因有硬件支持而可以在同一时间运行多于一个线程 ...

  7. 20-spring学习-Spring MVC基本操作

    本次实现数据的CRUD功能,数据依然以VO类形式进行数据接收. 一,建立Message.java类操作,负责数据的接收操作. package com.SpringMVC.vo; public clas ...

  8. ubuntu开启ftp服务

    首先再防火墙中开启21和20端口 iptables -A INPUT -p tcp --dport -j ACCEPT iptables -A INPUT -p tcp --dport -j ACCE ...

  9. 解析_theme_build_registry()和_theme_process_registry()

    Drupal使用_theme_build_registry()和_theme_process_registry()两个函数构建theme registry.theme registry是theme h ...

  10. 迅为4412开发板Linux驱动教程——总线_设备_驱动注冊流程具体解释

    视频下载地址: 驱动注冊:http://pan.baidu.com/s/1i34HcDB 设备注冊:http://pan.baidu.com/s/1kTlGkcR 总线_设备_驱动注冊流程具体解释 • ...