ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算机组成原理-第6章-计算机的运算方法

2021-07-17 23:00:32  阅读:502  来源: 互联网

标签:计算机 符号 浮点数 补码 进位 原理 原码 运算


第6章-计算机的运算方法


6.1-无符号数和有符号数


6.1.1-无符号数

没有符号的数,每一位均可用来存放数值。


6.1.2-有符号数

1-机器数与真值

符号数字化的数称为机器数,而带正负号的数称为真值。

0表示正号,1表示负号。

2-原码表示法

符号位为0表示正数,符号位为1表示负数。又被称为带符号的绝对值表示

整数原码的定义为:
在这里插入图片描述

小数原码的定义为:
在这里插入图片描述

原码的0有两种表示形式。

3-补码表示法

(1)补数的概念

首先考虑数轴上正负数的几何意义,显然正整数n以看做从某一点(原点)向前走n步,而负整数n可以看做向后走n步,现在考虑下面的8进制圆盘(一个有限的数轴首尾相接),从1走到3,显然有两种走法,+2(顺时针两步)或-6(逆时针6步),可见,+2和-6在这个数轴上的意义是等效的,则称+6为-2的模8的补数。

img

利用补数,我们就将负数转化到了正数,这样只需利用加法器便能实现加减运算,简化了处理器的逻辑设计。

结论:

  • 一个负数可以用它的正补数来代替,而这个正补数可以用模加上负数本身求得。
  • 一个正数和一个负数互为补数时,它们绝对值之和即为模数。
  • 正数的补数等于正数本身。

(2)补码的定义

整数补码的定义为:
在这里插入图片描述

小数补码的定义为:
在这里插入图片描述

补码的0只有一种表示形式。

-1本不属于小数范围,但却有-1的补码存在,其在原码中是不存在的。

当模数=4时,形成了双符号位补码,又称变形补码,在阶码运算和溢出判断中有特殊作用。

补码与原码相互转化:

对于四位二进制负整数x=x1x2x3x4,考察其求补码的过程:

[ x ] 补 = 2 5 + x = 100000 + x = 11111 + 00001 − x 1 x 2 x 3 x 4 = 1 x 1 − x 2 − x 3 − x 4 − + 00001 [x]_补 =2^5+x=100000+x=11111+00001-x_1x_2x_3x_4=1\overset{-}{x_1}\overset{-}{x_2}\overset{-}{x_3}\overset{-}{x_4}+00001 [x]补​=25+x=100000+x=11111+00001−x1​x2​x3​x4​=1x1​−​x2​−​x3​−​x4​−​+00001
这就是我们熟知的由原码求补码的过程:符号位不变,数值位按位取反,末尾+1。
这一规则同样适用于已知X补X原

4-反码表示法

整数反码的定义为:
在这里插入图片描述

小数反码的定义为:
在这里插入图片描述

反码的0也有2种表示形式。

[x]_补[-x]_补连同符号位在内,每位取反,末位+1。

5-移码表示法

引入移码的目的:为了能从机器数直观地看出真值的相对大小。

移码常用于表示浮点数的阶码

移码的定义为:
在这里插入图片描述

移码中0的表示也是唯一的。

小数没有移码。

最小真值的移码全为0。

补码和移码的相互转化:符号位取反。


6.2-数的定点表示和浮点表示


6.2.1-定点表示

定点数是指小数点以约定的位置给出,小数点位置在最前面的称为小数定点机,小数点位置在最后面的称为整数定点机
在这里插入图片描述


6.2.2-浮点表示

浮点数:小数点位置可以浮动的数。

浮点数表示成:
N = S × r j N=S{\times}r^j N=S×rj
S为尾数,j为阶码,r为基值(2,4,8,16……)。

规定尾数用纯小数表示,同时尾数最高位=1的浮点数称为规格化数(精度最高)。

1-浮点数的表示形式

在这里插入图片描述

2-浮点数的表示范围

在这里插入图片描述

  • 浮点数阶码大于最大阶码时,称为上溢,此时机器停止运算,进行中断溢出处理。
  • 浮点数阶码小于最小阶码时,称为下溢,此时机器将尾数各位强置为0,按机器0处理。

3-浮点数的规格化

在这里插入图片描述

r越大,可表示的浮点数范围越大,而且能表示的数的个数越多,但精度下降。


6.2.3-定点数和浮点数的比较

在这里插入图片描述


6.2.4-举例

判为机器0的条件:

  • 尾数=0,不论其阶码为何值。
  • 阶码≤它所能表示的最小数,不论其尾数为何值。

