设计一个具有带进位加法和立即数寻址方式的模型机

发布网友 发布时间:2022-04-20 08:51

我来回答

1个回答

热心网友 时间:2023-11-18 10:39

title: 计算机系统概论-笔记
date: 2019-09-28 10:40:32
tags:
typora-copy-images-to: ./计算机系统概论-笔记

本章就是概括性的讲解了一下计算机的一些基本常识.和计算机能产生的深刻哲学理念和计算机组成的层次

以8位二进制为例,这里需要考虑二进制是正数还是负数,负数的话要拿到补码在计算,补码表示法中最高位代表符号位

十进制转二进制,就是每次除以2,记录余数,然后从右到左排列,得到二进制数.

这四个结构就是布尔代数的基础结构.也是很多电子原器件能时间的固定门结构

浮点数用来表示小数.但也不是绝对的精确.只能在二进制数的范围内尽量接近结果.浮点数用固有的结构来表示,类似科学计数法,由三部分组成 比如 12340 =1.234*10^4

符号位:1bit 0为正数1位负数

数值范围:8bit 指数部分

数值精度:23bit 尾数部分

二进制的每四位都可以对应一个16进制, 因此直接四位四位一组转换就行

​ 如 0011 1101 0110 1110 转换为 3 D 6 E 也就是3D6E

同理 十六进制转换二进制,就是把每位转成四个二进制01

本章将了一些二进制的常用转换,其实最主要的是补码,通过补码把减法转换成加法,简化了计算机的实现.而浮点数则是通过牺牲数字的精度来扩大了数值的范围,包括表示更大的大数如 1.510^20和更小的小数.1.5*10^(-20)

in输入电压时,p断开n联通, out和ov相练.输出0v

in无电压时,p联通,n断开,out和2.9v相连,输出2.9v

电路in的输入和out的输出结果总是想反的

A B任一方有电压,都会导致上方p断开,下方0V联通, 则C输出为0v

A B都无电压时, 上方 2.9v 与C联通, 则C输出2.9V

​ 或门就是或非门的相反或者说 或门取反就是或非门

​ 电路就是或非门的输出结构在加上之前的非门,把结果在反转

左边部分.AB任意一个为0则上边两个P型会有一个连通,导致C输出为1,在经过非门后输出为0

A B 都为1时, 上边两个P行都端口,此时c输出为0,经过非门后为1

到这里二进制运算的与或非.就已经可以通过电路来实现了.而与或非,异或作为最基础的元件,在经过复杂的组合可以形成更多复杂的逻辑.下边把这几个门用符号抽象化,其中与非门和或非门就是对与门和或门取反

决策单元是不能存储数据的电路组合,他的输出取决于当前的输入.输出后的数据也没办法在决策单元中存储起来.

简单来说决策单元就是由实时的输入产生实时的输出.并不保存结果.

所有的输出结果没次只有一个是1,其他都是零.这个几个结构用来检测匹配不同的输入模式.因为他可以通过输出的结果判断输入的来源

与门前的小圆圈表示对输入取反. AB的每种组合都对应一个输出线路.这就是一种判断逻辑

这是一个一拆多的组合

ABCD 一直是输入的数据源.有电压. 而通过S的两根线路的组合.来决定使用ABCD的那个输入来传递给输出.

这是一个多合一的组合

累加器是用来做二进制的加法的.二进制的加法 其实是三个输入产生两个输出的结果

如 a= 10111 加 b= 11101 其实是两个数的每一位逐渐相加.但是这里两个位相加可能会产生进位.所以应该改为是a和b的每一位和前一位产生的进位(可以是1或0) 进行相加. 产生的结果也包括当前位的和,和一个进位.用carryi表示第i-1位产生的进位, carryi+1表示i位产生的进位, si是当前位相加的结果 真值表如下

门电路如下,可以看到.两个1位相加,就需要这么多电路,然后产生的传ci+1还要作为下一位相加的输入进位.

讲多个1位的全加器组合,形成多为加法器

最右边的0 是第一位加法的进位,然后产生的c1作为第二位加法的进位. S0,S1,S2,S3则是每位加法后的结果,最后输出的二进制格式就是 C4S3S2S1S0

指通过与或非三个门的各种组合,可以实现任何逻辑函数.类似道家的三生万物

