第三章 运算方法与运算器

article/2025/9/28 11:58:45

文章目录

  • 定点补码加减法运算
    • 补码加减法运算方法
    • 溢出及检测
      • 溢出检测
        • 操作数与运算结果的符号位是否一致
        • 最高位的进位和符号位的进位是否一致
        • 变形补码
    • 补码加减法的逻辑实现
  • 移码加减运算及实现逻辑
    • 移码的加法运算
    • 移码加减法的溢出判断
      • 直接采用移码运算的溢出判断方法
      • 采用双符号判断
  • 定点乘法运算
    • 机器数的移位操作
    • 原码一位乘法
      • 原码一位乘法
        • 符号位的确定
        • 乘积的数值
    • 补码一位乘法
      • 运算规则(booth算法)
    • 阵列乘法器
  • 定点除法运算
    • 原码一位除法
      • 原码恢复余数法
      • 原码不恢复余数法
    • 不恢复余数的补码一位除法
  • 浮点运算
    • 浮点数加减运算
      • 阶码和尾数采用补码表示的浮点数加减运算
      • IEEE 754浮点数的加减运算
    • 浮点数乘法运算
    • 浮点数除法运算
  • 逻辑运算
  • 运算器
    • 定点运算器
      • 运算前的基本组成单元
        • 算术逻辑运算单元
        • 通用寄存器组
        • 输入输出数据选择控制
        • 内部总线
      • 运算器的基本结构
        • 单总线
        • 双总线
        • 三总线
    • 浮点运算器
    • 基本算术逻辑单元的设计
      • 基本算术、逻辑部件
      • 基本算术逻辑运算单元设计
        • 串行进位加法器
        • 并行加法器

定点补码加减法运算

补码加减法运算方法

  • 补码加法:[x]补 + [y]补 = [x + y]补 mod M
  • 补码减法:[x]补 - [y]补 = [x - y]补 mod M

溢出及检测

运算结果超出数据类型所能表示数据范围的现象称为溢出

溢出检测

操作数与运算结果的符号位是否一致

只有符号相同的数相加,才有可能产生溢出,因此检测运算结果的符号位,是否与操作数一致
设操作数为S1XXXX和S2XXXX,其中S1和S2为他们的符号位,结果为SXXXX,S是结果的标志位,V是溢出标志位,那么
V = S1 && S2 && !S + !S1 && !S2 && S
如果符号位不同,则S1和S2必定是0和1的组合,其结果V一定为0
如果符号位相同,则可能同时为0或者同时为1,这时就要看结果的符号位S了

最高位的进位和符号位的进位是否一致

最高位C和符号位S的进位,如果不同步,则发生了溢出
V = C ^ S

变形补码

变形补码就是用两个位来表示符号位,正数符号位00,负数符号位11
如果运算后的结果为01,则上溢,10则下溢

补码加减法的逻辑实现

  • 利用一位全加器(FA)作为基本的加法单元,低位FA的进位,直接送到相邻高位FA的进位输入,构成一个串行进位链
  • 进行加法运算时,直接送入全加器,进行减法运算时,减数先求补
  • 采用基于变形补码的双符号位溢出检测方法
  • 不支持逻辑运算

移码加减运算及实现逻辑

移码的加法运算

  • 公式1:[x]移 + [y]移 = [x + y]移 + 2^n
  • 公式2:[x]移 + [y]移 = [x + y]补
  • 公式3:[x]移 + [y]补 = [x + y]移 mod 2^(n+1)

求移码的加法有三种方式

  • 直接对两数的移码求和,然后将高位取反
  • 直接求出两数和的补码,然后将高位取反
  • 用一个数的移码,加另一个数的补码

移码加减法的溢出判断

直接采用移码运算的溢出判断方法

只有符号相同的加法,才会溢出
正数的移码,符号位为1,如果两个正数的移码相加,符号位1+1=0,结果的符号位变成0
因此,移码相加后,符号位与操作数相同,则发生了溢出

采用双符号判断

  • S1S2 = 00,结果为负,未溢出
  • S1S2 = 01,结果为正,未溢出
  • S1S2 = 10,上溢
  • S1S2 = 11,下溢