当阶码用移码表示,尾数用补码表示,则机器零=“000…0”,有利于机器判0电路的实现。


6.2.5-IEEE754标准

在这里插入图片描述

下面给出一个查看浮点数二进制表示的工具(没有经过完整测试):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void showFloatBin(float f);
void showDoubleBin(double d);

int main(int argc, char* argv[]) {
    if (argc != 3) {
        printf("input error\n");
        return 0;
    }
    if (!strcmp(argv[1], "f")) {
        float f = atof(argv[2]);
        showFloatBin(f);
    } else if (!strcmp(argv[1], "d")) {
        double d = atof(argv[2]);
        showDoubleBin(d);
    } else {
        printf("input error\n");
    }
    return 0;
}

void showFloatBin(float f) {
    unsigned int mask = 0x80000000;
    unsigned int f_puppet;
    memcpy(&f_puppet, &f, 4);
    for (int i = 0; i < 32; ++i) {
        if (f_puppet & mask) {
            printf("1");
        } else {
            printf("0");
        }
        if (i == 0 || i == 8)
            printf(" ");
        f_puppet <<= 1;
    }
    printf("\n");
}

void showDoubleBin(double d) {
    unsigned long long mask = 0x8000000000000000;
    unsigned long long d_puppet;
    memcpy(&d_puppet, &d, 8);
    for (int i = 0; i < 64; ++i) {
        if (d_puppet & mask) {
            printf("1");
        } else {
            printf("0");
        }
        d_puppet <<= 1;
        if (i == 0 || i == 11)
            printf(" ");
    }
    printf("\n");
}

程序效果:

daniel@vostro:~/Project/temp$ ./showBin f -178.125
1 10000110 01100100010000000000000
daniel@vostro:~/Project/temp$ ./showBin f 178.125
0 10000110 01100100010000000000000

6.3-定点运算


6.3.1-移位运算

1-移位的意义

2-算数移位规则

在这里插入图片描述

硬件实现:
在这里插入图片描述

3-算术移位和逻辑移位的区别

  • 有符号数:算术移位
  • 无符合数:逻辑移位

为了避免算术左移时最高数位丢1,可以采用带进位Cy的移位:

在这里插入图片描述


6.3.2-加法与减法运算

1-补码加减运算的基本公式

加法:
在这里插入图片描述

减法:
在这里插入图片描述

符号位和数值部分一起参与运算,并且将符号位产生的进位自然丢掉即可。

2-溢出判断

(1)用一位符号位判断溢出

overflow=符号位产生的进位^最高有效位产生的进位

(2)用两位符号位判断溢出

  • 两位符号位不同时,溢出
  • 否则,无溢出

第一位的符号永远代表真正的符号。

在这里插入图片描述

3-补码定点加减法所需的硬件配置

在这里插入图片描述

4-补码加减运算控制流程

在这里插入图片描述


6.3.3-乘法运算

1-分析笔算乘法

在这里插入图片描述

2-笔算乘法的改进

在这里插入图片描述

运算过程:
在这里插入图片描述

  • 乘法运算可用加法和移位来实现,2个4位数相乘,总共需要进行4次加法运算和4次乘法运算。
  • 由乘数的末位值确定被乘数是否与原部分积相加,然后右移一位,形成新的部分积;同时,乘数也右移一位,由次低位作为新的末位,空出最高位存放部分积的最低位。
  • 每次做加法运算时,被乘数仅与原部分积的高位相加,其低位被移至乘数所空出的高位位置。

3-原码乘法

乘积的符号位由两个操作数的符号位异或得到。

(1)原码一位乘运算规则

在这里插入图片描述
在这里插入图片描述

看着挺抽象,做道题就懂了:
在这里插入图片描述

结果是0.1011_0110

(2)原码一位乘所需的硬件配置

在这里插入图片描述

(3)原码一位乘控制流程

在这里插入图片描述

(4)原码两位乘

用两位乘数的状态来决定新的部分积如何形成,因此可以提高运算速度。

在这里插入图片描述
(了解即可,应该不会考)

4-补码乘法

