「计算机组成原理」数据的表示和运算(二)

news2024/11/23 20:02:19

文章目录

  • 五、奇偶校验码
  • 六、算术逻辑单元ALU
    • 6.1 电路的基本原理
    • 6.2 加法器的设计
      • 6.2.1 一位全加器
      • 6.2.2 串行加法器
      • 6.2.3 串行进位的并行加法器
      • 6.2.4 并行进位的并行加法器
  • 七、补码加减运算器
  • 八、标志位的生成
  • 九、定点数的移位运算
    • 9.1 算数移位
    • 9.2 逻辑移位
    • 9.3 循环移位

五、奇偶校验码

信息在传递的过程中可能会因为噪声的干扰而发生比特位的跳变,为了检查数据传输过程中是否发生了错误,我们会使用一系列的校验码来检查收到的信息。奇偶校验码就是一种简单的手段。假设要传输的信息7bit,我们在最高位添加上1bit的校验位奇校验要求再添加过校验位之后,整个8bit信息中字符“1”的个数是奇数;偶校验则要求该数值为偶数。
对于偶校验,计算机想要得到校验位只需要将原本的所有信息位做异或即可。同样,若要检查收到的信息是否出错,只需要将接收到的8bit的信息做异或,结果为“1”则出错,但是结果为“0”并不代表没有错误,这是因为如果有偶数个bit发生跳变,异或的结果是不变的。因此奇偶校验码无法检测出偶数位错误。

六、算术逻辑单元ALU

ALU是运算器的核心部件,它的主要功能是做一些算术运算和逻辑运算。我们可以通过最基本的逻辑门电路,组合出自己需要的电路来实现不同的运算。
ALU

6.1 电路的基本原理

我们所说的比特0或1是通过给电子元器件加电压来实现的,低电压为0,高电压为1.最基本的三种基本的逻辑运算为逻辑与、逻辑或、逻辑非,将他们的门电路组合起来就可以得到我们想要的不同逻辑运算。其中逻辑异或加法、偶校验有着天然的对应关系。

6.2 加法器的设计

6.2.1 一位全加器

假设A、B分别表示要相加的两个二进制数, A i 、 B i A_{i}、B_{i} AiBi表示A和B的第i位, S i S_{i} Si表示第i位和。如果我们简单的认为 S i = A i + B i S_{i}=A_{i}+B_{i} Si=Ai+Bi,这是有问题的,因为低位向本位的进位也是必须要考虑的一个因素,我们将它记为 C i − 1 C_{i-1} Ci1,那么第i位和的正确表达是应该是 S i = A i + B i + C i − 1 S_{i}=A_{i}+B_{i}+C_{i-1} Si=Ai+Bi+Ci1。我们来统计一下这个表达式的可能取值:

A i A_{i} Ai B i B_{i} Bi C i − 1 C_{i-1} Ci1 S i S_{i} Si C i C_{i} Ci
00000
00110
01010
01101
10010
10101
11001
11111

可以看出,第i位和 S i S_{i} Si只有在 A i 、 B i 和 C i − 1 A_{i}、B_{i}和C_{i-1} AiBiCi1三者中有奇数个“1” 时为“1”,否则为“0”.这个逻辑很“异或”
第i为向高位产生的进位 C i C_{i} Ci在两种情况下为“1”:1. A i 、 B i A_{i}、B_{i} AiBi都为“1”时。2. A i 、 B i A_{i}、B_{i} AiBi有一个为“1”并且 C i − 1 C_{i-1} Ci1为“1”时。
于是便可以写出 S i S_{i} Si C i C_{i} Ci的逻辑表达式:
S i = A i ⊕ B i ⊕ C i − 1 S_{i}=A_{i}\oplus B_{i}\oplus C_{i-1} Si=AiBiCi1
C i = A i B i + ( A i ⊕ B i ) C i − 1 C_{i}=A_{i}B_{i}+(A_{i}\oplus B_{i})C_{i-1} Ci=AiBi+(AiBi)Ci1
有了逻辑表达式也就有了电路,接下来只需要按照逻辑表达式将对应的门电路连接好就可以得到一位全加器。
一位全加器

6.2.2 串行加法器

串行加法器的实现方式是在一个全加器的基础上添加一个进位触发器,用来保存第i位产生的进位。将 S i S_{i} Si作为该触发器的输入端, C i − 1 C_{i-1} Ci1作为该触发器的输出端,这就使得想要计算两个数的和必须要逐位计算。若计算nbit的数相加,就需要分n次计算,计算的结果也需要串行地、逐位地存入寄存器。
在这里插入图片描述

6.2.3 串行进位的并行加法器

串行进位的并行加法器就是将n个全加器串接起来,这样就可以直接进行两个nbit的数相加。这种加法器的缺点也比较明显:高位需要等待低位来的进位才能够计算,因此效率并不高。
在这里插入图片描述

6.2.4 并行进位的并行加法器