定点乘法运算

机器数的移位操作

移位操作是乘法实现过程的基本操作,又分为逻辑移位和算术移位
逻辑移位:左移和右移,空出来的位置都补0
算术移位:左移时低位补0,右移时高位补符号位

原码一位乘法

原码一位乘法

符号位的确定

两个乘数符号位的异或

乘积的数值

  • 由于符号位已经单独处理了,所以乘积就是绝对值相乘
  • 用循环累加和移位操作实现乘法运算
  • 两个n位数参加乘法运算,要做n次加法和移位操作

补码一位乘法

运算规则(booth算法)

  • 被乘数一般取双符号位参与运算
  • 乘数末位增设附加位Y(n+1),初值为0
  • 利用Y(n+1) 与 Yn 的差,决定下一步的具体运算
  • 按照上述算法进行n+1步累加操作,n步右移操作
Y(n+1) - Yn操作
0部分积右移一位
1部分积加[x]补后,右移一位
-1部分积加[-x]补后,右移一位

阵列乘法器

一位乘法通过逐位判断、右移、循环累加来实现,速度较慢,为了提高乘法速度,可以采用硬件方式实现阵列乘法器,其基本思想是采用类似手工乘法运算的方法,用大量与门产生手工乘法中的各乘积项,同时将大量一位全加器按照手工乘法算式中需要进行加运算的各相关项的排列方式组成加法器阵列

定点除法运算

除法运算与乘法运算的处理思想相似,通常是将n位数的除操作转换成若干次的加减和移位来实现

原码一位除法

原码恢复余数法

被除数(余数)减去除数,如果为正则够减商1,如果为负则不够减商0,而且被除数(余数)要恢复到减之前的值,这就叫恢复余数法
为了防止溢出,除法运算(x / y)一定要满足(|x| < |y|),保证商的绝对值不超过1,因此第一次上商的值,要放在商的符号位,后面上的商,从小数点后依次排列,商的位数一般与除数相等,因此最后一次上商后,就不用做减法和移位了

原码不恢复余数法

与恢复余数法相比,进行比较后,如果商1则算法不变,如果商0则不恢复余数,先移位再加上除数

  • 当余数为正时,商1,余数左移一位,减去除数
  • 当余数为负时,商0,余数左移一位,加上除数

不恢复余数的补码一位除法

算法规则如下

  • 被除数与除数同号,被除数减去除数;被除数与除数异号,被除数加上除数
  • 余数与除数同号,商1,余数左移一位减去除数;余数与除数异号,商0,余数左移一位加上除数

一般情况下,对于商的精度没有特殊要求,商的末位“恒置1”
如果要求提高精度,则多求一位商,再用校正的办法对商进行处理

  • 当刚好能除尽时,如果除数为正,则商不必修正;如果除数位负,则商需要校正
  • 当不能除尽时,如果商为正,则不必修正;如果商为负,则商需要校正

求得n位商后,得到的余数往往是不正确的,正确的余数常需要根据具体情况做适当的处理

  • 若商为正,当余数与被除数符号相同,则不需处理;当余数与被除数异号时,则应将余数加上除数进行修正才能获得正确的余数
  • 若商为负,当余数与被除数同号时,则余数不需要处理;当余数与被除数异号时,则余数需要减去除数进行校正
    余数之所以需要校正,是因为补码不恢复余数法除法运算过程中先比较上商的缘故

浮点运算

浮点数常用规格化数进行运算

浮点数加减运算

阶码和尾数采用补码表示的浮点数加减运算

  • 对阶:对阶的原则是小的阶码向大的看齐,因为小阶码增大时,尾数部分右移而减小,损失的是最低位,对精度影响不大
  • 尾数运算:对阶完成后,按照定点数的加减法运算执行尾数加减操作
  • 结果规格化:为了处理方便,一般取两位符号位,当尾数符号位01或10时,需要向右规格化,将尾数右移一位,同时阶码加一;当尾数为11.1xxx或00.0xxx时,需要左移规格化,左移次数不固定,直到尾数部分出现11.0xx或00.1xx为止
  • 舍入:在对阶右移和结果规格化右移时,会丢掉末尾的值,常用的舍入方法
    • 末位恒置1法:只要右移时丢失过1,则末位置1
    • 0舍1入法:当丢失位数最高位为1时,尾数末尾加1
  • 溢出判断:只有阶码溢出时,才产生溢出,阶码符号位为01和10时溢出

