计算机组成原理:定点数运算及溢出检测 |
您所在的位置:网站首页 › 定点数有哪两种表示方法 › 计算机组成原理:定点数运算及溢出检测 |
定点数运算及溢出检测
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]补=Xf1Xf2X1X2X3...Xnmod2n+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 |