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

文章目录

  • 2. 数据表示和运算
    • 2.1 数据与编码
      • 2.1.1 进制转换
      • 2.1.2 校验码
    • 2.2 定点数的表示和运算
      • 2.2.1 表示
        • 一. 有符号数
          • 1) 原码表示法
          • 2) 补码表示法
          • 3) 反码表示法
          • 三种机器数的小结
        • 二. 数的定点表示和浮点表示
          • 定点表示
          • 浮点表示
          • 浮点数的存储格式
          • 移码
          • 浮点数的规格化
            • 单精度浮点数真值
            • 双精度浮点数真值
      • 2.2.2 加法运算
      • 2.2.3 补码加减运算
      • 2.2.4 定点数的乘除运算
        • 一. 原码乘法
          • 1. 题目
          • 2) 步骤一
          • 3) 步骤二
          • 4) 步骤三
          • 5) 步骤四
        • 二. 补位乘法介绍
          • 1) 题目
          • 2) 步骤一
          • 3) 步骤二
          • 4) 步骤三
          • 5) 步骤四
          • 题目
          • 解答过程
        • 区别
        • 三. 除法
      • 2.2.5 溢出概念的判别方法
    • 2.3 浮点数的表示和运算
      • 2.3.1 表示
      • 2.3.2 浮点数的加减运算
    • 2.4 ALU

2. 数据表示和运算

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

2.1 数据与编码

2.1.1 进制转换

2.1.2 校验码

2.2 定点数的表示和运算

2.2.1 表示

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

一. 有符号数

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

没有专门的硬件用于存储小数点,其都是以约定俗成的方式存在

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

  • 小数定义

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

  • 原码的特点

    1. 简单直观
    2. 但是用原码做加法时,会出现以下问题:

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,采用booth移位原则求x⋅y解答[x]补=11.0011,[−x]补=00.1101,[y]补=0.1011乘数0.1011,y4为低部分积最后一位,y5为丢失位第一位设机器字长为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为丢失位第一位 设机器字长为5,x=−0.1101,y=0.1011,采用booth移位原则求x⋅y解答[x]补​=11.0011,[−x]补​=00.1101,[y]补​=0.1011乘数0.1011,y4​为低部分积最后一位,y5​为丢失位第一位

解答过程
情况说明 操作 高部分积 低部分积(最后一位为y_n) 丢失位(第一位为y_n+1)
初始值为0初始值为0初始值为0 00.000000.000000.0000 0.10110.101\textcolor{red}10.1011 0\textcolor{red}00 y4=1.y5=0,加[−x]补,右移y_4=1.y_5=0,加[-x]_补,右移y4​=1.y5​=0,加[−x]补​,右移
加[−x]补加[-x]_补加[−x]补​ 00.0000+00.110100.0000\\ +\\00.110100.0000+00.1101 =00.1101=00.1101=00.1101 加法后的结果 0.10110.10110.1011 000
右移右移右移 00.011000.011000.0110 10.10110.10\textcolor{red}110.101 右移了 10\textcolor{red}1010 右移 y4=1,y5=1,右移y_4=1,y_5=1,右移y4​=1,y5​=1,右移
右移右移右移 00.001100.001100.0011 010.10010.1\textcolor{red}0010.10 右移 110\textcolor{red}110110 右移了, y4=0,y5=1,加[x]补,右移y_4=0,y_5=1,加[x]_补,右移y4​=0,y5​=1,加[x]补​,右移
加[x]补加[x]_补加[x]补​ 00.0011+11.001100.0011\\ +\\11.001100.0011+11.0011 =11.0110=11.0110=11.0110 加法后的结果 010.10010.10010.10 110110110
右移 11.101111.101111.1011 0010.10010.\textcolor{red}10010.1 0110\textcolor{red}01100110 右移了 y4=1,y5=0。加[−x]补,右移y_4=1,y_5=0。加[-x]_补,右移y4​=1,y5​=0。加[−x]补​,右移
加[−x]补加[-x]_补加[−x]补​ 11.1011+00.110111.1011\\ +\\ 00.110111.1011+00.1101 00.100000.100000.1000 0010.10010.10010.1 011001100110

区别

三. 除法

2.2.5 溢出概念的判别方法

2.3 浮点数的表示和运算

2.3.1 表示

2.3.2 浮点数的加减运算