IEEE 754浮点数的加减运算

IEEE 754浮点数的阶码采用移码表示,尾数采用原码表示,且尾数的最高位隐藏,因此算法与之前都采用补码的形式不同

  • 对阶和规格化过程中,阶码的运算采用移码的加减运算
  • 尾数的运算采用原码运算法则,且隐藏位要参与尾数运算
  • 隐藏位参与尾数规格化判断及尾数规格化过程
  • 溢出判断,上溢时阶码全1,下溢时阶码全0

浮点数乘法运算

  • 阶码相加
  • 尾数相乘
  • 结果规格化

浮点数除法运算

  • 尾数调整:检查被除数的尾数是否小于除数的尾数(考察绝对值),如果被除数的尾数大于除数尾数,则将被除数的尾数右移一位并调整阶码。由于操作数在运算前是规格化数,所以最多做一次调整,这步操作将防止商的尾数出现混乱,其实就是要求进行除法后,商是绝对值小于1的
  • 阶码求差
  • 尾数相除

逻辑运算

逻辑非:求反
逻辑乘:求与
逻辑加:求或
逻辑异:异或

运算器

运算器是对数据进行加工处理的部件,它具体实现数据的算术运算和逻辑运算,所以又称做算术逻辑运算部,记为ALU(Arithmetic logic unit),它是中央处理器CPU的重要组成部分

定点运算器

运算前的基本组成单元

算术逻辑运算单元

对数据进行加工处理的部件,主要完成算术运算和逻辑运算,也常作为数据传送的通路

通用寄存器组

运算器内通用寄存器组的作用大致可以分为3类:

  • 用来暂存参与运算的数据和运算结果,尽量减少指令执行过程中访问主存的次数,提高运算速度
  • 作为状态寄存器,保存运算过程中设置的状态,如进位、溢出、结果为负等,这些状态可以用于程序执行流程的控制
  • 可作变址寄存器、堆栈指示器使用,不同的机器对这组寄存器的使用情况和设置个数不相同

输入输出数据选择控制

输入数据选择控制是对送入运算器的数据进行选择和控制,起作用包括:

  • 选择数据送入运算器
  • 控制数据以何种编码方式(原码、反码、补码等)送入运算器
    输出数据控制电路是对运算器输出的数据进行控制,该电路一般还具有移位功能,并具有将运算器输出的数据输送到运算器、通用寄存器的通路和送往总线的控制电路

内部总线

是连接各个部件的信息通道

运算器的基本结构

运算器的基本结构与运算器中总线结构以及运算器各部件与总线的连接方式紧密相关,不同的连接构成不同的数据通路,形成不同结构的运算器

单总线

1

可以看出,所有部件与总线IB连接,因此需要在ALU输入端设置缓冲器LA和LB,单总线结构运算器的主要缺点是操作速度慢

双总线

2

ALU与通用寄存器都连接在总线IB1和IB2上,因此可以同时通过两组总线传输数据

三总线

3

在执行双操作数运算时,可同时通过三组总线传输数据,不仅速度快,而且不需要设置缓冲器,图中的旁路器作用是不通过ALU实现通用寄存器之间的数据传输

浮点运算器

4

如图是浮点加法运算部件的逻辑结构图,最上面是两个浮点数据寄存器,左上部是一个用于对阶的ALU,它将两个浮点数的阶码相减,并将结果存入阶差寄存器中
浮点运算控制器部件根据阶差,选择阶码小的浮点数的位数进行右移操作,同时选择较大的阶码送入阶码加1或减1寄存器中
阶码大的浮点数的尾数和经过右移后的浮点数的尾数,进入尾数运算ALU进行尾数的加减运算,运算的结果送入尾数规格化部件,规格化时对运算结果的尾数进行左移或右移规格化,同时对阶码进行加一或减一操作,规格化的结果又送入舍入部件,控制部件根据规格化后的结果进行舍入操作