存储单元用来把数据保存在电路中,在使用的时候将其输出

他能存储1比特的信息,S和R是两个输入端 ab是输出端.这个器件规定RS不能同时为0.而且这个电路任何时候A和a相同,B和b相同.

这个器件的规律是.当S和R都为0或都为1时, a b的状态都是稳定不变

当R从 1->0时, a->0 b->1

当S从 1->0 是,a->1,b->0.

而 R或S从 0->1时 a,b的状态稳定不变

因此只有 R或S从1->0时,才会改变ab的状态,其他情况 ab保持不变, 这就相当于这个器件提供了保存状态的功能和变更状态的功能,这就是一个存储器.

在锁存器前在加两个控制,we表示可写,D是输入的数据,当we为0时,SR都是1.输出不变,只有当W0->1时,无论

D是0还是1.都导致 RS其中一个由1->0,就会导致其中一个输出会变为1

举例.We为1,如果D为0,R会 1->0,b变成1a变成0 We为1,如果D为1,S会 1->0, 则a变成1b变成0

因此 We为1时,a的结果和D同步,表示D的数据保存在了a中,we为0时,a的数据不会在变化.

到此.这个锁存器可以通过数据数据D和读写控制W来变更,保存数据了.

把多个门控D锁存器相连,用同一个WE信号控制,就形成了多位的寄存器

下图是4位寄存器,D是数据源 Q是输出的存储结果 WE统一控制四位锁存器同时写入数据

内存是由数量极大的存储空间构成,每个存储空间可以放一个数据.而每个数据我们可以约定他有8位或者4位或者16位锁存器组成. 这里的每个存储空间的识别符叫做地址. 而每个数据中含有的锁存器的个数(也就是能存储的bit的位数)叫做寻址能力.地址的总数叫做寻址空间.

以手机短信为例. 手机上最多装2000条短信,2000叫寻址空间.而每个短信可以包含100个字.就是寻址能力是100.

比如说电脑有16MB内存,表示该系统有16M的地址个数(寻址空间为16M),而每个地址的寻址能力是1字节(寻址能力是8bit)

上文中,决策单元是不保存数据,当前的输出取决于当前的输入.存储单元是报错数据,可以持久使用.时序电路则是决策单元和存储单元的组合,既能存储数据,又能保存数据

时序电路的主要用于实现有限状态机.所谓有线状态机,就是指他有几个固定的状态,然后又固定的输入和输出,他会自己在这几个状态间切换,输入不同的状态.每个状态都会根据当前状态和当前输入来跳转到下一状态.例如红绿灯.红灯会在输入时间到变换时,根据现在是红灯状态,跳为绿灯,而绿灯则会跳到黄灯.

有限状态机表示一直逻辑上的顺序执行过程.他通过固定频率的市中电路来触发.

本章讲了主要讲了最基础的与或非门器件,然后由这几个器件组成了计算机中最重要的决策单元和存储单元.这两部分就是计算机的核心部件.到这里我们就发现.计算机其实就是有一些器件进行封装组合,然后形成了控制逻辑,然后慢慢演化出了程序和数据.

现在常用内存是 228-by-8-bit模式,也就是寻址空间为228(2^28个存储单元),寻址能力为8(每个单元容量为8bit)

访问内存需要先得到某存储单元的地址,放在CPU的内存地址寄存器(MAR)中,然后在发送读写信号,使内存和cpu的数据寄存器联通,数据从内存进入到数据寄存器(MDR)中.

ALU是算数逻辑运算单元,可以进行加减法和与或非逻辑运算.ALU能处理的数据的长度成为字长,目前通常是32位和64位字长.

通常为ALU配置少量存储器.用来保存计算中间结果.因为从内存中读取太慢了.这些存储器叫寄存器,字长和ALU一直

输入输出的读写速度更慢,通常会为他们分配缓存,CPU与缓存进行数据交流

控制单元指挥其他单元协同工作.里边最重要的两个寄存器是指令寄存器,用来保存被执行的那条指令,程序技术器,保存下一条要执行的指令的地址.控制单元包括有限状态机,用来控制系统中的活动.

指令周期是指指令的执行步骤,指令在计算机控制单元的控制下一步一步执行,每个指令分为六个步骤,称为节拍,一个指令的完整执行过程叫指令周期.

