【计算机组成原理】运算方法和运算器

在这里插入图片描述

真值和机器数的互换

[原码,补码,反码,移码]

  • 原码:符号位+绝对值的二进制。
  • 补码:正数:补码等于原码;负数:除符号位外,各位取反末位加1
  • 反码:正数:反码等于原码;负数:除符号位外,各位取反
  • 移码:补码符号位取反
  • 8421BCD码:每四位二进制表示一位十进制数,范围是[0,9]。
  • 余三码:8421的基础上加3.
    8421BCD码和余三码一般用于表示字符串,不用于计算

校验码

数据再计算机传输过程中会出现错误,错误会引起歧义,所以需要校验码。
码距是指两个码组对应位上数字的不同位数称为码组的距离,又称为汉明距离。码距为1时不具备校验能力。
通信双方的大工程某种共识:校验方法、校验位数、校验位置
1.奇偶校验码
以奇校验码为例:
最高位为校验位,最高位补0或1是校验码中1的个数为奇数。

数据:01010101
发送方:奇校验  1 010101011的个数右奇数个)
接收方:
没错:101010101----01010101(去掉校验位)
1位错:11 1101010120 010101011的个数为偶数了,可以检验到错误)
2位错: 1 10010101(此时1的个数为奇数,不能检验到错误)

优点:简单,传输效率高
缺点:只能发现错误,不能修改错误;只有当奇数个位数出错时才能被发现。

2.Hamming校验码
发送方:
1、校验位的位数
(1)仅能发现并修正一位错
假设数据位D(d位),校验位R(r位)
2r>=d+r+1
(2)发现修正一位错,并发现两位错
2r-1>=d+r
2.校验位的位置
海明码的下标为2i的位置上,或者海明码最高位
设数据位d=8,推出r=4

H13 H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
R5  D8  D7  D6  D5 R4 D4 D3 D2 R3 D1 R2 R1 

3.校验位的值
(1)确定校验关系:数据位在海明码中的下标=参与校验的校验位的下标和

D1(3=2+1)  R2  R1
D2  (5=4+1)  R3 R1
D3 (6=4+2)  R3  R2
D4  :R3  R2  R1
D5:  R4  R1
D6:R4  R2
D7 :R4  R2  R1
D8:R4 R3  

2)确定校验位的值=它参与校验的数据位的抑或

R1=D1^D2^D4^D5^D7
R2:D1^D3^D4^D6^D7
R3:D2^D3^D4^D8
R4:D5^D6^D7^D8
R5:(D1^...^D8)^(R1^...^R5)

接收方:

S1=R1'^(D1'^D2’^D4’^D5‘^D7’)
S2=R2‘^(D1’^D3‘^D4’^D6‘^D7’)
S3=R3'^(D2‘^D3’^D4‘^D8’)
S4=R4'^(D5‘^D6’^D7‘^D8’)
S5=R5^(D1^...^D8)(R1^...^R5)

(1)没有错误 S5=0 S4S3S2S1=0000
(2)发生一位错
I.D2出错 S5 =1 S4S3S2S1=0101=5->H5,即出错位置在汉明码的下标
II. D5出错 S5 =1 S4S3S2S1=1001
III.校验位R1出错 S5 =1 S4S3S2S1=0001
(3) 发生两位错:
设数据位D1和D3出错:S5 =0 S4S3S2S1=0101

3.CRC 循环冗余校验码
模2运算
(1)模2加减运算—异或运算

eg:1010-1101=1010+1101=1010^1101

(2)模2除法运算:依托模2减法。根据被除数或者余数的最高位决定是否做模2减法,如果最高位1则做模2减法,否则不做减法
生成多项式 G ( x ) = a X 3 + b X 2 + c X + d G(x)=aX^3+bX^2+cX+d G(x)=aX3+bX2+cX+d
生成多项式是一串二进制编码,G。
假设数据位为D(位数为d),G位数为r+1位
发送方:
1.将D左移r位,低位补0,形成d+r位信息位M
2.M模2除G,得到商和r位余数
3.生成CRC编码=M+余数
接收方:
CRC编码模2除G=(M’+余数‘)/G
没有错误:余数为0,M’=M 余数’=余数
(M’+余数‘)/G=(M+余数)/G=M/G+余数/G=商+余数/G+余数/G=商+(余数+余数)/G=商
如果出错:根据余数情况修改或者判断错误

定点数的表示

定点数:小数点固定的数,纯小数或者纯整数
1.N位二进制数原码的表示范围:
整数: [ − 2 n − 1 + 1 , 2 n − 1 − 1 ] [-2^{n-1}+1,2^{n-1}-1] [2n1+1,2n11]
小数: [ − ( 1 − 2 1 − n ) , 1 − 2 1 − n ] [-(1-2^{1-n}),1-2^{1-n}] [(121n),121n]

2.N位二进制数补码的表示范围:
整数: [ − 2 n − 1 , 2 n − 1 − 1 ] [-2^{n-1},2^{n-1}-1] [2n1,2n11]
小数: [ − 1 , 1 − 2 1 − n ] [-1,1-2^{1-n}] [1,121n]

定点数的运算—加减

1.原码加减—不适合做加减运算
(1)判断结果的符号
(2)相加或者用||被减数|-|减数||
(3)结果