基本算术逻辑单元的设计

基本算术、逻辑部件

5

与门、或门、非门、二路选择器、一位全加器

基本算术逻辑运算单元设计

6

串行进位加法器

7

通过之前基本算术逻辑单元的设计,可以拿4个直接构成串行进位的加法器
此加法器的低位进位,直接送到高位,只有拿到低位的进位数据,高位才能进行运算,这种由低位向高位逐步产生进位的方式成为串行进位,也称为行波进位,串行加法器运算速度较慢

并行加法器

8

并行进位方式下,高位ALU的进位输入不再直接来自于低位ALU的进位输出,而是来自于并行进位产生电路的相应进位输出


http://chatgpt.dhexx.cn/article/9rQLP3Sc.shtml

相关文章

2019做报表用什么软件:报表类型,产品推荐

在大数据时代&#xff0c;报表可以帮助我们从海量数据中挖掘有用的数据&#xff0c;选择软件做什么就变得尤为重要。选择什么类型的软件进行报表?推荐哪些报表产品?本文请一位专业的数据分析师&#xff0c;介绍选择报表软件的经验。 ……阅读更多&#xff0c;请戳原文链接&am…

免费报表软件有哪些?5款热门工具

在企业管理过程中&#xff0c;报表往往都会通过一些简洁的图表方式&#xff0c;为大家呈现所有的数据。报表软件&#xff0c;可以在操作的过程中有效提升工作效率&#xff0c;所以有很多企业早就已经选择跟随信息技术的潮流&#xff0c;选择报表软件工具。很多人也一直都在关注…

分享几款好用免费的报表软件_报表软件推荐

Smartbi Insight Smartbi Insight&#xff08;企业报表平台&#xff09;以中国式报表、多维度分析、可视化仪表盘为核心&#xff0c;满足报表需求的功能以“真Excel”为特色&#xff0c;将Office Excel和WPS表格变为企业级WEB报表设计器&#xff0c;表格样式与计算逻辑的灵活性…

JimuReport积木报表 v1.5.8版本发布—免费的数据可视化报表

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

报表开发流程

报表开发是数据分析师的常见工作之一。报表是业务监控必备工具之一(用数据说话)&#xff0c;另一方面&#xff0c;报表监控的指标通常都是业务相关的重要指标&#xff0c;做报表的过程也是深入了解业务的过程。 把数据分析分为“描述、解释、预测、控制”4个层级。那么报表开发…

免费报表工具 - RDP报表工具

公司一直用ireport&#xff0c;后来偶然在一个报表QQ群里&#xff0c;看到了有人发RDP报表工具链接&#xff0c;一开始就以为是广告&#xff0c;都没敢点&#xff0c;要知道现在有太多骗子&#xff0c;后来看到群里有人问问题&#xff0c;又截了一些图&#xff0c;才敢放心点进…

mysql 免费报表工具_10款最出色的免费数据库管理工具

任何web软件和应用程序都需要强大的数据库管理工具。目前,网上的数据库管理工具各式各样,而开发者选择一款适合自己的数据库管理工具尤为重要。小编为大家收集了10款超强的数据库管理工具,帮助开发者轻松搞定很多难题。 OpenKeyval是一款免费、开源的键值数据库管理工具,基…

java 报表工具_最好用的5款java web免费报表工具

阅读提示&#xff1a; 文章中与FineReport软件使用的相关内容&#xff0c;基于软件的V7.0旧版本编写&#xff0c;不代表软件最新的使用方式。 FineReport最新版免费试用&#xff1a;https://www.finereport.com/product/active FineReport最新版使用教程&#xff1a;https://he…

软件测试之报表测试

什么是报表测试? 最近开始在做报表测试&#xff0c;顾名思义&#xff0c;就是指测试报表&#xff0c;报表主要是给一些特定的群体展示一些特定数据或是汇总数据&#xff0c;则报表测试主要是跟一堆数据打交道&#xff0c;检验和确认报表展示出来的数据是否正确&#xff0c;取值…

t3软件怎么生成报表_用友T3如何生成报表

