【计算机组成原理】第2章 运算方法和运算器
来源:互联网 发布:数据分析属经济学吗 编辑:程序博客网 时间:2024/05/18 02:26
2.1 数据与文字的表示方法
2.1.1 数据样式
在选择计算机的表示方法时,要考虑
1. 数的类型(小数,整数,实数和复数)
2. 数值范围
3. 数值精确度
4. 数据存储和处理所需的硬件代价
计算机中常用的数据表示格式:1. 定点格式;2. 浮点格式
定点格式:数据范围有限,要求的处理硬件比较简单
浮点格式:数据范围较大,要求的处理硬件比较复杂
1.定点数的表示方法:
参与运算的数的小数点位置固定不变。
纯小数:
小数点在
小数点固定在最高位之后称为定点小数。若机器字长为n+1位,数值表示为:
例如:1111表示-0.875
绝对值最小:各位均为0,
绝对值最大:各位均为1,
纯整数:
小数点在X0右边。
绝对值最小:各位均为0,
绝对值最大:各位均为1,
PS:
0.1111111 = 1.0000000 - 0.0000001 = 1 -
0 1111111 = 1 0000000 - 1 =
2.浮点数的表示方法:
- 任意十进制
N 可以写成N=10E.M - 任意二进制
N 可以写成N=2e.M
-M 为浮点数的尾数,是一个纯小数
-e 是比例因子的指数,称为浮点数的指数,是一个整数
IEEE754标准
-
-
指数真值变成阶码
当尾数的值不为0时,尾数域的最高位应为1,这称为浮点数的规格化表示。否则以修改阶码的同时左右移动小数点位置的方法,使其变成规格化数形式。
32位浮点数x的真值表示:
其中尾数域所表示的值是
例1:(754标准转化10进制)
若浮点数x的754标准存储格式为
将16进制转化成二进制:
指数 e = 阶码 - 127=10000010 - 00000011 =
包括隐藏位1的尾数
例2:(10进制转化754标准)
将数
1.转化成二进制:20.59375=10100.10011
2.规格化表示:10100.10011=1.010010011
3.得符号位S=0,阶码E=4+127=131=10000011,M=010010011
解得:
3.十进制数串的表示方法:
1). 字符串形式:即一个字节存放一个十进制的数位或符号位。主要用于非数值计算的应用领域中。
2). 压缩的十进制数串形式:即一个字节存放两个十进制的数位。节约空间,便于直接完成十进制数的算术运算,是广泛采用的较为理想的方法。每个数位占用半个字节(即4个二进制为)
2.1.2 数的机器码表示
把符号位和数值位一起来编码来表示相应数的各种表示方法,如原码,补码,反码,移码。
一般书写表示的数称为真值,机器中这些编码表示的数,称为机器码或者机器数。
1. 原码表示法
若定点整数的原码形式为
其实就是正数&&0的真值保持不变,真值为负数的原码在最左边(
例:
x=−1001 , 则原码[x]原=11001<=24−(−x)
2.反码表示法
简单:
正数的反码就是原码.
负数的反码就是原码的符号位不变,然后其余位上全部取反(0->1/1->0).
3. 补码表示法
补码和真值的关系:
设一个二进制整数补码有
[x]补=xn.xn−1 ... x1 x0
1.当
x=∑n−1i=02ixi=0xn−1 ... x1 x0
2.当
x=−2nxn+∑n−1i=02ixi=1xn−1 ... x1 x0
3.当
[x]补=[+0]补=[−0]补=0
则其补码表示的真值为[推荐补码记个公式]
x=−2nxn+∑n−1i=02ixi
例一:
已知
[x]补=01001 ,求x=
x=0×24+1×23+0×22+0×21+1×20=9
例二:
已知
[x]补=11001 ,求x=
x=−1×24+1×23+0×22+0×21+1×20=−7
原码转补码:
1.一个正整数,都一样
2.一个负整数,1)原码符号位不变,整数的每一位二进制求反得到反码。2)反码符号位不变,反码最低位+1,得到补码。
So, 正数的原、反、补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0。
4. 移码表示法
移码通常用于表示浮点数的阶码。
由于阶码是个k的整数,假定定点整数移码形式为
[e]移 = 2k + e
[e]移为机器数,e为真值,2k是一个固定的偏移值常数
举例:
阶码数值部分是5,以
e 表示真值,则[e]移 = 25 + e
So:当正数
e=+10101 ,时,[e]移=1,10101 ;
当负数e=−10101 ,时,[e]移= 25 + e=25 − 1,10101=0,01011 ;
搞到这里真的要亲切愉快地说一下,原码,反码,补码,移码的基本姿势,讲完惹!!!
现在来讨论一下,对于机器字长为
1.原码:
很简单啊,
最大值,正数的话全是1(除了符号位):
最小值,还是全是1然后添个负号呗:
2.反码:
正数的原码和反码一样:
负数还是类似与原码:
3.补码:
还记得补码和真值的关系嘛?
就是符号位是减(
那么显然的:
正数的话,符号位不要减,其他都加了:
负数的话,符号位要减,其他都不要加:
IEEE754标准:
32位浮点数x的真值表示:
x=(−1)S×(1.M)×2 E−127 ;
e+127=E .
例【9】:
假设由S,E,M三个域组成的一个32位二进制数所表示的非零规格化浮点数x,真值表示为(注意此例不是IEEE格式 见上)
x=(−1)S×(1.M)×2 E−128 ;S 符号位E 阶码0 00 000 000 000 0000 0000 0000 0000 0000 M 尾数1.最大正数:M大,E大,符号位0
0 11 111 111 111 1111 1111 1111 1111 1111
x=(−1)0×(1+(1−223))×2 127 ;
同理,最小正数,最大负数,最小负数。
2.1.3 字符与字符串的表示方法
字符信息用数据表示,称为符号数据。
国际版为IRA码,美国版称为ASCII码。
打印机设备可以打印95个字符;另外33个字符被用作操作码,控制计算机某些外围设备的工作特性和某些计算机软件的运行情况。
2.1.4 汉字的表示方法
汉字的输入编码
- 数字编码
常用的国际区位码。实际上把汉字表示成一个二维数组。区码和位码各两位十进制数字。- 拼音码
以汉语拼音为基础的输入方法。- 字形码
字形编码是汉字的形状来进行的编码。
2.1.4 校验码
数据位中1的个数有偶数个,偶校验C为0;奇数个,奇校验C为0。
2.2 定点加法,减法运算
2.2.1补码加法
公式:
[x]指机器码
[x]补+[y]补=[x+y]补
证明略.
例子
例1.
x=+1011,y=−0101,求x+y
[x]补=0,1011
[y]补=1,1011
[x+y]补=10,0110
x+y=+0110
注意:①:符号位要作为数参与运算;②:超过符号位2n+1 的位要丢掉
2.2.2补码减法
公式:
[x]指机器码
[x]补−[y]补=[x−y]补=[x]补+[−y]补
证明略.
例子
例1.
x=+1101,y=+0110,求x−y.
[x]补=0,1101
[−y]补=1,1010
[x+y]补=10,0111
x−y=+0111
补:书上有特别指出知道[x]补 求[−x]补 【黑人问号???】
这不是很简单啊,如果这个x是负数,哈哈,直接去掉负号就好了,负数变成了正数,正数的补码就是原码不变;OK,正数,那我还不是要做一下负数的补码,为什么要给我再来一种方法,我不要!
2.2.3溢出概念与检测方法
引例1:
正数+正数=负数显然错了!—->正溢。
引例2:
负数+负数=正数显然错了!—->负溢。
为了判断是否溢出,第一种方法双符号位法:
注意:
①:两个符号位都要加入运算
②:超过两个符号位(
IMPORTANT!!!
1.任意正数,两个符号位为”0”
2.任意负数,两个符号位为”1”
MORE IMPORTANT!!!
“01”,表正溢出
“10”,表负溢出
再度使用引例:
引例1:
—->正溢。
引例2:
—->负溢。
第二种方法:单符号位法。
①:当最高有效位产生进位而符号位无进位时,产生正溢。
②:当最高有效位无进位而符号位有进位时,产生负溢。
逻辑表达式可以用异或门实现。
2.5 定点运算器的组成
计算机最基本的结构:算术/逻辑运算单元、数据缓冲寄存器、通用寄存器、多路转换器和数据总线等逻辑部件。
2.5.1 逻辑运算
逻辑非运算
逻辑非也称求反。
0->1,1->0.
逻辑加运算
逻辑加又称逻辑或。常用记号”+”.
有”1”则”1”。
逻辑乘运算
逻辑乘又称逻辑乘。常用记号”·”.
两个都为1为1.
逻辑异运算
逻辑异又称按位加。常用记号”
不同为1.
2.5.2 多功能算术/逻辑运算单元(ALU)
串行进位
Cn+1=Y0+X0Cn
Cn+2=Y1+X1Cn+1
Cn+3=Y2+X2Cn+2
Cn+4=Y3+X3Cn+3 并行进位
Cn+1=Y0+X0Cn
Cn+2=Y1+Y0X1+X0X1Cn
Cn+3=Y2+X2Y1+X2Y0X1+X2X0X1Cn
Cn+4=Y3+X3Y2+X3X2Y1+X3X2Y0X1+X3X2X0X1Cn
(算术逻辑运算单元)ALU 组内先行进位
(先行进位发生器) CLA 组件行波进位
2.5.3 内部总线
单总线结构的运算器
1.在同一时间内,只能有一个操作数放在总线上,所以数据可以在任何连个寄存器之间,或者在任一一个寄存器和ALU之间传送。
2.只有在对全部都是CPU寄存器中的两个操作数进行操作时,单总线结构的运算器才会造成一定的损失。例如,在一个输入数是从存储器来的,且运算结果又送回存储器,那么限制数据传送的主要因素时存储器访问时间。
双总线结构的运算器
1.两个操作数同时加到ALU进行运算,只需要一次操作控制。
2.ALU的输出不能直接加到总线上去。因为形成操作结果的输出时,两条总线都被输入数占据,因而必须在ALU输出端设置数据缓冲寄存器。
三总线结构的运算器
1.ALU的输入输出端都有总线相连。
2.操作时间快。
2.5.4 定点运算器的基本结构
2.6 浮点运算和浮点运算器
补一个姿势–十进制分数/小数转二进制:
例:
9/16=0.5625
0.5625重复乘以2,并且每次取个位,则
0.5625*2=1.125 取整数部分1(最高位) 小数部分0.125
0.125*2=0.25 整数部分是0 小数部分0.25
0.25*2=0.5 整数部分是0 小数部分0.5
0.5*2=1 整数部分是1(最低位) 小数部分是0
则0.5625对应的二进制数为0.1001【除不尽考虑有效位数限制】
2.6.1 浮点加法,减法运算
直接举个例题
设
x=0.510,y=−0.437510 ,假设尾数有效位为4位,用二进制形式求(x+y)浮 .
解:
首先:先化成二进制,要求化成1.M×10k 形式
x=0.510=1.0002× 2−1
y=−0.437510=−1.1102× 2−2
第一步:小阶对大阶(这里是y 的阶比x 的小
y=−0.437510=−1.1102× 2−2=−0.1112×2−1
第二步: 尾数相加
x+y=1.0002× 2−1+(−0.1112×2−1)=0.0012×2−1
第三步:规格化
x+y=0.0012×2−1=1.0002× 2−4
第四步:检查上溢或下溢
−126≤−4≤127 ,求和结果既无上溢也无下溢
第五步:舍入操作
此时尾数有效位正好是4位,舍入时无需做任何改变
2.6.2 浮点乘法,除法运算
想不到的是这个比浮点加法,减法简单。
直接举个例题
设有浮点数
x=0.510,y=−0.437510 ,用二进制求(x+y)浮 。
首先把十进制化成二进制
x=0.510=1.0002× 2−1
y=−0.437510=−1.1102× 2−2
第一步:将x 和y 的指数部分相加:
ex+ey=−1+(−2)=−3
第二步:尾数相乘
1.000×1.110 (模拟一下乘法
得1110000
得到乘积为1.1100002×2−3
由于只需要4位有效数,所以最终修正结果:1.1102×2−3
第三步:规格化与溢出检查
−126≤−3≤127 ,求和结果既无上溢也无下溢
第四步:确定积符号,为负号,得(x+y)浮=−1.1102×2−3
- 【计算机组成原理】第2章 运算方法和运算器
- 计算机组成原理:运算方法和运算器
- 计算机组成复习——运算方法与运算器
- 计算机组成原理运算器的编程实现
- 运算方法和运算器
- 运算方法和运算器
- 计算机组成原理(第六章:计算机的运算方法)
- 第二章 运算方法和运算器
- 计算机组成原理实验二:四位补码运算器
- 第二章 运算方法和运算器笔记简记
- 计算机组成原理 第1章 概论
- 【计算机组成原理】第5章 中央处理器
- 【计算机组成原理】第4章 指令系统
- 计算机组成原理 运算方法:定点数加减
- 计算机组成和原理
- 计算机组成原理--运算速度表示和进制表示
- 运算方法与运算器
- 854计算机基础——《计算机组成原理》考点汇总(五) 计算机的运算方法
- css分辨率识别,移动端固定图片大小
- R语言基础
- android studio删除jar包后报错
- 卷积神经网络原理
- 第三周(2) app详细页面设计与代码编写
- 【计算机组成原理】第2章 运算方法和运算器
- matlab机器学习库
- MATLAB 牛顿插值函数
- Java实现常用算法
- 【MyBatis】MyBatis的学习笔记之<select>标签
- S5PV210系列 (裸机十七)之 LCD显示器
- win7蓝牙驱动的使用方法
- Java面向对象之二继承
- DTD(Document type definition)