2.4 ALU

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

  1. 2022年考研计算机组成原理_7 输入输出系统

    https://gitee.com/fakerlove/computer-organization 文章目录 7. 输入输出系统 7.1 基本概念 7.1.1 I/O系统演变过程 7.1.2 I/O系 ...

  2. 2022年考研计算机组成原理_6 总线

    https://gitee.com/fakerlove/computer-organization 文章目录 6. 总线 6.1 概述 6.1.1 概念 6.1.2 分类 按功能层次分类 按数据线的多 ...

  3. 2022年考研计算机组成原理_5 中央处理器

    https://gitee.com/fakerlove/computer-organization 文章目录 5. 中央处理器 5.1 CPU 的结构 5.1.1 CPU 功能 5.1.2 CPU的结 ...

  4. 2022年考研计算机组成原理_4 指令系统

    https://gitee.com/fakerlove/computer-organization 文章目录 4. 指令系统 4.1 指令系统的基本概念 4.1.1 指令的基本格式 1) 四地址指令 ...

  5. 2022年考研计算机组成原理_1 概述

    https://gitee.com/fakerlove/computer-organization 文章目录 1. 概述 1.1 发展历程 1.2 计算机系统层次结构 1.2.1 五大部件 1) 存储 ...

  6. 【计算机组成原理】数据表示和运算

    文章目录 进制转换 BCD码 字符与字符串 校验码 进制转换 BCD码 通常采用4位二进制数来表示 几个常用的BCD码: 8421码 有权码.各位数值分别为b3.b2.b1.b0,权值分别为8.4.2 ...

  7. 计算机组成原理 外部设备分为,2017考研计算机组成原理第七章考点:外部设备...

    2017考研计算机组成原理第七章考点:外部设备 2016-03-15 13:33 | 考研集训营 对于参加计算机统考的学生来说,2017考研的准备工作需要提前进行,因为计算机考研专业课涵盖了四门科目, ...

  8. 计算机组成原理浮点数左移规则,2020考研计算机组成原理知识点:浮点数的表示和运算...

    2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机组成原理知识点:浮点数的表示和运算,希望能帮助大家! 浮点数的表示和运算 1. 浮点数的表示 1)浮点数的表示范围; 浮点数是指 ...

  9. 【考研计算机组成原理】课堂笔记目录汇总——知识点清晰

    文章目录: 一:基础笔记 二:强化笔记 三:冲刺笔记 一:基础笔记 [考研计算机组成原理]课堂笔记1 第一章 计算机系统概论Introduction to computer systems [考研计算 ...

最新文章

  1. 代码之美——Doom3源代码赏析2
  2. 导入 sun.net.TelnetInputStream; 报错
  3. Hibernate懒加载
  4. ubuntu linux theme,如何在Ubuntu 20.04中启用全局暗黑主题
  5. Hibernate 一对多连接表单向关联
  6. Mendeley从已有文献找相关文献的方法
  7. html图片滚动暂停,怎么设置鼠标悬停时滚动的图片或文字停止?
  8. java中this什么时候不能省略?this()的用法
  9. vr全景图如何制作?vr制作用什么软件?(详细教程)
  10. 深度学习在音乐信息检索(MIR)方向的应用介绍(上)
  11. 使用OneDNS完美实现Chorme自动同步书签和插件
  12. 谈谈网络工程师的就业方向与薪资水平
  13. 数据清洗及OpenRefine工具
  14. SQL中exists关键字的用法
  15. LeetCode 695. 岛屿的最大面积
  16. 农业病虫害数据集与算法——调研整理
  17. 微信小程序 输入车牌号(有新能源)
  18. matlab如何将mat转为wav,Matlab的wav文件转为mat文件源程序
  19. 艺术品经营单位备案申报材料和艺术品经营单位备案申请表格式
  20. JavaWeb投票系统

热门文章

  1. 人生苦短 须用Kotlin
  2. android5.1蓝牙opp协议去掉Notification和Dialog操作提示
  3. python.pandas数据清洗(数据填充与条件删除)
  4. 电源-主动式PFC介绍
  5. linux 合并csv文件 cat,Python:将两个CSV文件合并为多级JSON
  6. centos 7.2安装 java_centos7.2 linux系统上安装java环境
  7. mysql弱口令msf_Metasploit扫描Mysql弱口令
  8. java idle 机制_深入springboot原理——一步步分析springboot启动机制(starter机制)...
  9. python中sn的意思_python学习笔记
  10. java的equals什么作用_java当中equals函数的作用小结