取指令就是把内存中某个指令,加载到控制单元的指令寄存器IR中.PC就是指向下一个要执行的指令的地址.详细步骤如下

从这里可以看到CPU与内存打交道都是通过MAR,MDR寄存器, MAR保存某存储单元的地址,MDR从该单元拿到数据.而IR寄存器总是保存要执行的指令的内容,IP则总是指向下一个要执行的指令的地址.

这里的每个步骤都会花费一到多个时钟周期

译码操作是分析,检查指令的类型,并确定对应的操作.这里利用第三章的译码器 逻辑器件,确定指令对应的电路.

如果指令执行时存在地址操作,则在此节拍进行. 就是得到 指令操作数中完整的地址

读取操作数地址对应的实际内容,这里也需要使用MAR装入上步计算出的地址,然后通过MDR把地址上的数据读取出来

指令已经识别出,操作数的内容也拿到了.这步就是执行指令.

这是该指令周期的最后一个节拍,前一节拍的结果会被写入目的寄存器.该节拍完成后,控制单元再次从取指令开始执行下一个指令周期(因为此时PC寄存器已经指向下一个将要执行的指令地址了).这里就是一个有限状态机在不同状态的按顺序切换

要想改变指令的执行顺序,比如跳到一个我们希望他执行的指令那里,例如循环时需要向前跳.就要在当前指令取指令节拍 后Pc指向下一个指令 到执行下一个指令的取指令节拍前,把pc执行的指令的地址改成我们希望执行的指令的地址. 这就需要用到控制指令, 控制指令就是在上文的执行节拍EXECUTE,主动修改PC寄存器的内容.那么本条指令执行完后,Pc就取出我们想要的指令的地址了.

因为CPU是一条指令一条指令一直执行,如和才能停止运行呢,因为指令是根据CPU的时钟周期来运行的.意思是时钟不断发信号提醒指令执行不同的节拍,然后一直执行指令.因此想停掉指令执行,就是要停止时钟.也就是事运行控制位输出为0 .就停止了时钟.

本章介绍了冯诺依曼的模型.现在的计算机都是采用这个模式来设计和组装的.这里边不同的硬件,对于CPU来说.都需要把数据读到寄存器中,CPU在从寄存器中读取使用.因为CPU的频率远远高于内存和io单元的频率.

接下来是指令执行的六个阶段.他是一种有限状态机.不停的在六个节拍中顺序执行.这里就用上了上章的译码器器件.

lc-3 是一个简化版的计算机.用来了解整个计算机的完整构造.

​ 寻址空间是2^16(数据块),寻址能力是16位(数据块大小), 我们成这16位寻址能力叫做一个"字".

​ 内存和频率远远低于CPU的频率.CPU从内存直接读取数据就浪费大量时钟周期.所以CPU中有很多寄存器,其实就是告诉内存.他们和内存的原理一样,能存储数据,有唯一表示能独立寻址,用R0...R7表示8个寄存器

​ 指令集包括 操作码(做什么)+操作数(对谁操作) 其实操作数中还包括 寻址模式, 也就是怎样定位到操作数的具体位置,该指令表示 把R0 和R2的值相加,结果保存在R1中

​ 操作码主要分三类,运算,数据移动,控制. 运算指令负责处理信息(加减乘除与或非) 数据移动指令负责在内核和寄存器之间以及内存/寄存器和io设备间传递信息. 控制负责改变指令的执行顺序,如指令跳转.

​ 全部指令如下 DR是 DestinationRegister目的寄存器 SR是SourceRegister 源寄存器 通常指令都是把sr的数据传入到dr中

​ 是指定位操作数位置的方式.操作数通常在三个地方,内存,寄存器或数据本身.通过寻址模式和操作数的搭配确定操作数的具体地址. 寻址模式有5种,立即数,寄存器,相对寻址,间接寻址,基地址偏移

​ lc-3中有3个一位寄存器 N Z P ,当任何寄存器有数据写入时,根据结果,如果写入结果是负数,N为1.结果是0则Z为1,写入是正数则P是1. 这三个寄存器可提供信息给控制指令用来做条件跳转用.

对源操作数按位取反,放入目的操作数 使用寄存器寻址模式,也就是源操作数和目的操作数都是寄存器

