用加法器实现补码的加/减运算

这篇具有很好参考价值的文章主要介绍了用加法器实现补码的加/减运算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.原码的加减运算

(1)原码的加/减法运算

(2)溢出判断

(3)符号扩展

2.加法器原理

3.加法器实现补码的加减运算


1.原码的加减运算
(1)原码的加/减法运算

正+正--->绝对值做加法,结果为正

负+负--->绝对值做加法,结果为负
正+负--->绝对值大的减绝对值小的,符号同绝对值大的数

负+正--->绝对值大的减绝对值小的,符号同绝对值大的数

原码的减法运算,只需要将“减数”符号取反,就可以转变为加法运算

对于正+正,负+负的情况,结果可能会溢出,例如:

A=15,B=-24,C=124:

[A+C]补=0,0001111+0,1111100=1,0001011 真值-117,A+C=15+124,不是-117,这就发生了溢出,8位补码的范围是-128~127

[B-C]补=1,1101000+1,0000100=0,1101100 真值+108,同样溢出,-24-124(两个负数相加得到正数)

 对于补码加减不会的可以看看:http://t.csdnimg.cn/4oTZI

(2)溢出判断

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

只有“正数+正数”才会上溢---正+正=负

只有“负数+负数”才会下溢---负+负=正

例如:2+2,可以理解为2向右再移动两格,那么就到了-4

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

计算机判断溢出有3种方式:

1.采用一位符号位,设A的符号为(被加数正负号),B的号为(加数的正负号),运算结果的符号为(运算结果的正负号),则溢出逻辑表达式为

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

若V=0,表示无溢出;

若V=1,表示有溢出。

也就是:

:如果正(1)+正(1)=负(0)

:如果负(0)+负(0)=正(1)

都表示溢出

例如

[A+C]补=0,0001111+0,1111100=1,0001011

被加数符号为0,加数符号为1,运算结果的符号1,得到V=1,表示有溢出

2.采用一位符号位,根据数据位进位情况判断溢出符号位的进位Cs,最高数值位的进位C1

若符号位进位Cs=0,C1=1,表示发生上溢

若符号位进位Cs=1,C1=0,表示发生下溢

即Cs与C1不同时有溢出,所以可以用异或表示:Cs  C1=1表示不同,=0表示相同

Cs与C1的含义如下图所示: 

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

3.采用双符号位,正数符号为00,负数符号为11

[A+C]补=00,0001111+00,1111100 =01,0001011        上溢

[B-C]补=11,1101000+11,0000100 =10,1101100       下溢

记两个符号位为S1S2,则V=S1S2,若V=0,表示无溢出;若V=1,表示有溢出。

第一个符号位表示正确的正负性,第二个符号位表示实际的符号结果

例如,01,0表示正确符号位应该为正,实际却得到了1(负数),发生上溢

实际存储时,只会存储1个符号位,再运算前会复制一个符号位,运算时两个符号位会同时参与运算。 所以采用双符号位并不会增加存储空间。

注:双符号位补码又称:模4补码,单符号位补码又称:模2补码

01,0001011,如果我们将,看作 . 即01.0001011,那么0()1().0001011 

模4就是相当于将位权小于4的部分保留,将大于4的部分舍弃,模2同理

(3)符号扩展

对于正整数,由于原,反,补码都是一样的,所以

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

对于负整数:

反码:在原码的基础上数值位补1

补码:在原码中找到最右边的1,将其左边的数值位全部取反

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

对于正小数,原,反,补码的表示都一样

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

对于负小数:
反码:在原码的基础上后半部分补1

补码:在原码的基础上,找到最右边的1,左半部取反,右半部分不变

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

由于原码的加减运算用电路实现比较复杂,所以通常用补码进行加减运算

2.加法器原理

Cin表示来自低位的进位,Cout表示来自最高位的进位

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

A=1000,B=0111,Cin=0,那么算式就为

1 0 0 0

0 1 1 1

+       0

----------

1 1 1 1

所以F=1111,因为最高位没有进位,所以Cout=0

A=1000,B=0111,Cin=1,那么算式就为

   1 0 0 0

   0 1 1 1

   +       1
  ----------

1 0 0 0 0

