计算机组成原理第二章数据的表示与运算(中)

news2025/6/9 13:44:15

提示:且行且忘且随风,且行且看且从容

文章目录

  • 前言
  • 2.2.0 奇偶校验码(大纲已删)
  • 2.2.1 电路的基本原理 加法器设计
  • 2.2.2 并行进位加法器
  • 2.2.3 补码加减运算器
  • 2.2.4 标志位的生成
  • 2.2.5 定点数的移位运算
  • 2.2.6
    • 2.2.6.1 原码的乘法运算
    • 2.2.6.2 补码的乘法运算
  • 2.2.7.1
    • 原码的除法运算
  • 2.2.7.2 补码的除法运算
  • 2.2.8 c语言的类型转换
  • 2.2.9 数据的存储和排列


前言

2.2.0 奇偶校验码(大纲已删)

在有效信息位的首部或者尾部加上一位奇偶校验位
奇校验码:整个校验码(有效信息位和校验位) 中“1”的个数为奇数个
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数
其实也就是数给定的编码中1的个数, 若是奇校验码,其中有效信息码中1的个数为奇数个,则校验位添加0 若是有效信息码中1的个数为偶数个,则校验位添加1,
偶校验的硬件实现,各信息进行异或(模2加)运算,得到的结果即为偶校验位,然后进行偶校验(所有位进行异或,若结果为1,说明出错,但是若是同时有两个bit发生错误,则进行偶校验也是不能发现错误的)

2.2.1 电路的基本原理 加法器设计

这里主要讲三个部分,算数逻辑单元的作用,大致原理,电路基础知识,加法器的实现,与类似C语言&& 表达式Y=A*B “或”类似“||” 表示式Y=A+B,但是要注意优先级“与”是大于“或”的,同时满足分配律以及结合律如A(C+D)=AC+AD ,再如ABC=A(BC),异或相同是零,相异是一 同或 相同是一,相异是零,与异或正好相反
一位全加器两个本位和一个来自低位的进位可以确定本位的和并且也能确定应该向高位进一个什么样的值,
请添加图片描述
串行加法器
只有一个全加器,数据逐位串行送入加法器中进行运算,进行触发器用来寄存进位信号,以便参与下一次运算,如果操作数长n位,加法就要分n此进行,每次产生一位和,并且串行逐位地送回寄存器,所以这张串行加法器的效率较低
请添加图片描述
并行加法器
把n个全加器串联起来,就可以进行两个n位数的相加,串行又称为行波进位,每一级进行直接依赖于前一级的进位,既进行信号是逐级形成的,所以这种加法器的快慢却决于每一位进位的速度
请添加图片描述

本节总览

请添加图片描述

2.2.2 并行进位加法器

上述的时候我们讲过 速度很大程度上取决于进位的速度,这里我们可以发现进位的表达式又可以用更低一位的进位表达,这里也就是数学中的递推法 最终我们发现每一级是可以使用C0表示的,也就意味着我们可以直接算出每一个全加器的值,也就意味着每一个进位几乎都是同时产生的,但是这样也有一个缺点就是会导致设计的电路越来越复杂,所以通常是有四个全加器和一些运算逻辑组成
请添加图片描述

2.2.3 补码加减运算器

也就是从硬件的角度来看补码的加减运算是如何实现的,如下图,若是我们进行的是X+Y 则此时Sub也就是0 此时控制多路选择器 Y的值直接通过,若是X-Y 此时Sub也就是1,此时控制多路选择器打开1这个开关,而Y也要进行非操作,此时再加上sub 中的这个一,也就实现了减法变加法(全部位取反,末位值加一)

请添加图片描述

入下 计算机的底层逻辑在处理加法或者减法的时候是,无论是有符号数还是无符号数都是通过同一个电路来处理的,但是最后我们判断是否溢出的时候,有符号数的判断逻辑和无符号数的判断逻辑是存在显著的区别的
请添加图片描述
请添加图片描述

2.2.4 标志位的生成

两个nbit的数相加,除了生成一个nbit的值外 同时也会生成四个标志位如下
请添加图片描述

