计算机组成原理:定点数运算及溢出检测

您所在的位置:网站首页 定点数有哪两种表示方法 计算机组成原理:定点数运算及溢出检测

计算机组成原理:定点数运算及溢出检测

2024-07-16 21:50| 来源: 网络整理| 查看: 265

定点数运算及溢出检测 1.定点数加法运算2.定点数减法运算3.溢出的概念及判断方法1)溢出的概念2)溢出的检测方法方法一:对操作数和运算结果的符号位进行检测方法二:对最高数据位进位和符号进位进行检测方法三:用变形补码溢出判断的软件方法 4.无符号数运算的溢出判断

1.定点数加法运算

[X]补 + [Y]补 = [X + Y]补 mod 2n+1

算法理解 例 1 已知X = +10010, Y = -10101 ,求X + Y

解: [X]补=010010 ,[Y]补=101011    [X+Y]补=010010+101011       =111101 所以:X+Y= -00011

2.定点数减法运算

[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补

算法理解 例2 已知[Y]补=10011 ,求[-Y]补

解: [Y]补 =10010    ∵ \because ∵ Y=-1101  -Y=1101    ∴ \therefore ∴ [-Y]补=01101

对比 [Y]补 =10011 可知:通过又向左扫描[Y]补,在遇到数字1及之前,直接输出遇到的数字,遇到1之后,取反输出,即可得到[-Y]补,反之亦然!

例3 已知 X= +10101,Y= +10010,求X-Y 解: [X]补=010101,[Y]补=010010,[-Y]补=101110    [X-Y]补= [X]补+[-Y]补= 010101+101110       =l 000011 ∴ \therefore ∴ X-Y= +00011

3.溢出的概念及判断方法 1)溢出的概念

  运算结果超出了某种数据类型的表示范围。

  例4 已知 X= +10010,Y= +10101,求X+Y   解: [X]补=010010  [Y]补=010101     [X+Y]补= [X]补+[Y]补= 010010+010101         =100111      ∴ \therefore ∴ X+Y= -11001     两个正数之和为负数!   例5 已知X= -10010,Y= -10101,求X+Y

  解: [ X ] 补 = 101110 [ Y ] 补 = 101011      [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 = 101110 + 101011   = 1   010001     ∴   X + Y =   + 010001     两 个 负 数 之 和 为 正 数 [X]_补=101110\quad[Y]_补=101011\newline\qquad\quad\ \ \,[X+Y]_补=[X]_补+[Y]_补=101110+101011\newline\qquad\qquad\qquad\qquad\ ={\color{red}{1}}\ 010001\newline\ \newline\qquad\quad\ \therefore\ X+Y=\ +010001\newline\ \newline\qquad\quad\ {\color{red}{两个负数之和为正数}} [X]补​=101110[Y]补​=101011  [X+Y]补​=[X]补​+[Y]补​=101110+101011 =1 010001  ∴ X+Y= +010001  两个负数之和为正数

2)溢出的检测方法

  溢出只可能发生在同符号数相加时,包括[X]补与[Y]补;[X]补与   [-Y]补同号;

方法一:对操作数和运算结果的符号位进行检测

当结果的符号位与操作数的符号不相同时就表明发生了溢出(设X0,Y0为参加运算数的符号位,S0为结果的符号位) V = X 0   Y 0   S ‾ + X 0 ‾   Y 0 ‾   S V=X_0\ Y_0\ \overline{S}+\overline{X_0}\ \overline{Y_0}\ S V=X0​ Y0​ S+X0​​ Y0​​ S

当 V=1 时,运算结果溢出,根据该逻辑表达式,容易画出相应电路。

方法二:对最高数据位进位和符号进位进行检测

设运算时最高数据位产生的进位为C0, 溢出检测电路为: V = C 0   ⨁   C 1 V=C_0\ {\bigoplus}\ C_1 V=C0​ ⨁ C1​

0. X 1 + 0. Y 1 0.X_1 + 0.Y_1 0.X1​+0.Y1​: 此时 C0=0,若C1=1则改变了结果符号位,发生了溢出。 1. X 1 + 1. Y 1 1.X_1+1.Y_1 1.X1​+1.Y1​:此时 C0=1,若C1=0则改变了结果符号位,发生溢出。

方法三:用变形补码

[ X ] 补 = X f 1 X f 2 X 1 X 2 X 3 . . . X n m o d 2 n + 2 [X]_补=X_{f1}X_{f2}X_1X_2X_3...X_n\qquad mod\quad 2^{n+2} [X]补​=Xf1​Xf2​X1​X2​X3​...Xn​mod2n+2 溢出的判断: V = X f 1   ⨁   X f 2 V=X_{f1}\ {\bigoplus}\ X_{f2} V=Xf1​ ⨁ Xf2​

例6 已 知 X =   10010 , Y =   − 10101 , 求 X + Y 解 : [ X ] 补 = 1101110 [ Y ] 补 = 1101011   [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 = 1101110 + 1101011 = 1   10   1001     V = 1   ⨁   0 = 1   故 发 生 溢 出 ! 已知X=\ 10010,\quad Y=\ -10101,\quad 求X+Y\newline 解:[X]_补=1101110\quad[Y]_补=1101011\newline\ [X+Y]_补=[X]_补+[Y]_补=1101110+1101011\newline ={\color{blue}{1}}\ {\color{red}{10}}\ 1001\newline\ \newline\ V=1\ {\bigoplus}\ 0=1\ 故发生溢出! 已知X= 10010,Y= −10101,求X+Y解:[X]补​=1101110[Y]补​=1101011 [X+Y]补​=[X]补​+[Y]补​=1101110+1101011=1 10 1001  V=1 ⨁ 0=1 故发生溢出! 上述三种方法可基于逻辑表达式画出相应电路,在后面的运算部分,还将具体讲解。

溢出判断的软件方法 int tadd_ok(int x,int y){ int sum = x + y; int net_over = x =0; int pos_over = x > 0 && sum


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3