把 R5寄存器的值按位取反,结果放在R3寄存器中

ADD是两个操作数执行补码加法.AND是两个操作数执行按位与. 这个指令需要2个源操作数,一个目的操作数.这里的源操作数,其中一个是寄存器寻址模式.另一个可以是立即数寻址模式或寄存器模式.

立即数就是把数值直接放在指令中作为源操作数.如 MOV AL, 0FH ; 将8位立即数0FH传送到AL寄存器中, 0FH就是立即数

下图是 把 R5和R4的结果相加.保存在R1中

搬移指令是在寄存器和内存/寄存器和Io间进行数据传输的指令. 数据从内存到寄存器叫装载(load),从寄存器到内存叫存储(store).

如果bit[9-11]是DR 表示把地址生成位中的数据加载到改DR中

如果bit[9-11]是SR,表示把该SR的数据保存到地址生成位的内存中

​ LD 加载指令 ST存储指令

​ 该模式下 bit[0-8]表示的是相对位移.相对于当前pc计数器的位移,(上文说过pc计数器保存下一条要执行指令的地址) .pc相对寻址的*就是 偏移量是针对PC的地址的.所以偏移的范围有限

如下图.此时pc的值是 x4019,相对x4019在偏移x1AF ,LD是加载指令.意思是把 (x4019+x1AF)地址中的数据保存到R2中

​ LDI 加载指令 STI存储指令

​ 间接寻址中.地址生成位保存的是一个偏移地址A. 而A和PC相加后得到的数值是另外一个地址B.地址B的值才是最终要操作的内存地址.间接寻址可以使指令在更大的范围内跳转. 这是一种2次寻址.x

​ 下图解释. pc当前的值是 x4A1C. 则偏移地址A =(x4A1C +x1CC)=x4BE8 ,下图写错了.应该是x4BE8的内容是x2110,然后在把x2110的内容放在R3中.

总结起来就是先进行一次pc相对寻址,再把得到的地址中的值交给R3

​ LDR 加载指令 STR存储指令

​ 该模式先指定一个基地址寄存器.在指定一个偏移地址,最终的操作数地址由 基地址寄存器的值+偏移地址构成

​ 下图解释, 操作数地址 = R2+x1D =x2345+x1D =x2362, 在把 x2362地址中的内容加载到 R1中

​ LEA 将立即数与pc计数器地址相加.保存到另一个寄存器中.该命令用来对寄存器初始化.

​ 立即数.这个词的命名意思就是,操作数就在指令中,直接就可以读取了(文中-3).就是立即得到.上图中,改指令读取指阶段,pc加1 变成 x4019, 执行时 x4019-3 =x4016. 再把x4016地址处的值复制给R5.

​ 控制指令可以改变指令的执行顺序.不用说.肯定是修改pc计数器的值.而且控制指令肯定是需要根据条件判断进行跳转.因此也用上了上边提到的 NZP 三个一位寄存器.

​ lc-3中有5中控制指令, 条件跳转,无条件跳转,子程序(函数).TRAP,中断返回

​ N negative 表示负数 Z zero 表示零 P positive 表示正数

​ bit[9-11]中的值如果与NZP三个位寄存器匹配时,该条件被触发.pc计数器就会计算pc计数器的值+pc偏移值, 也就是进行了指令的跳转.

在指令周期的执行节拍(EXECUTE),处理器检测bit[9-11]的条件码和 NZP三个位寄存器的匹配情况,如果匹配,就修改pc计数器的值.完成指令跳转.

上图中 pc=x4028 修改后的pc = x4028+x0D9 =x4101

如果 某指令的bit[9-11]位都设置为1. 则一定会触发跳转,这叫做无条件跳转指令.

条件跳转指令的问题就是跳转是根据pc偏移值来跳转的.一共8位,跳转的范围有有限.而如果想在内存中更大范围跳转指令.需要使用jump

jump指令.使用源操作数的内容作为要跳转的地址,如下.表示要跳转到 寄存器R2的内容的地址上

trap指令和jump指令相似.都是改变pc计数器内容.跳转到新的指令执行地址.但是jump是在本程序中跳转.而trap则是直线操作系统控件内部,也就是跳转到操作系统的某个指令地址.这就是相当于开启调用系统服务api了.执行完成后.pc计数器会还原为原来本程序中trap指令的下一个地址,既接着执行本程序的逻辑.

