您的当前位置:首页正文

2022年考研计算机组成原理_2 数据表示和运算

2024-11-10 来源:个人技术集锦

https://gitee.com/fakerlove/computer-organization

2. 数据表示和运算

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vA4PJ51Z-1609146095500)(picture/20190109141301451.png)]

2.1 数据与编码

2.1.1 进制转换

2.1.2 校验码

2.2 定点数的表示和运算

2.2.1 表示

  • 寄存器的位数反映无符号数的表示范围

一. 有符号数
  • 真值:带符号的数
  • 机器数:符号数字化的数

1) 原码表示法
  • 整数定义

  • 小数定义

正数的原码符号位为0;数值位为其真值
负数的原码符号位为1;数值位为其真值

  • 原码的特点

2) 补码表示法
  • 整数定义

  • 小数定义

正数的补码符号位为0;数值位为其真值
负数的补码符号位为1;数值位为其真值对应位求反后末位加1

3) 反码表示法
  • 整数定义

  • 小数定义

正数的补码符号位为0;数值位为其真值
负数的补码符号位为1;数值位为其真值对应位求反

三种机器数的小结
  • 最高位符号位,书写上~~用“,”(整数)~~或“.”(小数)将数值部分和符号位隔开

  • 对于正数原码=补码=反码

  • 对于负数符号位为1,其数值部分原码除符号位外每位按位取反末尾加1→补码 不加一→反码

  • 表示范围

tips:[y]补 连同符号在内,每位取反,末位加1,即得[-y]补


二. 数的定点表示和浮点表示
定点表示
  • 定义:小数点按约定方式标出

浮点表示
  • 浮点数的一般形式:N=S×r的j次方

在计算机中,S是小数、可正可负;j是整数、可正可负

  • 表示范围

浮点数的存储格式

浮点数(Floating-point Number)是对实数的一种近似表示,由一个有效数字(即尾数)加上幂数来表示,通常是乘以某个基数的整数次幂得到。以这种表示法表示的数值,称为浮点数。表示方法类似于基数为10的科学计数法。利用浮点进行运算,称为浮点计算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。

计算机对浮点数的表示规范遵循电气和电子工程师协会(IEEE)推出的 IEEE754 标准,浮点数在 C/C++ 中对应 float 和 double 类型,我们有必要知道浮点数在计算机中实际存储的内容。

IEEE754 标准中规定 float 单精度浮点数在机器中表示用 1 位表示数字的符号,用 8 位表示指数,用 23 位表示尾数,即小数部分。对于 double 双精度浮点数,用 1 位表示符号,用 11 位表示指数,52 位表示尾数,其中指数域称为阶码。IEEE754 浮点数的格式如下图所示。

注意,IEE754 规定浮点数阶码 E 采用"指数e的移码-1"来表示,请记住这一点。为什么指数移码要减去 1,这是 IEEE754 对阶码的特殊要求,以满足特殊情况,比如对正无穷的表示。

移码

移码(又叫增码)是对真值补码的符号位取反,一般用作浮点数的阶码,引入的目的是便于浮点数运算时的对阶操作。

对于定点整数,计算机一般采用补码的来存储。正整数的符号位为 0,反码和补码等同于原码。负整数符号位为1,原码、反码和补码的表示都不相同,由原码变成反码和补码有如下规则:
(1)原码符号位为1不变,整数的每一位二进制数位求反得反码;
(2)反码符号位为1不变,反码数值位最低位加1得补码。

比如,以一个字节 8bits 来表示 -3,那么[ − 3 ] 原 = 10000011 [-3]_原=10000011[−3]原=10000011,[ − 3 ] 反 = 11111100 [-3]_反=11111100[−3]反=11111100,[ − 3 ] 补 = 11111101 [-3]_补=11111101[−3]补=11111101,那么 -3 的移码就是[ − 3 ] 移 = 01111101 [-3]_移=01111101[−3]移=01111101。