用友T3如何生成报表 用友T3如何生成报表 1、报表生成财务报表 → 文件菜单 → 新建 → 选择行业分类模版 → 在格式状态下修改格式(左下角) → 点击左下角“格式”&#xff0c;使其变成“数据”状态 → 数据菜单 → 关键字 → 录入关键字(单位名称、年、月、日)→ 确定 2、保存…

目前国内几大著名报表软件(2014更新)

目前国内几大著名报表软件&#xff08;2014更新&#xff09; cnham 2017-05-08 09:44:24 4044 已收藏 2 分类专栏&#xff1a; HTML和脚本 文章标签&#xff1a; 报表工具 最后发布:2017-05-08 09:44:24首发:2017-05-08 09:44:24 NO1&#xff1a; 帆软报表&#xff08;F…

合并报表软件选哪个?这篇文章两分钟告诉你!

一想到合并报表工具&#xff0c;大多数人肯定选择传统的Excel进行报表合并。虽然利用传统的办公软件实现合并报表为大多数人所熟悉&#xff0c;但是它也逐渐显现出一系列问题。 1.我们在分析报表时&#xff0c;各种不同类型数据之间的经济逻辑关系错综复杂&#xff0c;导致分析…

合并报表软件系统推荐

​手工合并报表时&#xff0c;经常遇到很多问题&#xff0c;而且效率低下&#xff0c;而专业的合并报表软件只需要几步&#xff0c;就能快速准确汇总各子报表&#xff0c;生成合并的报表并动态展示。尤其是对于财务报表来说&#xff0c;能节省大量手工合并做账的重复做工精力。…

2022年,4款值得用的报表工具软件推荐!

“我们企业想用一个报表工具软件&#xff0c;你有推荐吗&#xff1f;”这是小编这两年被问到最多的问题&#xff0c;但凡有点规模的公司&#xff0c;都想使用报表工具。 一、报表工具软件到底怎么选 那报表工具软件到底怎么选&#xff0c;从哪几个维度出发呢&#xff1f;根据…

软件测试报表统计,排行榜Top4的统计报表软件测评

阅读提示&#xff1a; 文章中与FineReport软件使用的相关内容&#xff0c;基于软件的V7.0旧版本编写&#xff0c;不代表软件最新的使用方式。 FineReport最新版免费试用&#xff1a;https://www.finereport.com/product/active FineReport最新版使用教程&#xff1a;https://he…

专业测评:5款热门的免费报表软件

现在报表的需求越来越多变&#xff0c;无法快速响应的报表软件已经不算好的报表软件了&#xff0c;而很多好的报表软件又需要收费使用。好用的免费报表软件必须具备简捷、专业、灵活的特点&#xff0c;这里就给大家测评几款免费报表软件。 1、FineReport FineReport的每一个功…

python3--opencc安装方式

尝试用gensim训练维基百科中文数据的word2vec&#xff0c;需要使用到opencc这个库来转换繁简体。 直接 pip intall opencc-python会出错&#xff1a; command errored out with exit status 1: python setup.py egg info check the logs for full command output. 找了好久都在…

Python3.6安装opencc-python

Python3.6安装opencc-python 近期因为项目需求&#xff0c;需要将文本中的繁体中文转换成简体&#xff0c;查了些资料&#xff0c;发现opencc是个很好的库&#xff0c;但却遇到了无法安装的问题。 生产环境是Python 3.6&#xff0c; Mac系统&#xff0c;通过pip命令安装包 pip…

nodejs 使用opencc 实现一个简体转台湾繁体的服务

简体转繁体 使用场景: app接口需要对台湾用户返回繁体, api是php开发的, 由于服务器原因不能安装上php的opencc扩展, 所以使用了nodejs 来提供一个api供php调用 首先安装好nodejs跟opencc扩展 附: opencc github GitHub - BYVoid/OpenCC: Conversion between Traditional…

open cv

open cv 读取的type是nd array类型 img0.shape----(546,820)形状是代表元素的个数 像素点的个数 分别代表高和宽&#xff08;灰色0&#xff09; 使用一个值来表示一个像素点 img1cv2.imread&#xff08;文件路径&#xff0c;0/1/2&#xff09;只有第一个路径必需要写&#xf…