我是靠谱客的博主 可耐书包,最近开发中收集的这篇文章主要介绍计算机组成原理学习笔记(第二部分 I/O设备和运算)随看随记输入输出系统计算机的运算方法(主要讲解ALU),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
学习视频
随看随记
- 1000,0000 是-128的补码
- 数的左移表示增加,右移表示减小
输入输出系统
概述
输入输出系统的发展概况
- 早期I/O设备不多,采用分散连接,CPU和I/O设备串行工作使用程序查询方式
- 接口模块和DMA(直接存储器访问)阶段,采用总线连接。CPU和I/O设备并行工作,包括中断方式和DMA方式
- 具有通道结构的阶段
- 具有I/O处理机的阶段
- 随着I/O的发展,I/O的独立性越来越强,越来越多的将数据直接通过I/O进行执行,而不经过CPU。
输入输出系统的组成
- I/O软件
- I/O指令:是CPU指令中的一部分,程序员其编写好,共I/O进行调用
操作码是I/O指令的标志,命令码CPU的普通指令的操作,设备码,指明指定的设备地址,通道地址, 寄存器地址。 - 通道指令:通道自身的指令。指出数组的首地址、传送字数、操作命令。
- I/O硬件,
普通方式:包括I/O设备,I/O接口。I/O设备通过I/O接口连接到总线上
通道方式:包括I/O设备,设备控制器,通道。I/O设备连接到设备控制器上再连接到通道上。
I/O设备与主机的联系方式
- I/O设备与主机的联系方式
- 统一编址,将I/O看成存储器中的一部分,使用和存储器一样的取数、存数指令就可以。
- 不统一编址,有专门的IO指令
- 设备选址通过用设备选择电路识别是否被选中。将CPU给出的地址和I/O的地址进行比较,地址对上了就是I/O,否则就是存储器。
- 传送方式:串行,并行。
- 联络方式
- 立即响应
- 异步工作采用应答信号
并行(CPU和接口之间都是并行传输的,因此这里的并行的意思是I/O接口和I/O设备之间采用异步)。I/O接口和I/O设备之间连接并行的数据线。并且采用应答的方式进行数据传输。当I/O接口准备好时,向I/O设备发出Ready信号。I/O设备信号采集好了向I/O接口发送应答信息。
串行:起始位,数据位,终止位
- 同步工作采用同步时标。上一部分有讲类似的,在某个时钟信号下上升沿、下降沿等标志进行联络。
- I/O设备与主机的连接方式
- 辐射式连接(前文的分散式连接,一个主机和很多的外设直接通过控制线路和信号线相连,不利于增删设备)
- 总线连接,利于增删设备。
I/O设备与主机信息传送的控制方式
程序查询方式(CPU和I/O串行工作)
- 整个流程中I/O将数据传输给CPU,CPU将数据传输给内存。在程序查询方式下I/O是不能直接和内存进行数据交流的,必须经过CPU。
- CPU的查询速度较快,但是I/O的速度较慢,因此I/O会将数据放到缓存中以后再向CPU通知I/O准备好。在I/O没准备好时CPU进入踏步状态,时间被浪费。
中断查询方式(CPU和I/O 部分并行工作)
- 当I/O进行自身准备时,CPU运行当前指令。当需要I/O交换信息时,CPU暂停当前程序,与I/O数据交互
- CPU会按流程正常执行程序,当I/O指明需要进行数据传输时,CPU启动中断系统,进行现场保护,执行I/O部分的数据传输工作。在传输结束后,CPU恢复原有现场,继续刚才被中断的程序。(和递归中的函数保护等操作相似)
- CPU需要进行现场保护和现场恢复工作,会消耗额外的资源。
DMA方式CPU和I/O并行工作)
- DMA(Direct Memory Access,直接存储器访问)
- 这种方式最大的优点是I/O和存储器之间交流不需要经过CPU,节省了CPU的资源。
- 流程:CPU按序执行程序,当I/O准备好时,DMA申请总线占用,占用一个或几个存取周期(周期挪用),通过DMA通道将I/O和存储器之间进行数据交互。时间结束后,总线归还给CPU,CPU继续执行程序。
- 当I/O需要传输时,虽然不经过CPU了,但是需要和CPU抢占总线,CPU要把总线让出来给他们用。
- 虽然流程中没有DMA抢占了几个存取周期,目前CPU中存有部分预存数据,可以在总线被占用时依靠预存的数据、指令等进行运算,并没有浪费CPU的时间。
三种方式的CPU工作效率比较(I/O的自治能力越来越强)
- 程序查询方式需要在I/O准备时,就等待I/O的操作,I/O执行完毕才执行原有程序,浪费很大。
- 程序中断方式在I/O准备时,不需要等待I/O的操作,当准备结束时,CPU进行中断操作,等待I/O执行中断操作。之后CPU执行现行程序。CPU的浪费体现在I/O传输和启动中断操作等,浪费减小。
- DMA方式在I/O准备时,不需要等待I/O的操作,I/O准备结束后,请求一定的存取周期。时间结束后,继续执行原有的程序。CPU在被占的存取周期中也会根据预存的数据和指令进行运作,浪费很小。
外部设备
概述
- 外部设备大致分三类
- 人机交互设备键盘、鼠标、打印机、显示器
- 计算机信息存储设备 磁盘、光盘、磁带
- 机一机通信设备 调制解调器等
输入设备
- 键盘:使用者按下按键,计算机判断那个按键按下,然后将这个按键翻译成
按键ASCII码,将这个码传输给CPU等,实现键盘的使用。键盘读入时是通过中断读入的方式,可以方便再次启动计数器。 - 鼠标
- 机械式金属球电位器
- 光电式.光电转换器
- 触摸屏
输出设备
- 显示器
- 字符显示 字符发生器.
- 图形显示 主观图像(程序主动画图)
- 图像显示 客观图像(目前主流的显示器的显示方式)
- 打印机
- 击打式 点阵式(逐字、逐行)
- 非击打式. 激光(逐页)
其他
- A/D、D/A模拟数字(数字/模拟)转换器
2.终端. 由键盘和显示器组成完成显示控制与存储、键盘管理及通信控制
3.汉字处理汉字输入、汉字存储、汉字输出
多媒体技术
I/O接口
概述
- 接口要具备的功能
- 实现设备的选择(设备选择线)
- 实现数据缓冲达到速度匹配(数据线)
- 实现数据串一并格式转换.(数据线)
- 实现电平转换(数据线)
- 传送控制命令(命令线)
- 反映设备的状态(“忙”、“就绪”“,中断请求”)(状态线)
接口的功能和组成
总线连接方式的I/O接口电路
1. 设备选择线:选择哪个I/O设备,哪个设备的哪个端口。是单向线(如图),CPU通过设备选择线,选择哪个设备,单方向向设备传输。
2. 数据线: I/O和CPU之间进行数据交流,是双向线。(有的数据线具有串并转换等功能。)
3. 命令线:CPU将自己的控制命令传输给I/O设备,(是单向线),CPU->I/O。功能包括命令缓冲和译码,以及控制I/O设备。
4. 状态线:I/O设备将自己的状态反馈给CPU,(是单向线),I/O->CPU。包括设备的状态,如准备就绪,忙,出错等。
接口的功能和组成
组成 | 功能 |
---|---|
设备选择电路 | 选址功能 |
命令寄存器、命令译码器 | 传送命令的功能 |
数据缓冲寄存器 | 传送数据的功能 |
设备状态标记 | 反映设备状态的功能 |
- 设备状态相关的触发器包括:完成触发器D(I/O设备工作是否准备好数据)、工作触发器B(I/O是否在工作)、中断请求触发器INTR(当出现I/O需求时,申请中断)、屏蔽触发器MASK(如果I/O优先级低于CPU正在执行的程序的话,则屏蔽该I/O设备的I/O操作。)
I/O接口的基本组成
接口类型
- 按数据传送方式分类:并行接口、串行接口
- 按功能选择的灵活性分类:可编程接口、不可编程接口
- 按通用性分类:通用接口、专用接口
- 按数据传送的控制方式分类:中断接口、DMA接口
程序查询方式
查询流程
- 单个设备
- 检查状态标记使用测试指令,询问是否准备就绪使用转移指令,交换数据使用传送指令
- 多个设备
- 根据不同I/O设备的优先级顺序,检查不同I/O设备是否准备就绪,如果没有准备就绪,就询问下一个,如果准备好了,就处理这个设备。
程序流程
- 首先CPU设置计数器,用于计数数据存储。设置好主存缓冲区的首地址,启动外设。询问外设,是否已经准备好,没有准备好就一直查询,准备好了就和I/O进行数据传输,直到数据传输完成,关闭I/O传输。
- 以输入为例
- 地址线选择想要交互的I/O设备,通过设备选择电路给出该设备的命令,同时 CPU也给出启动命令。
- (第一个图)在开始I/O没有准备好,并要准备数据,因此D置为0(未准备好),B置为1(处于忙碌状态),启动I/O。同时I/O设备将数据存入缓冲区。
- ( 第二个图) I/O设备存储好后, D置为1(准备好),B置为0(处于空闲状态),同时将缓冲器中的数据传输到CPU中。
程序中断方式
中断的概念
- 前文已经介绍了,这里就简要介绍一下,CPU正常执行程序,当有中断请求时,CPU保护现场,执行中断服务。服务结束后,恢复到正常情况,继续执行新的程序。
I/O中断的产生
- CPU与打印机部分并行工作。仅在数据传输的时候抢用CPU其余时候并行工作。
程序中断方式的接口电路
- 中断方式接口电路中要包含以下四个器件
- 配置中断请求触发器和中断屏蔽触发器:
INTR为中断请求触发器,I/O设备通过INTR向CPU申请中断请求
MASK为中断屏蔽触发器,当CPU中执行的程序优先级较高时,触发该触发器,屏蔽相应的I/O设备。
- 排队器
- 排队器分为硬件和软件两种,硬件直接安装在CPU内部或在接口电路中(链式排队器),软件排队器在第八章(根据优先级制作一个表。)
- 图中的中断优先级是1、2、3、4依次降序。(INTP时排队器的输出线,INTR是排队器的输入线)
- 在都没有请求中断时,竖着的线(INTP)都是1,INTR非都是1,进行与非后,输出0。0执行非操作后为1,竖着的线(INTP)为1。当有一个有中断请求时,(INTR)非是0,进行与非后,输出1,1执行非操作后为0,后面的INTP`为0,没有申请中断的权利。
- 当INTR2请求中断时,紫色表示0,黄色表示1
- 在INTP输出后还要和INTR进行与非,当输出1时,才表示进行中断请求,图中的INTR1虽然INTP`是1,但是INTR1是0,因此是可以向上申请中断,但是没有向上,但是没有中断服务需要申请。
- 中断向量地址形成部件
- 中断向量:中断向量是指早期的微机系统中将由硬件产生的中断入口地址或存放中断服务程序的首地址。我的理解是主存中存储的中断服务程序的地址。
- 中断向量地址有两种方法产生:软件产生(第八章)、硬件向量法(由硬件产生向量地址,再由向量地址找到入口地址)
- 中断向量地址形成部件也叫设备编码器,它的作用是将排队器的输出,也就是成功申请到中断的I/O,找到其再主存中的服务地址(向量地址)。
- 程序中断方式接口电路的基本组成
- 流程:在上面增加了INTR中断请求触发器,和MASK中断屏蔽触发器。
- 在开始I/O没有准备好,并要准备数据,因此D置为0(未准备好),B置为1(处于忙碌状态),启动I/O。同时I/O设备将数据存入缓冲区。
- (I/O设备存储好后, D置为1(准备好),B置为0(处于空闲状态),向INTR请求中断。这INTR和MASK的输出成为排队器的输入,排队器处理以后,将请求到的设备输出给设备编码器,设备编码器输出中断向量地址,CPU执行该终端向量地址的中断服务。
I/O中断处理过程
- CPU响应中断的条件,CPU的EINT触发器只有为1时,才能执行中断操作。
- CPU允许中断触发器EINT= 1
- CPU用开中断指令将EINT置“1”
- CPU用关中断指令将EINT置“0”或硬件自动复位
- CPU响应中断的时间
- 当D=1 (随机)且MASK= 0时,D是数据是否准备完毕的触发器。
- 在每条指令执行阶段的结束前,CPU向已经申请中断的设备发中断查询信号(将INTR置1)
- I/O中断处理过程
- 第一张图,当CPU正常执行程序时,会执行到某个I/O设备申请请求中断的程序,CPU通过地址线,通过设备选择电路,找到指定的I/O设。同时I/O准备数据,将D置为0,B置为1。同时启动设备。
- 第二张图,设备启动好了以后,D置为1,B置为0。当没有被高优先级屏蔽时,INTR输入为1.当CPU的中断查询给出信号为1时,INTR向CPU请求中断服务,同时,排队器输出应当相应输出的I/O设备,输出给设备编码器,然后输出中断向量地址给CPU。执行中断程序。
- 第一张图,当CPU正常执行程序时,会执行到某个I/O设备申请请求中断的程序,CPU通过地址线,通过设备选择电路,找到指定的I/O设。同时I/O准备数据,将D置为0,B置为1。同时启动设备。
中断服务程序流程
- 保护现场(包括两个部分)
程序断点的保护,通过中断隐指令完成
寄存器内容的保护,通过将寄存器内容存储到栈中 - 中断服务 对不同的I/O设备具有不同内容的设备服务
- 恢复现场 将栈中的寄存器的内容,出栈返回到寄存器中
- 中断返回 中断返回指令
单重中断和多重中断
- 单重中断:不允许中断现行的中断服务程序
- 多重中断:允许级别更高的中断源中断现行的中断服务程序
- 中断周期中硬件进行的操作被称为中断隐指令
- 单重中断和多重中断区别在于开中断的时间,单重中断在中断服务快结束时才CPU开中断服务,多重中断是在保护现场以后CPU就开启中断。
DMA方式
DMA方式的特点
- 程序中断是由一部分的时间CPU和I/O准备数据的时候是并行的,在I/O进行数据传输的时候其实是串行的。
- 但是DMA和主存之间是有一个独立通道的,没有真正意义上的占用CPU
- DMA的工作方式
- 停止CPU访问主存
当DMA请求申请数据传输时,CPU就停止了对主存的占用,不过DMA是处于数据准备状态还是数据传输状态,DMA都不会放弃主存。同时CPU处于不工作状态或处于保持状态,这样不能充分发挥CPU对主存的利用率。
- 周期挪用(周期窃取,周期指的是访存周期)
当DMA准备好时,向主存申请几个访存周期。访存周期结束,总线归还给CPU,并进行下一次的数据准备。
DMA访问主存有三种可能
●CPU此时不访存,总线的使用权交给DMA
●CPU正在访存,总线的使用权仍然交给CPU
●CPU与DMA同时请求访存。此时CPU将总线控制权让给DMA。一般DMA所连接的设备速度比较快,当DMA访存完毕后,CPU会快速夺回总线,继续执行程序,当DMA准备好时,窃取一部分访存周期执行DMA。 - DMA和CPU交替访问,在一个工作周期中一部分专供DMA访存,一部分专攻CPU访存,这种方式不需要建立和归还总线的使用权,由时序来直接确定总线的使用权。
- 停止CPU访问主存
DMA接口的功能和组成
- DMA接口功能
- 向CPU申请DMA传送
- 处理总线控制权的转交
- 管理系统总线、控制数据传送
- 确定数据传送的首地址和长度 修正传送过程中的数据地址和长度
- DMA传送结束时,给出操作完成信号
- DMA接口的组成(根据DMA的功能探究组成)
- AR(Address Register)地址寄存器,存储这次数据传输相关内存中的那个地址。
- WC(Word Counter) 字数计数器,根据I/O自己想要存取的数据数,赋值为-N,没传送完一个字,就+1,当溢出时,表明数据传输完毕。
- DAR(Device Address Register) 设备地址寄存器,保存设备中的一些设备信息,例如磁道号等等。
- BR数据缓冲器,对I/O中传输的数据进行缓冲。
- DMA控制逻辑 控制设备和总线进行交流的控制器。DREQ(设备请求),DACK(DMA应答),HRQ (总线请求信号),HLDA(总线应答信号)
- 中断机构,当WC溢出时,将信号传递给中断机构,表示数据传输完成,终端机构将中断请求给CPU,完成数据传输后的处理。
DMA的工作过程
DMA传送过程
- 包括预处理、数据传送、后处理三个部分。
- 预处理
- 通过几条输入输出指令预置如下信息
- 通知DMA控制逻辑传送方向( 入/出)
- 设备地址一DMA的DAR
- 主存地址一DMA的AR
- 传送字数一DMA的WC
- 数据传送过程示意
- 预处理:加载以上信息,并启动设备
- 数据传送:继续执行主程序,同时完成一批数据的传输
- 后处理:执行中断服务,做DMA结束处理
- CPU继续执行程序
- 数据传输(输入)
- 外部设备将数据存储在BR数据缓冲器中。
- 设备向DMA控制器发出请求控制信号
- DMA控制器向总线发出请求控制信号
- 总线向DMA控制器恢复允许控制信号
- 总线将主存中要存储的地址储存在AR中
- DMA控制器向设备发出允许控制信号
- DMA将BR中的数据向主存传输。
- 当数据传输完毕时,WC溢出,溢出信号发给中断机构
- 中断机构向CPU请求中断
- CPU进行后处理
- 数据传输(输出)
- BR数据缓冲器的数据被外部设备数据取走
- 设备向DMA控制器发出请求控制信号
- DMA控制器向总线发出请求控制信号
- 总线向DMA控制器恢复允许控制信号
- 总线将主存中要传送的地址储存在AR中
- DMA控制器向设备发出允许控制信号
- DMA将主存中的数据向BR传输。
- 当数据传输完毕时,WC溢出,溢出信号发给中断机构
- 中断机构向CPU请求中断
- CPU进行后处理
- 后处理,进行的操作包括
- 校验送入主存的数是否正确
- 是否继续用DMA
- 测试传送过程是否正确,错则转诊断程序
- 由中断服务程序完成
DMA接口和系统的连接方式
- 和之前的总线控制逻辑类似
- DMA的接口是通过总线进行连接的,DMA的优先级和连接到CPU总线的顺序有关。
- 每个DMA都有自己的请求相应信号,通过独立的DMA的信号来对CPU进行抢夺控制权。
DMA和中断方式进行比较
中断方式 | DMA方式 | |
---|---|---|
数据传送 | 程序 | 硬件 |
响应时间 | 指令执行结束 | 存取周期结束 |
异常处理情况 | 能 | 不能 |
中断请求 | 传送数据 | 后处理 |
优先级 | 低 | 高 |
DMA接口的类型
- 选择型:在物理上连接多个设备,但是在逻辑连接上仅连接一个设备。
- 多路型:在物理上连接多个设备,在逻辑连接上连接多个设备。
让们之间是通过通道进行分离的。在开始时,CPU向通道发出预存的信息,包括内存地址信息,设备地址信息,数据字数等。不同的通道,他们中包含的预存信息是不同的。不同的通道信息之间时串行的。
- 当DMA开始工作时,说明BR数据缓冲器中已经准备好了,因此仅进行数据传输服务仅需要5μs。
- 当仅有以一个DMA请求时(打印机请求DMA),打印机提供服务,5μ秒以后完成服务。当两个DMA同时请求时(磁盘和磁带)哪个更快就先执行哪个(这里磁盘快),因此线执行磁盘,再执行磁带的DMA。
计算机的运算方法(主要讲解ALU)
- 数据表示:能够被计算机硬件直接识别和处理的数据
无符号数和有符号数
无符号数(无正负号的数)
- 无符号数的范围和寄存器的位数有关,反映无符号数的表示范围
有符号数
机器数和真值
- 机器数是指计算机能够识别并操作的数字。
- 真值指的是在现实世界中想要使用的数字。
- 这里先不探究小数点的位置等问题,因为这里小数的绝对值的取值范围在0到1之间,大于1的小数在后面浮点数等位置会主要进行讲解。
- 小数点没有特定的表示方法,其都是根据与计算机的约定出现的。
- 根据小数点,因此分为小数定点机和整数定点机两种
原码表示法
- 注意:计算原码公式中的个2^n-x 其中x是小于0的,相当于加上其绝对值。
- 最后的结果更像带有符号的绝对值表示,+用0表示,- 用1表示。
- 对于整数来说,符号位和数值位之间用",“分隔开,这个”,"是人为添加的,用于帮助人分辨的,机器中并没有这个标识。
- 这里小数的绝对值的取值范围在0到1之间
- 小数存储时和计算机中的数值长度有关 下图中的就分别时4位和8位
- 其和整数差不多,都是0表示正数,1表示负数,数值部分直接存到计算机的寄存器中。
- 真值为0的原码有4种表示方法,正负小数表示法和正负整数表示法。
- 原码的符号是辅助数字存储的,并不会帮助数字进行运算,数字的运算会很麻烦。
补码表示法
- 补码的核心在于取模,对于时钟来讲,12就是模数。一个数的补数就是这个数的模数。
- 小数的是以2为模数的。2^(0+1)=2
- 正数的模数仍为正数,一个补数有两个对应真值,一个是正数一个是负数。为了区分其真值的正负,因此使用2^(n+1)作为模数,n表示存储器中的数值位。7个数据位是有7个0,第8位为1。
- 2^(n+1) + x 结果是x的补码,x是正数其实也可以相加,只不过加了以后,高位溢出和没加是一样的,就感觉像是正数的补码是其本身。这里的x要带符号,计算时使用的数值是不带符号位的。
- 对于补码来说,运算都是不带符号位的,结果会有一位用来表示符号位。
- 小数和整数之间很相似,小数取模的时候模数至少为2,当模数大于2时,就会有更多位充当符号位,当模数为4时,就2位符号位。当模数为8时,3位符号位。
- 补码可以通过真值的数值部分取反加一获得,下个图有点类似证明的意思。2^5 = 11111 + 1。11111在进行减法操作时和按位取反一样的,如果是0就结果1,如果是1,就结果0。最后再加一。
- 小数求补码也一样,要注意置使用数值位置,符号位后面再加。
反码表示法
- 2^(n+1) - 1 表示 取模以后减1。取模以后为补码,补码-1为反码。
- 2-2^(-n) + x 。 2 ^(-n)表示末尾的1,末位+1。
- 三种机器数的小结:
最高位为符号位,书写上用","(整数)或“.”(小数)将数值部分和符号位隔开
➢对于正数,原码=补码=反码
➢对于负数,符号位为1,其数值部分
原码除符号位外每位取反末位加1一>补码
原码除符号位外每位取反一>反码 - y的补码和-y的补码,连同符号按位取反末位+1
移码表示法(表示浮点数据的阶码部分,这部分都是整数)
- 补码很难判断其真值的大小
- 当真值有5位时,用2^5 + 真值。其目的就是将负数变成正数,当有5个数值位时,范围是-32到31,加了2 ^ 5 范围就是0到63。
- 补码进行取反就是移码,符号位正相反。
数的定点表示和浮点表示
数的定点表示
- 整数定点机和小数定点机
- 小数定点机的数值就是整数定点机的2^(-n)倍。
数的浮点表示
- 尾数能显示出浮点数的精度。
- 尾数必须是小数,阶码必须是整数。
- 下图中的格式是2^(阶码)*尾数,假设阶码存储的数值部分位长度为m,尾数存储数值部分位长度为n。
- 尾数的绝对值最大是所有位为1且仅能为小数,为(1-2 ^(-n))。最小为仅有最后一个位为1,为2 ^-(n)
- 阶码的最大是所有位为1且仅能为整,为2^(m)-1。最小为仅有最后一个位为1,为-2 ^(m)-1。
- 最大正数:(1-2^ n) * 2^ (2 ^ m -1)
- 最大负数:-(2^ -n)*2^ (-2^ (m-1))
- 最小正数:(2^ -n)*2^ (-2^ (m-1))
- 最小负数:- (1-2^ n) * 2^ (2 ^ m -1)
- 当数字大于最大正数,或小于最小负数时认为发生了上溢。
- 当数字大于最大负数,或小于最小正数时认为发生了下溢,用0处理。
- 在人工估算数值范围时,(1-2^ n) 约等于1,因此可以近似看作,付段数的取值范围在,- * 2^ (2 ^ m -1) 到2^ (2 ^ m -1)
- 浮点数的规格化
- 浮点数的规格化目的是为了使数字表示得更加精确,同时也会避免在尾数的高位出现很多0,而占用存储空间使得精度下降。
- 浮点数的标准化形式就是把尾数的第一位移动到是1为止。
- 尾数左移,表示尾数增大,因此阶数减小。
- 规格化以后的尾数大于0.5。
- 当阶码或尾数的数值部分全为0,则表示机器零。阶码小于它所表示的最小值是-16,只有符号位是1,数值位是0。因为阶码常用移码来表示,因此当阶码部分或尾数部分全为0时,判定为机器零。
- 短实数(float),长实数(double),临时实数(没遇到过)
定点运算
移位运算
- 移位的意义:这里的移位都是数据移位,小数点不动
- 左移 绝对值扩大 右移 绝对值缩小
- 在计算机中,移位与加减配合,能够实现乘除运算
- 算术移位规则符号位不变
- 对于补码来说:数字的左半部分可原来时相反的,数字的右半部分是相同的。
- 算术移位的硬件实现。
- 算术移位包括两部分:前面的是符号部分,后面的是数值部分。第一个是真值为正,符号位为0。后面的都是负数,符号位为1。
- 以正数移位为例,数值左移时,末尾补0,数值左移时,高位补0。同时符号位就是0,因此符号位直接复制后,补到高位即可。
- 对下图的表说明一下,第二行和第三行都是探究丢1对数值的影响。对于负数的补码来说,高位的1代表真值的0。因此,高位来说丢1对真值没有影响。
- 算术移位和逻辑移位
- 算术移位是区分符号位和数值位的,但是逻辑移位是不区分符号位和数值位的。将符号位当作普通的位置直接进行移位。
- 逻辑移位不区分数值的正负,做的操作仅仅是缺失的位置补0.
- 在算术移位中,移位操作会把最高位移丢,因此会有一个额外的进位位,记录下移丢的最高位。
加减法运算(要把符号位也一同进行运算)
- 补码运算本质上是数值溢出以后,将溢出的部分忽略掉,在数值上的体现就是取模。
- 加减法和正常的二进制加减法是一样的,最主要的是进行运算时要把符号位一同进行运算,而不是像进制转换那样,不管符号位
- 机器码的数值运算与机器所能存储的数值部分长度有关
- 当得出的结果超出了当前数值部分所能表示的范围时,就会发生溢出,导致结果错误。
- 溢出判断:当需要运算的两个数字是异号的时候是不会出现溢出的,因为数值部分是减小的。
单符号判溢方法
- 当数值位的最高进位和原操作数的符号位不同。
- 上图中的练习1为例,0.1001+0.0101 = 1.1100 进位为1 符号为 0 ,符号不同,因此发生了溢出。
- 上图中的练习2为例,1,0011111+1,1010111 = 10,1110110.因为数值位在相加的时候没有进1,因此进位符号为0,符号位为1,符号不相同 发生了溢出
- 在计算的时候会有专门的位置来存储数值进位位。
双符号判溢方法
- 双符号位判溢的时候,小数补码的取模需要大一点,双符号就2^2,n符号就2 ^n.
- 其实和上面说的差不多,以原来的练习1为例00.1001+00.0101 = 01.1100,0和1符号不同因此,溢出。
- 练习2为例11,0011111+11,1010111 = 10,1110110.,0和1符号不同因此,溢出。
- 因此可得,双符号位时,高位符号位表示的是数值的真正符号位,低符号位仅仅作为判溢位。
- A、X均n+1位
- A表示ACC,存储加法器的运算结果。X表示X寄存器。当运算时需要进行减法操作时,Gs置1。通过求补控制逻辑和X将从进来的数进行取反操作。
- GA是加法标志位
- 求补操作是,x所有位按位取反,然后从低位送来的进位,进行加1,这样就得到了X中数值的补码。
乘法运算(只计算数值部分,符号部分单独计算)
乘法运算的逻辑过程
乘法运算的证明
- 每进行一次乘以2^-1 就表示数值右移一位。
- 部分积就是括号里的数值。每做一次部分积以后,都要进行移位处理。
乘法运算的示例
- 乘法运算判定是否结束时根据移位的次数决定的,在这里乘数的数值位有4位,因此,经过四次移位以后,乘法运算结束,得出结果。
- 步骤是根据上个图中的公式进行演化的:假设A为0.1101
- 首先设定初始的部分积为0,乘数为0.1011(B)。根据乘数的最后一位,是1则部分积和被乘数相加。
- 在加操作结束以后,乘数右移一位,左侧空出的一位使用部分积逻辑右移后右侧丢失的位。即0.1101右移后变成0.0110,丢失的1放到了乘数中变成了1101。根据乘数的最后一位,是1则部分积和被乘数相加。
- 在加操作结束以后,乘数右移一位,左侧空出的一位使用部分积逻辑右移后右侧丢失的位。即1.0011右移后变成0.1001,丢失的1放到了乘数中变成了1110。根据乘数的最后一位,是0则部分积和全0相加。(也可以直接进行部分积和乘数再次进行右移操作)
- 在加操作结束以后,乘数右移一位,左侧空出的一位使用部分积逻辑右移后右侧丢失的位。即0.1001右移后变成0.0100,丢失的1放到了乘数中变成了1111。根据乘数的最后一位,是1则部分积和被乘数相加。
- 最后进行加操作,乘数右移一位,左侧空出的一位使用部分积逻辑右移后右侧丢失的位。即1.0001右移后变成0.1000,丢失的1放到了乘数中变成了1111。
- 最后得出结果0.1000 1111.
- 全加器有n+1位即可,因为在乘法操作中,只对高位有全加,不对低位全加。
- 硬件需要三个寄存器,用于存放乘数(X寄存器),部分积(ACC寄存器),存放乘数(MQ寄存器)。其中X寄存器中的数值是不需要变动的,但是ACC寄存器和MQ寄存器中的数值是需要进行移位的。还需要ALU进行全加操作。
- 乘法运算的特点:1. 绝对值运算,符号单独进行判断2. 用移位的次数判断乘法是否结束3 .逻辑移位。
- ACC、X、MQ都是n+1位的。
- 控制门是控制X中的数进行移位的,受移位和加控制部分控制。如果乘数尾数是1,就移位然后送到加法器中进行操作。如果是0则控制门不进行操作,ACC和MQ寄存器直接进行逻辑移位和填补。
- GM是乘法标志位,表示要进行乘法操作。计数器要计数移位的次数。
除法运算(运算不携带符号)
笔算除法和机器除法
- 比较余数和除数的大小,余数大则上1,除数大则上0。
- 为了避免余数寄存器的位数过多,选择不对余数补零,而是对余数进行逻辑左移。
- 上商的位置在寄存器的最末位上。
原码除法的一些规则
- x和y表示x和y数的绝对值,不携带符号。
- 首先要保证小数定点机中的结果也一定是小数,否则就会导致小数定点机中的数溢出,同理整数定点机中的结果也一定是整数,否则就会导致整数定点机中的数溢出。
- 因此对于小数定点来讲,x*<y*,对于整数定点来讲,x*>y*。同时被除数不等于0,除数不能为0。
恢复余数法(操作数值部分,对符号部分不处理)
- 首先这里进行加减操作是操作的数值部分,因为是数值部分,所以都是正数,在这里对y*进行加减操作时,是使用补码进行操作的。
- 大致的思路就是,使用被除数和余数减去y*,如果不能减则上商为0,同时恢复余数。然后进行逻辑左移,继续尝试和y*的大小,如果能减则上商为1,并执行减操作,如果不能减则上商为0,恢复余数,执行减操作。
- 恢复余数法一共进行了5次上商,其中第一次的上商是为了判定是否溢出。对于小数定点计算的话,如果第一次上商为1,则表示已经溢出。对于整数定点计算的话,如果第一次上商为0,则表示已经溢出。
- 对于商来说只保留后四位就可以了,因为第一次为判溢,不纳入数值中。恢复余数法也通过逻辑左移四次来判定自己的除法运算是否完成。
不恢复余数法(加减交替法)
- Ri表示余数减去y的数字,当大于0时,表示余数更大,则商上1,如果小于0,则表示数不够,则商上0,恢复原数,Ri+y,在求下一个余数(Ri)时,乘以2,再减y*,就是2Ri+y*。就是从上一个余数Ri去求得下一个余数为2Ri+y*。
- 执行逻辑:
- 第一次使用被除数减去y*(加上[-y*]补 = 1.0011),得到R1(1.1110),对于小数除法运算来说,R1一定时<0的,同时商上0(0)。
- 将R1逻辑左移(1.1100),因为上商为0,所以R1逻辑左移后+y*(0.1101),得到R2(0.1001)。R2>0,商上为1(01)。
- 将R2逻辑左移(1.0010),因为上商为1,所以R2逻辑左移后-y*(1.0011),得到R3(0.0101)。R3>0,商上为1(011)。
- 将R3逻辑左移(0.1010),因为上商为1,所以R3逻辑左移后-y*(1.0011),得到R4(1.1101)。R4<0,商上为0(0110)。
- 将R4逻辑左移(1.1010),因为上商为0,所以R1逻辑左移后+y*(0.1101),得到R5(0.0111)。R5>0,商上为1(01101)。
- 最终得到商为0.1101,余数为0.0111。
- 特点:
- 上商n+1次,第一次上商判溢出,不具备数值意义
- 逻辑左移n次,加法操作n+1次(多了第一次用来判定是不是溢出),用移位的次数判断除法是否结束。
- 硬件存储,ACC用来存放被除数和余数,MQ用来存放商。X用来存放除数。
- 通过对MQ中的末尾的值进行上商后,来判断是及您修改加操作还是进行减操作。同时将ACC和MQ寄存器中的值都进行左移。是加y还是减y通过控制控制门,对x进行操作可得。计数器C中记录了进行移位的次数,用来判定除法操作是否完成。
- GD是出发操作标志位,S符号位,V是判断否发生溢出。
浮点四则运算(加减法运算)
对阶
- 浮点数的运算需要对准阶数,为了尽量保证数据的准确性,因此尽量将小阶码向大阶码看齐。
- 小阶码向大阶码看齐,使得尾数的数值部分缩小,虽然会丢失一些精度。如果大阶码向小阶码看齐,则会使得数值部分扩大,导致数据出错。
规格化
- 规格化:最原始的规格化数的定义是数值部分的绝对值大于1/2。但是后面不会完全遵守这个规格化数的定义,对于规格化数主要根据下面的规则进行判别。(详见特例)
- 原码的尾数数值部分第一数位为1,不分正负。
- 补码的符号位和第一数位的符号正相反。
运算结果的左规和右规
- 左规的目的上是为了将不符合规格化的浮点数通过左移的方式转化成规格化数。
- 右规的目的是当运算出现了进位(尾数运算后溢出)时,右规将数字右移成正常表示的数字。
- 右规溢出有两种情况,两个正数相加溢出和两个负数相减溢出。即01开头和10开头。在双符号位的情况下,最高符号位表示的才是结果的真正的符号位。
示例1
- 步骤:
- 对阶:首先写出x和y的相对应的浮点数表示。根据阶码的大小,将小阶码的数向大阶码的数进行对阶。
- 尾数求和。
- 结果左规或右规:+如果求和结果不符合规范或有溢出现象,则进行左规或右规
舍入
- 在对阶和右规过程中,可能出现尾数末位引起误差,需考虑舍入
- 0舍1入法
- 恒置“1”法
示例2
溢出判断
- 这里的溢出不是规格化情况下出现的溢出,而是在所有操作结束以后,得出的结果否溢出。
- 下图给出了规格化以后的浮点数的数轴
- 当发生下溢时,输出结果为0。当发生上溢时,会报告计算结果出错。
- 这个图上面已经说了,其实差不多。主要是补码的-1/2不是规格化数吗因为第一数位和符号位同号了,因此最大负数时(2^ -1)+(2 ^-n)。
算术逻辑单元 (ALU)(听的一头雾水,这个部分以逻辑的和硬件实现为主,后面有需要再补吧,这里就写点浅显的东西)
- 算逻运算单元的运算速度的限制是进位,进位的速度越快,ALU的速度越快。
- ALU和控制器组成CPU
并行加法器
- Si表示运算结果(和),在只有1个1或三个1的情况下,输出为1
- Ci表示向高位的进位,在只有2个1或三个1的情况下,输出为1,向前进位。
- Ai和Bi是保存到寄存器当中,不受进位©的限制。
串行进位链
- 所有的进位结果串联起来,以与非门的延迟为ty为例的话,需要8ty的时间处理加法运算。
- 串行进位链计算进位需要消耗的时间较长。
并行进位链
- 主要思想是将上图中的个C0,C1,C2,C3都用C-1来表示,则进位仅仅和C-1有关,而不需要等待上一级的进位。
- 并行进位链虽然速度增快了,但是电路设计较为复杂。
单重分组跳跃进位链
- 以上两种进行综合利用,当n为全加器是分成4组,每个小组内是并行进位链运算,小组间使用串行进位链。在一定程度上减小了电路设计复杂度。
双重分组跳跃进位链
- 将一个大全加器分成若干大组,每个大组分成若干小组
- 在仅分析小组的情况下
- 根据图中的公式C3、C7、C11、C15只和最开始的进位有关。
- 每个小组中的其他进位可以根据上一个小组的进位进行计算。
- 下一个大组仅仅把C15向下传递就可以了,当作下一个大组的初始进位。
- 具体流程看最后一张图
最后
以上就是可耐书包为你收集整理的计算机组成原理学习笔记(第二部分 I/O设备和运算)随看随记输入输出系统计算机的运算方法(主要讲解ALU)的全部内容,希望文章能够帮你解决计算机组成原理学习笔记(第二部分 I/O设备和运算)随看随记输入输出系统计算机的运算方法(主要讲解ALU)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复