由于串行进位的并行加法器效率不高的主要原因是来自低位的进位需要等待低位的计算,因此想要提高计算速度,可以从该处入手。
根据之前计算过的逻辑表达式 C i = A i B i + ( A i ⊕ B i ) C i − 1 C_{i}=A_{i}B_{i}+(A_{i}\oplus B_{i})C_{i-1} Ci=AiBi+(AiBi)Ci1不难看出,该表达式可以递归,只需要将 C i − 1 C_{i-1} Ci1继续向下逐层展开代入,最终会展开到关于A、B的每一位和 C 0 C_{0} C0表达式,而这些信息都是一开始就知道的,这也就意味着我们需要的进位信息可以直接得到,不需要等待低位的计算,这样就大大地提高了计算效率。
在这里插入图片描述

七、补码加减运算器

对于补码加法来说,前边设计的加法器完全可以满足需求。而对于补码的减法,在「计算机组成原理」数据的表示和运算(一)3.2.2中提到过,我们要先将减法转换成加法,方法就是全部位按位取反末位+1。
全部位按位取反我们只需要在加法器的其中一个加数的位置连接一个多路选择器,其功能是保证做减法时,先把操作数按位取反。
末位+1我们可以设置一个控制信号Sub,将其与多路选择器和低位的进位 C i n C_{in} Cin相连,其值为1时代表减法,值为0时代表加法。这样就实现了按位取反末位+1的操作。
在这里插入图片描述
由于无符号数的加减运算和补码的加减运算方式一样,因此此套电路也适用于无符号数的加减运算。

八、标志位的生成

除了之前的几个输出信息之外,标志位也是一个加法器重要的输出信息。主要的标识为有4个,分别是OF、SF、ZF和CF.其中OF和SF仅对有符号数的运算才有意义,CF仅对无符号数的运算才意义。
标志位的生成

九、定点数的移位运算

定点数的移位运算可以快速的扩大或缩小定点数的倍数。对于有符号数,可以使用算数移位。对于无符号数,可以使用逻辑移位或循环移位。

9.1 算数移位

由于正数的三码一样,因此他们算数移位的方式也是一样的:右移舍弃低位,高位补0;左移舍弃高位,低位补0. 由于会有舍弃,因此若舍弃的位不为0,会出现误差甚至严重的错误(因为左移舍弃的是主要的高位)

对于负数来说就要分为原码、反码和补码三种情况分别讨论:
1.负数的原码:右移舍弃低位,高位补0;左移舍弃高位,低位补0.
2.负数的反码:右移舍弃低位,高位补1;左移舍弃高位,低位补1.
3.负数的补码:右移舍弃低位,高位补1;左移舍弃高位,低位补0.
原码和反码的补位方法很容易会想到。补码之所以高位补1低位补0是因为补码是在反码的基础上+1得到的,因此补码的最低位一定是与原码一致的,因此要左移遵循原码的方式。而右移相当于扩展的是反码的位置,因此需要遵循反码的方式补1.其实稍作分析就会发现,负数补码从低位向高位的第一个“1”及其右边的所有位和原码一样;该“1”左边的所有位同反码一样。

总结一下:

码制填补代码
正数原码、补码、反码0
负数原码0
反码1
补码右移补1
左移补0

9.2 逻辑移位

逻辑移位一般是对于无符号数来说的,他的规则比较简单,无论左右还是右移,舍弃相应的位然后在新位置补0即可。

9.3 循环移位

循环移位分为两种:带进位位CF的循环移位和不带进位位CF的循环移位。都很简单,顾名思义,就是把移出的部分补到空出的部分。带CF那CF就跟着一起移动;不带CF那CF就不要动,让剩下所有位进行循环移位。
循环移位

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab生成sinc信号

Matlab生成sinc信号 在Matlab中生成sinc信号非常容易。首先,我们需要了解什么是sinc波形。 sinc波形是一种理想的信号,它在时域上是一个宽度为无穷的矩形函数,而在频域上则是一个平的频谱。它的公式为: sinc⁡(x)sin⁡(πx)πx\…

YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

前言 本篇文章主要是对YOLOv5项目的训练部分train.py。通常这个文件主要是用来读取用户自己的数据集,加载模型并训练。 文章代码逐行手打注释,每个模块都有对应讲解,一文帮你梳理整个代码逻辑! 友情提示:全文近5万字…

学习电气自动化PLC编程最基础的十大知识点详解

这篇文章其实是学习PLC自动化过程中必须要理解的基础问题,不管是西门子PLC还是三菱PLC,抑或欧姆龙PLC,以及国产品牌的PLC,这些问题都必须理解透,才能更好的开始自动化编程。不然指令学完了梯形图的逻辑可能还是搞不懂&…

Datatables展示数据(表格合并、日期计算、异步加载数据、分页显示、筛选过滤)

系列文章目录 datatable 自定义筛选按钮的解决方案Echarts实战案例代码(21):front-endPage的CJJTable前端分页插件ajax分页异步加载数据的解决方案 文章目录系列文章目录前言一、html容器构建1.操作按钮2.表格构建二、时间日期计算三、dataTables属性配置1.调用2.过…