所以F=0000,Cout=1

若想实现8bit加法器,那么可以将两个加法器串联起来,高位的Cin能接收来自地位的Cout

3.加法器实现补码的加减运算

首先看一下补码加减运算的方法:

补码X+Y:按位相加即可

补码X-Y将补码Y全部按位取反,末位+1,得到[-Y]补,即X+[-Y]补,减法/变加法

这里可以这样理解,Y的最高位取反得到-Y,再将除最高位的其他位取反+1,得到[-Y]补

也就是将补码Y全部按位取反,末位+1

例如:

4bit补码,X=-8,Y=7,X补=1000,Y补=0111

对于4bit有符号的补码,有效范围是~= -8~7

X+Y=1111B

X-Y=1000+(1000+1)=10001=1D,运算结果只保留低四位,最高位进位丢弃(发生溢出),此时的运算结果是错误的

4bit补码,X=3,Y=4。X补=0011, Y补=0100

X+Y=0111B=7D

X-Y=0011+(1011+1) = 1111B=-1D

接下来看用加法器实现补码的加减运算:

Sub加/减控制信号:如果为加法则控制信号为0,如果为减法控制信号为1

当为加法时,控制信号为0,Cin=0,所以得到 X+Y+Cin=X+Y

当为减法时,控制信号为1,Cin=1,所以得到 X+Y+Ciin=X+(Y全部按位取反)+1

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

注:无符号整数的加/减法也可用该电路实现,且实现方法与有符号加减法一样,例如:

无符号数X=8,Y=7,用4bit表示,X=1000B,Y=0111B

X+Y=1111B=15D(十进制)

X-Y=1000+(1000+1)=10001=1D,运算结果只保留低4位,最高位进位丢弃,这个结果是正确的

对比一下有符号数:4bit补码,X=-8,Y=7,X补=1000, Y补=0111

X+Y=1111B=-1D

X-Y=1000+(1000+1)=10001=1D,这个运算结果是错误的

所以补码加减运算与无符号数加减运算都可以使用同一个电路使用,但是两者判断溢出的条件有所不同,这就需要标志位来区分

从下图可以看出,两个nbit的数相加,除了得到sum以外,还可以输出4个标志信息:OF,SF,ZF,CF

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

OF(Overflow Flag)溢出标志。溢出时为1,否则置0

注:OF只在有符号的加减运算中有意义,也就是说在无符号数的加/减运算中,即使OF=1,也不能说明发生了溢出

OF的计算方法:OF=最高位产生的进位次高位产生的进位

SF(Sign Flag) 符号标志。结果为负时置1,否则置0

计算方法:SF=最高位的本位和

SF同样只对有符号数有意义

ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0

ZF对有符号数,还是无符号数都是有意义的

CF(Carry Flag)进位/借位标志,进位/借位时置1,否则置0

CF=最高位产生的进位sub控制信号

只对无符号数有意义,对有符号数无意义

用加法器实现补码的加/减运算,计算机网络,学习日常(考研向),计算机组成员原理,算法,数据结构

所以:对于有符号数的运算看OF,判断是否发生溢出,对于无符号数的运算看CF,判断是否发生溢出

再来看

无符号数 X=3,Y=4,用4bit表示,X=0011B,Y=0100B

X+Y=0111B=7D

X-Y=0011+(1011+1)=1111B=15D,显然3-4=15是错误的,无符号数无法表示负数-1

 对比有符号数,运算结果是正确的:

4bit补码,X=3,Y=4。X补=0011B, Y补=0100B

X+Y=0111B=7D

X-Y=0011+(1011+1) = 1111B=-1D

所以我们可以看到,虽然同一电路得到的二进制结果相同,但是有符号数的运算结果与无符号数的运算结果是有所不同的。文章来源地址https://www.toymoban.com/news/detail-800970.html