如何将移码转换为真值 -3 呢?先将移码转换为补码,再求值。

浮点数的规格化

若不对浮点数的表示作出明确的规定,同一个浮点数的表示就不是唯一的。例如( 1.75 ) 10 (1.75)_{10}(1.75)10可以表示成1.11 × 2 0 1.11\times 2^01.11×20,0.111 × 2 1 0.111\times2^10.111×21,0.0111 × 2 2 0.0111\times2^20.0111×22等多种形式。当尾数不为0时,尾数域的最高有效位为1,这称为浮点数的规格化。否则,以修改阶码同时左右移动小数点位置的办法,使其成为规格化数的形式。

单精度浮点数真值

IEEE754 标准中,一个规格化的 32 位浮点数 x 的真值表示为:
x = ( − 1 ) S × ( 1. M ) × 2 e x=(-1)S\times(1.M)\times2ex=(−1)S×(1.M)×2e
e = E − 127 e=E-127e=E−127
其中尾数域值是1.M。因为规格化的浮点数的尾数域最左位总是1,故这一位不予存储,而认为隐藏在小数点的左边。

在计算指数 e 时,对阶码E的计算采用原码的计算方式,因此 32 位浮点数的 8bits 的阶码 E 的取值范围是 0 到 255。其中当E为全 0 或者全 1 时,是 IEEE754 规定的特殊情况,下文会另外说明。

双精度浮点数真值

64 位的浮点数中符号为 1 位,阶码域为 11 位,尾数域为 52 位,指数偏移值是 1023。因此规格化的 64 位浮点数 x 的真值是:
x = ( − 1 ) S × ( 1. M ) × 2 e x=(-1)S\times(1.M)\times2ex=(−1)S×(1.M)×2e
e = E − 1023 e=E-1023e=E−1023

  • float单精度浮点数(4个字节,32位)在机器中表示:用1位表示数字的符号(正负号),8位表示指数,23位表示尾数(即小数部分)
  • double双精度浮点数(8个字节,64位):1位表示符号(正负号),11位表示指数,52位表示尾数

浮点数阶码E用**“指数e的移码-1”表示,还可以用阶码E的移码(特殊的移码)+阶码E的真值(即指数)**表示。

阶码的移码:假设阶码用8个二进制位表示,则该阶码的移码为 2(n-1) ,但注意这里的移码是特殊的移码,仅偏移2(n-1)-1=127

2.2.2 加法运算

2.2.3 补码加减运算

2.2.4 定点数的乘除运算

一. 原码乘法
  • 符号位与数值位分开求,乘积符号由两个数的符号位“异或”形成,而乘积的数值部分则是两个数的绝对值相乘之和。
1. 题目

2) 步骤一
  • 被乘数 x 和乘数 y 均取绝对值参加运算
  • 符号位为$ x_s ⊕ y_s $

3) 步骤二
  • 累加寄存器(ACC)取 n+1 位(包含一位符号位,以便右移,故最终结果中ACC的第一位是符号位),初始化为0
  • 乘商寄存器(MQ)取 n 位(不含符号位),初始化为 |y| 的数值部分

4) 步骤三
  • 从乘数的最低位开始判断,若 =1,则部分积加上被乘数|x|,然后右移一位;若=0,则部分积加上0,然后右移一位,由于是无符号数,故移位采用逻辑右移
  • 重复以上步骤,判断N次。

5) 步骤四
  • ACC中的第25位和MQ中的第14位为乘积的数值部分

由步骤1可知,符号为 -,故乘积为 -0.10001111

二. 补位乘法介绍
1) 题目

2) 步骤一
  • 符号位参与运算,运算的数均以补码表示,被乘数 x 取双符号位,乘数 y 取单符号位
  • 计算被乘数 x 的负数的补码