java多线程与线程池-03线程池与阻塞队列

第6章 线程池与阻塞队列 6.1 Queue接口 队列是一种特殊的集合,一般队列都具有先进先出(FIFO)的特性(并不绝对要求)。优先级队列(PriorityQueue)按照元素的比较方法排序,其他队列基本采用自然序排队。 队列Queue接口实现了Collection接口,offer()方法负责把元素插入…

带头双向循环链表及链表总结

1、链表种类大全 1、链表严格来说可能用2*2*28种结构,从是否带头,是否循环,是否双向三个角度区分。 2、无头单向循环链表一般不会在实际运用中直接存储数据,而会作为某些更复杂结构的一个子结构,毕竟它只在头插、头删…

【数据结构之二叉树】——二叉树的概念及结构,特殊的二叉树和二叉树性质

文章目录一、二叉树的概念及结构1.概念2.现实中的二叉树3. 特殊的二叉树:3.二叉树的性质二、二叉树练习题总结一、二叉树的概念及结构 1.概念 一棵二叉树是结点的一个有限集合,该集合: 或者为空由一个根节点加上两棵别称为左子树和右子树的二叉树组成…

线性表的链式表示

文章目录1.单链表1.1单链表的表示1.1.1构建 带头结点的单链表1.2基本操作1.2.1 头插法1.2.2 尾插法1.2.3 按序号查找结点1.2.4 按值查找表结点1.2.5 插入结点操作扩展:前插操作1.2.6 删除结点操作扩展:删除结点*p1.2.7 求表长操作2.双链表2.1 双链表的表…

JVM相关知识

JVM类加载过程类什么时候被加载什么情况下会发生栈内存溢出JVM内存模型常量池回收方法区垃圾回收流程圾收集算法分代收集理论标记-清除算法标记-复制算法标记-整理算法类加载过程 加载–验证–准备–解析–初始化–使用–卸载 ​ 加载:通过全类名获取类的二进制流…

【C++】非类型的模板参数,特化

目录 1.类型模板参数和非类型模板参数 2.特化 3. 模板的分离编译 4.模板的优缺点 1.类型模板参数和非类型模板参数 之前写模板传的都是类型——类型模板参数 现在想定义两个静态数组,数组长度不同,就可以用模板参数传数值而不是传类型 非类型模板…

Docker与微服务实战2022

基础篇(零基小白)1.Docker简介1.1 是什么问题:为什么会有docker出现?您要如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复? 答案就…

Android源码分析 - View的触摸事件分发

0. 相关分享 Android源码分析 - InputManagerService与触摸事件 1. 接收Input系统发送来的事件 时序图源:稀土掘金 在注册Window的时候,来到ViewRootImpl,其中不仅发起窗口注册,还开启了输入事件的监听: //ViewRoo…

nuxt3使用总结

目录 背景 安装 项目配置 路由 Tailwindcss引入 全局样式配置 css预处理器 安装 Tailwindcss 项目的配置 部署上线 seo优化 背景 新入职了一家公司,刚进入公司第一个需求就是先做一个公司的官网,需要使用vue写,作为祖师爷的粉丝…

Java 电话号码的组合

电话号码的字母组合中等给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits "23…

案例学习--016 消息队列作用和意义

简介MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可以读取或者订阅队列中的消息。主要产品有:ActiveMQ、RocketMQ、Rabb…

【RV1126】RKMedia模块简介

文章目录简介源码与编译rkmedia log等级配置目录参考文档:【Rockchip RKMedia Development Guide】rkmedia的手册在sdk目录下/docs/RV1126_RV1109/Multimedia rkmedia的代码在sdk目录下/external/rkmedia rkmedia的demo在sdk目录下/external/rkmedia/examples&…

antlr4-maven-plugin简单学习

1. 序言 antlr4-maven-plugin的官方介绍为: The ANTLR 4 plugin for Maven can generate parsers for any number of grammars in your project.博客《 mac上的Antlr4环境搭建》,有介绍如何通过antlr4-maven-plugin实现.g4文件的编译 这里将介绍antlr4-…

弹性存储-对象存储OSS部分

对象存储介绍 对象存储(object storage service,简称oss),具备与平台无关的rest api接口,可提供99.9999999999%(12个9)的数据持久性和99.995%的数据可用性。 OSS优势 功能介绍 存储空间bucke…

秒杀高并发解决方案

秒杀高并发解决方案 1.秒杀/高并发方案-介绍 秒杀/高并发 其实主要解决两个问题,一个是并发读,一个是并发写并发读的核心优化理念是尽量减少用户到 DB 来"读"数据,或者让他们读更少的数据, 并 发写的处理原则也一样针对秒杀系统需…

麒麟服务器V10 版本 安装 Anaconda教程,也就是安装Python环境的教程(亲测有效)

目录1 Anaconda 是什么2 安装1 Anaconda 是什么 你可以理解为一个软件,和QQ一样的软件,你安装之后,里面就有naconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等 1)包含conda&#x…