2.2.5 定点数的移位运算

移位:通过改变各个数码位和小数点的相对位置,从而改变数码位的位权,可用移位运算实现乘法和除法,原码的算数移位——符号位保持不变,仅对数值位进行移动,右移:高位补0,低位舍弃,若舍弃的位=0,则相当于/2 若舍弃的位!=0 则会丢失精度,其实这些也是可以理解的,原码到反码的过程中有一个是全部取反,自然左边高位是补一,而反码又要加一,自然作用到补码上低位也就是补零
请添加图片描述

循环移位
不带进位位:用移出的位补上空缺,带进位位,移出的位放到进位位,原进位位补上空缺

2.2.6

2.2.6.1 原码的乘法运算

这节主要讲三个问题,乘法运算的实现思想,原码的一位乘法,补码的一位乘法
乘法运算的实现思想将乘数拆成多个数相加,再用被乘数分别与这些乘数进行相乘再相加,但是这里考虑到机器实现有三个问题,1,实际数字有正负,符号位如何处理?,2,乘积的位数扩大一倍,如何处理?,3,4个位积都要保存下来最后统一相加?
问题一:符号位单独处理,符号位=A异或B
问题二:先加法再移位 重复n次,当前位=1,则ACC加上被乘数,当前位=0,则ACC加上0,每次乘完之后 在进行移位,然后乘积高位往右移动,继续看乘数的乘低位,为1则与乘积高位相加,结果放在乘积高位中,在移动,再继续看乘积低位
请添加图片描述问题三:你会发现这里的结果不是每一个算出来 然后相加 而是一位算出来就放在ACC与MQ中了
这里使用的是双符号位,但是使用单符号位也不会出错,至于这里为什么使用双符号位,可能是因为补码的乘法一定要使用双符号位,这里可能是与补码保持统一
请添加图片描述

2.2.6.2 补码的乘法运算

和原码的移位加法相似,但是还需要多来一次加法,最后的这一次加法会让乘数的符号位也参与运算,只有加法没有移位,如下图MQ红色部分既是这里所说的辅助位,所有寄存器的长度一般都是统一的,所以这里的补码采用的是双符号位的形式,
请添加图片描述
如对下图的解析,第一步的时候,辅助位-MQ中的最低位为-1,这个时候加上乘数的补码 然后ACC和MQ统一右移,符号位不动,数值位右移,正数右移补0 负数右移补1(符号位是啥就补啥),Y5是这里的辅助位,Y4是这里MQ中的最低位
请添加图片描述
知识点回顾
请添加图片描述

2.2.7.1

原码的除法运算

如下图ACC中保留的是被除数 MQ中保留的是商 通用寄存器中保留的是除数,本来我们的想法是比较ACC与通用寄存器中的值来确定商的值,但是计算机很傻,会先默认商一,若是检查到ACC中的符号位是1(负)此时也就会修改商上面的值让其为0 并且让ACC恢复原样,然后减去除数,ACC与MQ整体左移低位补零,然后依然是默认商1,若是最后一步商余数为负,也需要回复余数并商零
请添加图片描述
恢复余数法(手算)
根据所得余数的符号位的正负来确定商应该是0或者1
请添加图片描述
恢复余数法的改进
若余数为负,则可直接商0,并让余数左移一位再加上除数
请添加图片描述
不恢复余数法(手算)
请添加图片描述

2.2.7.2 补码的除法运算

请添加图片描述

2.2.8 c语言的类型转换

C语言中定点整数是用“补码”存储的
所以进行强制转化的时候
无符号数和有符号数:不改变数据内容,改变解释方式
长整数变短整数:高位截断,保留低位
短整数变长整数:符号扩展

2.2.9 数据的存储和排列

大小端模式
小段读取的方式更有利于机器的处理:计算机首先从计算机读入的最低有效字节 这样CUP在处理加法的时候,这样从低有效字节读入是有利于处理的
请添加图片描述
边界对齐
这个东西通常是结构体定义的时候,比如下图我们定义了三个char型变量 三个short型变量,还有一个short型变量,若是按照边界不对齐的方式,我们读取第一个short变量的时候需要两次访问并进行拼接,而上边界对齐则一次访问便可,且不需要拼接,一种空间换取时间的策略
请添加图片描述

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

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