2.补码加减
[A+B]补=[A]补+[B]补
[A-B]补=[A]补+[-B]补
优点:直接运算

定点数的运算—溢出的判断

双符号位法:两个符号位同时运算,双符号位不同则溢出,上溢和下溢。
1.逻辑移位:逻辑左移,逻辑右移
移出位移走,补位位补0
eg:1010
左移:0100
右移:0101

2.小循环移位:小循环左移,小循环右移
移出移入到补位位,同时移入到标记为C中
在数字最前和最后分别有一个C位,储存溢出位

    eg:1010
  左移:1  0101
  右移:0101   0

3. 大循环移位:大循环左移,大循环右移
移出位移入到C位,C位移入到补位位

    eg:0 1010
  左移:1 0100
  右移:0101 0

4.算术移位
(1)保留数值的数学意义,左移相当于乘以2,右移相当于除以2
(2)存在溢出或精度丧失
原码:符号位不动,数值位逻辑左右移
补码:带着符号位一起移动
移出位移走。补位位:高位补符号位,地位补零。

5.溢出过半
原码:符号位为0或1,数值位最高位为1
补码:符号位为0,数值最高位为1;符号位为1,数值最高位为0.

浮点数的表示

规则:
1)组成部分、顺序
2)每个组成部分位数
3)尾数和阶码表示形式:
尾数:定点小数
阶码:定点整数

一、IEEE754标准
1.格式:
32位(float)和64位(double)
在这里插入图片描述
2. IEEE有关阶码的规定
(1)用修正过的移码表示
修正过的移码可以表示0和±∞;

float:真值(e)=机器数的值(E)-128
double:真值(e)=机器数的值(E)-1024

(2)有关移码
e = E − 2 n − 1 e=E-2^{n-1} e=E2n1

(3)E位全零或者全1的状态都不用

0:表示数值01:表示+-

所以正式的IEEE754标准:
e = E − ( 2 n − 1 − 1 ) e=E-(2^{n-1}-1) e=E(2n11)

3. IEEE有关尾数的规定
(1)用修正过的原码表示尾数
(2)最高数值位必须为1,并且省略。
这样进一步提高了数据的精度。
(3)什么是规格化的尾数(M)
∣ M ∣ > = 1 / 2 = ( 0.1 ) 2 |M|>=1/2=(0.1)_2 M>=1/2=(0.1)2

因为尾数最高的数值位为1,并且省略。
E:阶码
S:符号位
M:尾数
float: ( − 1 ) s ∗ 1. M ∗ 2 E − 127 (-1)^s*1.M*2^{E-127} (1)s1.M2E127
double: ( − 1 ) s ∗ 1. M ∗ 2 E − 1023 (-1)^s*1.M*2^{E-1023} (1)s1.M2E1023

4. IEEE与真值的相互转换
eg:Float类型413C0000H的真值是多少:

413 C 0000 H = ( 01000001001111000000000000000000 ) 2 413C0000H =(0100 0001 0011 1100 0000 0000 0000 0000)_2 413C0000H=(01000001001111000000000000000000)2

S = 0 ; M = 0111 ; E = 10000010 S=0;M=0111;E=1000 0010 S=0M=0111E=10000010

e = ( − 1 ) s ∗ 1. M ∗ 2 E − 127 e=(-1)^s*1.M*2^{E-127} e=(1)s1.M2E127
= ( − 1 ) 0 ∗ 1.01111 ∗ 2 130 − 127 =(-1)^0*1.01111*2^{130-127} =(1)01.011112130127
= ( 1011.11 ) 2 =(1011.11)_2 =(1011.11)2
= 11.75 =11.75 =11.75

5. Float类型的表示范围
在这里插入图片描述
二、非IEEE754标准

1.有机组成部分
在这里插入图片描述
每部分可以用不同的编码表示,最常见的阶码和尾数都用补码表示。

2. 表示范围
(1)为什么要规格化?
为了进一步提高数据精度
(2)规格化的本质是什么?
∣ 尾 数 ∣ > = 0.5 |尾数|>=0.5 >=0.5

(3)这种本质的体现是什么?
尾数分别用原码和补码表示的时候规格化的尾数是什么形式的?
原码:数值最高位为1
补码:1.0xxxxx或者0.1xxxxx或者1.1xxxxx

(4)IEEE754标准如何做的规划化?
尾数最高的数值位为1,并且省略。

设某浮点数阶码和尾数都用4位二进制补码表示。
在这里插入图片描述

浮点数的运算

一、IEEE754标准的加减运算
(1)0操作数检查
(2)对阶:小阶向大阶对齐,尾数右移
(3)尾数加减:补码双符号位
(4)规格化: 左规;右规

左规:尾数+-不发生溢出,结果不是规格化,左规尾数不定,阶码-1,知道规格化为止;
右规:尾数+-发生溢出,带两个符号位右移移位,阶码+1

(5)舍入,阶码采用补码双符号位运算。0舍1入。
(6)判断溢出
在溢出判断中,什么样的情况才算溢出?
阶码溢出才叫溢出
尾数溢出是否标志着结果的溢出?
尾数溢出不表示结果的溢出

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值