到了这里,关于用加法器实现补码的加/减运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 头歌计算机组成原理实验—运算器设计(4)第4关:16位快速加法器设计

    实验目的 帮助学生理解成组进位产生函数,成组进位传递函数的概念,熟悉 Logisim 平台子电路的概念,能利用前述实验封装好的4位先行进位子电路以及4位快速加法器子电路构建16位、32位、64位快速加法器,并能利用相关知识分析对应电路的时间延迟,理解电路并行的概念。

    2024年02月05日
    浏览(135)
  • 数字IC经典电路(1)——经典加法器的实现(加法器简介及Verilog实现)

    加法器是数字系统最基础的计算单元,用来产生两个数的和,加法器是以二进制作运算。负数可用二的补数来表示,减法器也是加法器,乘法器可以由加法器和移位器实现。加法器和乘法器由于会频繁使用,因此加法器的速度也影响着整个系统的计算速度。对加法器的设计也

    2024年02月14日
    浏览(54)
  • Verilog实现超前进位加法器

    在CPU等对性能要求较高的电路中,一般都会采用超前进位加法器,因为超前进位加法器的延时相对来说比较小。下面讲述超前进位加法器的原理: 我们知道,一个三输入,二输出的全加器,其逻辑关系为 S = A ⊕ B ⊕ C i n S=Aoplus Boplus C_{in} S = A ⊕ B ⊕ C in ​ C o u t = ( A B ) ∣

    2023年04月08日
    浏览(40)
  • 使用FPGA实现逐级进位加法器

    逐级进位加法器就是将上一位的输出作为下一位的进位输入,依次这样相加。下面以一个8位逐级进位加法器给大家展示。 我增加了电路结构,应该很容易理解吧。 下面我也列举了一位加法器,可以看下。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity adder1 is

    2024年04月23日
    浏览(34)
  • 用逻辑门实现四位加法器

    一.无符号数全加器 1.无符号数四位全加器原理: 先来看一位全加器: 加数A 加数B 结果 0 0 0 0 1 1 1 0 1 1 1 0(进位1) 与 异或门 相似,用异或门记录 用与门记录A+B的进位 将进位输入与A+B结果相与再与进位相或得进位输出,将进位输入与加数相加计算结果 四位全加器则将低位

    2024年01月19日
    浏览(41)
  • 各种加法器的比对分析与Verilog实现(2)

          本文将介绍Kogge-Stone加法器和brent-kung加法器的原理,在下一篇博客中我将用Verilog进行实现。 目录 1. 并行前缀加法器(Parallel-Prefix Adder, PPA)  2. Kogge-Stone加法器原理 3. brent-kung加法器原理        为了减少AND门的深度,PPA对CLA进行了进一步优化。不过PPA和CLA进行的计算

    2024年02月07日
    浏览(55)
  • 各种加法器的比对分析与Verilog实现(1)

            接下来几篇博客,我将介绍常见的几种加法器设计,包括超前进位、Kogge-Stone、brent-kung、carry-skip、Conditional-Sum等加法器的原理及Verilog实现。        本文将介绍行波进位加法器、超前进位加法器的原理及Verilog实现。 1.1 原理        从下方原理图即可看出,

    2024年02月08日
    浏览(47)
  • verilog数组的定义、转换和加法器的实现

    看了别人的博客有的人也称reg [31:0] add0[0:12]这样的数组为二维数组,其实中二维数组不是真正意义上的数组,而是由多个寄存器组成的ROM或者RAM。我觉得这样理解好记一点:这个是一维数组,一共有0到12共13组数据,每组数据的宽度是0到31一共32个位宽。 优势:简单易于编程

    2024年02月11日
    浏览(44)
  • FPGA学习笔记(1):使用Verilog实现常见的加法器

    本文使用VerilogHDL实现一些简单的加法器,本人水平有限,希望大佬能够多指证 Quartus Prime(18.0) Modelsim 半加器可以用于计算两个单比特二进制数的和,C表征进位输出,S表述计算的结果。 半加器的真值表 化简以后的逻辑表达式可以表达为: s = a’b+ab’ c = ab Verilog 代码块 全加

    2024年02月09日
    浏览(47)
  • 加法器、半加器、全加器、超前进位加法器

    简单来讲,半加器不考虑低位进位来的 进位值 ,只有两个输入,两个输出。由一个与门和异或门构成. 真值表: 输入 输出 A B C S 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 半加器不考虑低位向本位的[进位],因此它不属于[时序逻辑电路],有两个输入端和两个输出。 设加数(输入端)为A、B

    2024年02月02日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包