3) 步骤二
  • 累加寄存器(ACC)取 n+2 位(取双符号位,以便进行溢出检查,故最终结果中ACC的前两位是符号位),对应 [x]补 和 [-x]补 ,初始化为0
  • 乘商寄存器(MQ)初始化为 [y]补(取单符号位),末尾增设附加位(数值为0),共n+2位

4) 步骤三
  • 根据y的次低位和最低位的取值确定操作(如下表),由于是有符号数,故移位采用补码的算术右移
  • 重复上述步骤,判断N+1次,但第N+1次不再移位(共进行N+1次累加和N次右移)

5) 步骤四

ACC和MQ的前10位为乘积(前2位为符号),故|XY|补=11.01110001,XY=-0.10001111

题目

设 机 器 字 长 为 5 , x = − 0.1101 , y = 0.1011 , 采 用 b o o t h 移 位 原 则 求 x ⋅ y 解 答 [ x ] 补 = 11.0011 , [ − x ] 补 = 00.1101 , [ y ] 补 = 0.1011 乘 数 0.1011 , y 4 为 低 部 分 积 最 后 一 位 , y 5 为 丢 失 位 第 一 位 设机器字长为5,x=-0.1101,y=0.1011 ,采用booth 移位原则求x\cdot y\\ 解答[x]_补=11.0011,[-x]_补=00.1101,[y]_补=0.1011\\ 乘数0.1011 ,y_4为低部分积最后一位,y_5为丢失位第一位 5x=0.1101,y=0.1011,boothxy[x]=11.0011[x]=00.1101[y]=0.10110.1011,y4y5

解答过程
情况说明操作高部分积低部分积(最后一位为y_n)丢失位(第一位为y_n+1)
初 始 值 为 0 初始值为0 0 00.0000 00.0000 00.0000 0.101 1 0.101\textcolor{red}1 0.1011 0 \textcolor{red}0 0 y 4 = 1. y 5 = 0 , 加 [ − x ] 补 , 右 移 y_4=1.y_5=0,加[-x]_补,右移 y4=1.y5=0,[x],
加 [ − x ] 补 加[-x]_补 [x] 00.0000 + 00.1101 00.0000\\ +\\00.1101 00.0000+00.1101 = 00.1101 =00.1101 =00.1101 加法后的结果 0.1011 0.1011 0.1011 0 0 0
右 移 右移 00.0110 00.0110 00.0110 10.10 1 10.10\textcolor{red}1 10.101 右移了 1 0 \textcolor{red}10 10 右移 y 4 = 1 , y 5 = 1 , 右 移 y_4=1,y_5=1,右移 y4=1,y5=1,
右 移 右移 00.0011 00.0011 00.0011 010.1 0 010.1\textcolor{red}0 010.10 右移 1 10 \textcolor{red}110 110 右移了, y 4 = 0 , y 5 = 1 , 加 [ x ] 补 , 右 移 y_4=0,y_5=1,加[x]_补,右移 y4=0,y5=1,[x]
加 [ x ] 补 加[x]_补 [x] 00.0011 + 11.0011 00.0011\\ +\\11.0011 00.0011+11.0011 = 11.0110 =11.0110 =11.0110 加法后的结果 010.10 010.10 010.10 110 110 110
右移 11.1011 11.1011 11.1011 0010. 1 0010.\textcolor{red}1 0010.1 0 110 \textcolor{red}0110 0110 右移了 y 4 = 1 , y 5 = 0 。 加 [ − x ] 补 , 右 移 y_4=1,y_5=0。加[-x]_补,右移 y4=1,y5=0[x]
加 [ − x ] 补 加[-x]_补 [x] 11.1011 + 00.1101 11.1011\\ +\\ 00.1101 11.1011+00.1101 00.1000 00.1000 00.1000 0010.1 0010.1 0010.1 0110 0110 0110
区别

三. 除法

2.2.5 溢出概念的判别方法

2.3 浮点数的表示和运算

2.3.1 表示

2.3.2 浮点数的加减运算

2.4 ALU

Top