回顾一下上文的lc-3结构.下边进行介绍

图中最粗最黑的先.lc-3的全局总线有16位,表示不同结构之间每次传递最多16位信息.同一时刻,总线只允许一个数据发送方发送数据.

访问内存的步骤是.先将要访问内存的地址装入MAR寄存器,然后在看是读指令还是写指令.如果是load,会发送RD信号,把内存中数据送入MDR寄存器, 如果是store,则数据会放入MDR寄存器中,然后发送WE信号,使MDR寄存器中的数据保存至MAR寄存器指定的地址中. (感觉这里是硬件的执行逻辑了.是器材之间电路的联通)

ALU是算数逻辑单元,进行基础的运算. 接受两个输入,一个是寄存器.另一个是寄存器或者是立即数.ALU计算完成会把结果保存在通用寄存器中.同时改变三个条件码寄存器NPZ.

​ pc计数器记录下一条要执行的操作.他会在指令周期的取指令节拍最后进行自增来指向下一条指令的地址.但同时上问介绍的控制指令.也是会改变pc计数器的值.因此有了PCMUX,PCMUX是一个三选一的多路复用器(第三章介绍过,多种输入数据,1个输出数据),PCMUX输入包括PC+1(正常执行)、利用offset计算的PC值(控制指令)、MDR(控制指令)

​ MARMUX是用来在load,store.trap指令执行期间,选择合适的地址输入.他会根据指令的操作码.来从他的几个输入地址中选择合适的地址.我的理解是他处理了各种不同寻址方式产生的结果.

​ IR寄存器保存当前要执行的这个指令.当执行一条指令时,先把它从内存取到内存数据寄存器(MDR)中,然后再传送至IR

​ 具体讲解,直接记录了,本指令开头是0110,对应指令格式如下 ,意思是把 baseR +offset6 地址的数据取出来.保存到DR中 DR =M[BaseR + offset6]

​ 本章主要分解了LC-3计算机的基础结构,分别是内存,寄存器,指令集,寻址模式,条件码..其中寄存器虽然有好几种,但本质都是存取数据的存储元件,只是保存不同的信息.而指令则分为操作指令(用于计算数据),数据搬移指令(用于移动数据)和控制指令(用于控制指令跳转),在加上三个位寄存器NPZ的配合,就实现了一部分逻辑功能,有点程序的感觉了.

​ 接着是指令执行的一个周期中的6个节拍.每个节拍需要一到多个始终周期.而计算书就是根据时钟周期的信号频率还不断的运行.不同的节拍做什么,直接理解记住就好.这就是规则.

​ 至于指令,其实操作码是主要的.反复就这集中,有的操作码还根据寻址模式不同,又多了几个变化,其实也是很好理解的

​ 寻址模式是为了在不同程度上,在寄存器中的不同位置得到数据,这个也直接记录就可以.没难度

​ 对于寄存器.概括就是 MAR记录内存的地址 MDR保存内存的值. PC指向下一个指令地址 IR保存要执行的指令

ZNP记录对寄存器数据变化的结果,用来做逻辑判断.

汇编语言是对机器指令的另一种表示方法.机器并不理解汇编语言.汇编语言最后也要翻译成机器指令.而汇编语言和机器指令的格式有点类似.每条汇编语言通常会对应一个机器指令.汇编语言需要经过汇编器汇编变成机器语言.

LABEL OPCODE OPERANDS ; COMMENTS

​ 这个和之前的机器指令是一样的. 操作码决定做什么.操作数决定对谁做.这里同样存在不同的寻址模式.

​ ru ADD R1 ,R3,#-1 把R3和 -1相加.结果在保存在R1中,这是立即数寻址方式

​ 指向内存单元的一个符号名.可以直接在内存中使用.用来做跳转或者做load/store用,其实是一种地址的简单表示方式如下 brp又跳转到了again标号的地方

​ 注释用 ; 隔开,计算机不会别识别.是提供给人看的.

​ 伪操作并不会执行,是程序员传递给汇编器的信息.用来指导汇编器的汇编操作.汇编器看到这些信息,会把他们丢弃.

​ 告诉汇编器将lc-3程序放在内存的什么位置上.如 .ORIG x3050 表示

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com