相关文章

Linux下异步socket客户端

文章目录socket 客户端1. 创建socketsocket()函数返回值2. 设置socket的属性connect函数sockaddr_in结构体inet_pton函数3. fcntl设置非阻塞4. recv函数socket 客户端 1. 创建socket socket()函数 #include <sys/socket.h> int socket(int domain, int type, int proto…

四、线程安全,synchronized,volatile(JMM)【4/12 5/12 6/12】【多线程】

4. 多线程带来的的风险-线程安全 (重点) 4.1 观察线程不安全 static class Counter {public int count 0;void increase() {count;} } public static void main(String[] args) throws InterruptedException {final Counter counter new Counter();Thread t1 new Thread(()…

数据结构——排序(4)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年4月12日 内容&#xff1a;数据结构排序内容讲解 目录 前言&#xff1a; 1.快速排序中的递归&#xff1a; 2.小区间优化&#xff1a; 3.递归改非递归&#xff1a; 4.归并排序&#xff1a; 5.归并排序的非递归形式&…

Revit中如何绘制倾斜的屋顶及一键成板?

Revit中如何绘制倾斜的屋顶&#xff1f;如下图所示&#xff0c;像这种坡屋顶有两种方法进行绘制。 第一种&#xff1a;定义坡度。 1、点击建筑选项卡中的屋顶按钮。选择使用矩形工具。 2、在选项栏中&#xff0c;偏离值修改为500&#xff0c;把屋顶迹线绘制出来。 3、取消这三…

软件测试今天你被内卷了吗?

认识一个人&#xff0c;大专学历非计算机专业的&#xff0c;是前几年环境好的时候入的行&#xff0c;那时候软件测试的要求真的很低&#xff0c;他那时好像是报了个班&#xff0c;然后入门的&#xff0c;但学的都是些基础&#xff0c;当时的他想的也简单&#xff0c;反正也能拿…

【面试】限流算法有哪些?

文章目录前言1.固定窗口限流算法1.2 固定窗口限流的伪代码实现1.2 固定窗口算法的优缺点2.漏桶算法3.令牌桶算法4. 滑动窗口限流算法4.1 什么是滑动窗口限流算法4.2 滑动窗口限流算法的伪代码实现4.3 滑动窗口限流算法的优缺点漏桶算法 VS 令牌桶算法总结参考 & 鸣谢前言 …

docker项目实施

鲲鹏916架构openEuler-arm64成功安装docker并跑通tomcat容器_闭关苦炼内功的技术博客_51CTO博客鲲鹏916架构openEuler-arm64成功安装docker并跑通tomcat容器&#xff0c;本文是基于之前这篇文章鲲鹏920架构arm64版本centos7安装docker下面开始先来看下系统版本卸载旧版本旧版本…

刘二大人《Pytorch深度学习实践》第八讲加载数据集

文章目录Epoch、Batch-Size、IterationsDataset、DataLoader课上代码torchvision中数据集的加载Epoch、Batch-Size、Iterations 1、所有的训练集进行了一次前向和反向传播&#xff0c;叫做一个Epoch 2、在深度学习训练中&#xff0c;要给整个数据集分成多份&#xff0c;即mini-…

【密码学】ElGamal加密算法原理 以及 例题讲解

目录前言1. 原理2. 例题2.1 例题一2.2 例题二前言 具体的性质&#xff1a; 非对称加密算法应用于一些技术标准中&#xff0c;如数字签名标准&#xff08;DSS&#xff09;、S/MIME 电子邮件标准算法定义在任何循环群 G 上&#xff0c;安全性取决于 G 上的离散对数难题 1. 原理…

元宇宙地产暴跌,林俊杰亏麻了

文/章鱼哥出品/陀螺财经随着元宇宙的兴起&#xff0c;元宇宙地产曾一度被寄予厚望&#xff0c;成为各大投资者追捧的对象。然而&#xff0c;最近的一次元宇宙地产价值暴跌再次提醒我们&#xff0c;高收益背后可能伴随着高风险。根据元宇宙分析平台WeMeta的数据显示&#xff0c;…

400以内的蓝牙耳机哪款好?400以内蓝牙耳机排行榜

谈起TWS&#xff0c;无论是传统的音频厂商还是手机厂商&#xff0c;都是其不可或缺的重要产品线&#xff0c;现在很多许多蓝牙耳机都不是千篇一律得形状&#xff0c;市场也鲜有商家在外观上下功夫&#xff0c;下面分享几款400元以内&#xff0c;内外兼具的耳机品牌。 一、南卡…

Spring boot+Vue3博客平台:修改密码与找回密码的设计与实现

修改密码与找回密码功能的设计与实现涉及到前后端的配合。本文将详细介绍如何通过设计思路、技术实现和代码示例实现这两个功能。 一、修改密码功能 设计思路 在设计修改密码功能时&#xff0c;需要注意以下几点&#xff1a; 用户输入的当前密码需要正确新密码需要满足一定的…

查询优化器:选择最优的查询路径

当我们通过解析器理解了SQL语句要干什么之后&#xff0c;接着会找查询优化器&#xff08;Optimizer&#xff09;来选择一个最优的查询路径。 可能有同学这里就不太理解什么是最优的查询路径了&#xff0c;这个看起来确实很抽象&#xff0c;当然&#xff0c;这个查询优化器的工…

总结819

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 第二周&#xff1a; 学习内容&#xff1a; 暴力英语&#xff1a;早上背诵《think different》记150词&#xff0c;默写了两篇文章&#xff0c…

BUUCTF-warmup_csaw_2016

1.checksec/file 64位的linux文件 2.ida 找到主函数 发现致命函数 get() 因为get可以无限输入 看看有没有什么函数我们可以返回的 双击进入sub_40060d 直接发现这个函数是取flag的 所以我们开始看这个函数的地址 所以函数地址是 0x40060d 我们看看get什么时候开始的 发现g…

Stable Diffusion复现——基于 Amazon SageMaker 搭建文本生成图像模型

众所周知&#xff0c;Stable Diffusion扩散模型的训练和推理非常消耗显卡资源&#xff0c;我之前也是因为资源原因一直没有复现成功。而最近我在网上搜索发现&#xff0c;亚马逊云科技最近推出了一个【云上探索实验室】刚好有复现Stable Diffusion的活动&#xff0c;其使用亚马…

超详细从入门到精通,pytest自动化测试框架实战-fixture高级进阶(十)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 1、fixture的autous…

jQuery+AJAX技术(简单的用户注册功能)

目录1、jQuery是什么&#xff1f;2、AJAX是什么&#xff1f;3、jQuery与AJAX的关系&#xff1f;使用jQuery实现AJAX示例&#xff1a;4、jQueryAJAX技术实现用户注册验证功能。1、jQuery是什么&#xff1f; jQuery 是一个快速&#xff0c;小型且功能丰富的JavaScript库。它使 诸…

gradle编译项目报错Execution failed for task ‘:bootJar‘,‘:mainClass‘,‘:compileJava‘.

目录1.问题2.问题查找3.更多1.问题 idea导入Gradle管理的SpeingBoot多模块项目&#xff0c;依赖下载不下来&#xff0c;执行编译报错 报错信息&#xff1a; 2.问题查找 首先怀疑是不是idea的版本与gradle版本冲突&#xff0c;我用的是idea2022.3.3&#xff0c;gradle是7.5.…

做一个内心强大的人

想想类似如下这种心灵鸡汤&#xff0c;本不太愿意在这个平台发布&#xff0c;但是偶尔喝点又何尝不可&#xff01; 语录摘抄/分享&#xff1a; 1、你开始炫耀自己&#xff0c;往往都是灾难的开始&#xff0c;就像老子在《道德经》里写到: 光而不耀&#xff0c;静水流深。 2、…