(1)补码一位乘运算规则
在这里插入图片描述

  1. 被乘数x符号任意,乘数y符号为正
    [ x ⋅ y ] 补 = [ x ] 补 ⋅ [ y ] 补 = [ x ] 补 ⋅ y [x·y]_补=[x]_补·[y]_补=[x]_补·y [x⋅y]补​=[x]补​⋅[y]补​=[x]补​⋅y
    当乘数y为正数,不管被乘数x的符号如何,都可按原码乘法的规则运算。这里的加和移位必须按补码的规则计算。

  2. 被乘数x符号任意,乘数y符号为负
    [ x ⋅ y ] 补 = [ x ] 补 ( 0. y 1 y 2 . . . y n ) + [ − x ] 补 [x·y]_补=[x]_补(0.y_1y_2...y_n)+[-x]_补 [x⋅y]补​=[x]补​(0.y1​y2​...yn​)+[−x]补​
    把乘数的补码y补去掉符号位,当成一个正数与x相乘,然后加上[-x]补进行校正,也称校正法。

  3. 被乘数x和乘数y符号均任意(Booth算法

    符号位参与运算,运算的数均以补码表示;

    被乘数和部分积取双符号位,初值=0,乘数可取单符号位。

    乘数末尾增设附加位yn+1=0;

    根据(yn,yn+1)的取值来确定操作:
    在这里插入图片描述

    移位按照补码右移规则进行;

    按照上述算法进行n+1步,但最后一步不再移位。

一个例子:

在这里插入图片描述

(2)补码比较法(Booth算法)所需的硬件配置

在这里插入图片描述

(3)补码比较法(Booth算法)控制流程

在这里插入图片描述

(4)补码两位乘

提高运算速度,了解即可。


6.3.4-除法运算

1-分析笔算除法

在这里插入图片描述

2-原码除法

商符由两个符号位异或求得,商值由两数绝对值相除得。

在小数定点机中,规定0<被除数<=除数,否则产生溢出。

(1)恢复余数法

当余数为负时,需要加上除数,将其恢复为原来的余数。

(2)加减交替法(不恢复余数法)
在这里插入图片描述

举个例子便知:
在这里插入图片描述

(3)原码加减交替法所需的硬件配置
在这里插入图片描述

(4)原码加减交替法控制流程
在这里插入图片描述

3-补码除法

(1)补码加减交替法运算规则

比较被除数和(余数)和除数的大小:
在这里插入图片描述

商值的确定:
在这里插入图片描述

商符是在求商值的过程中自动形成的。

商的符号还可以判断商是否溢出。

新余数的确定:
在这里插入图片描述

举个例子:

在这里插入图片描述

(2)补码加减交替法所需的硬件配置

与原码的配置相同,但是触发器S可以省略,因为符号位在运算过程中确定。

(3)补码加减交替法的控制流程
在这里插入图片描述


6.4-浮点四则运算


6.4.1-浮点加减运算

步骤:对阶-尾数求和-规格化-舍入-溢出判断。

1-对阶

小阶向大阶看齐:阶数小的尾数向右移位,每右移一位,阶码+1。

尾数右移时可能会发生数码丢失,影响精度。

2-尾数求和

3-规格化

尾数的最高数值位与符号位不同时,即为规格化形式。对于S<0,有两种特殊情况:

  • S=-1/2,其不是规格化的数(对于补码而言)。
  • S=-1,是规格化的数。

(1)左规

(2)右规
在这里插入图片描述

4-舍入

在这里插入图片描述

5-溢出判断

尾数结果出现01.xxx...x10.xxx...x时,并不表示溢出,只有将此数右归后,根据阶码才可以判断运算结果是否溢出。

在这里插入图片描述

  • 下溢:阶码<-128,机器不做溢出处理,仅把它当做机器0。
  • 上溢:阶码>+127,真正溢出,机器要作溢出中断处理。

浮点数的溢出与否由阶码的符号决定。

在这里插入图片描述


6.4.2-浮点乘除法运算

略,大纲不要求。


6.4.3-浮点运算所需的硬件配置

由两个定点运算部件组成:

  1. 阶码运算部件
  2. 尾数运算部件

还需要有判断结果是否溢出的电路等。


6.5-算术逻辑单元


6.5.1-ALU电路

在这里插入图片描述

C-1表示最低位的外来进位,Cn+4是向高位的进位。P,G供先行进位使用。


6.5.2-快速进位链

1-并行加法器

在这里插入图片描述

2-串行进位链

并行加法器中的进位信号采用串行传递。

在这里插入图片描述

3-并行进位链

并行加法器中的进位信号是同时产生的,又称先行进位,跳跃进位等。

在这里插入图片描述

(1)单重分组跳跃进位

将n位全加器分为若干小组,小组内的进位同时产生,小组与小组之间采用串行进位,这种进位又有组内并行,组间串行之称。

在这里插入图片描述
(2)双重分组跳跃进位
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

标签:计算机,符号,浮点数,补码,进位,原理,原码,运算
来源: https://blog.csdn.net/DanielSYC/article/details/118713048

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有