您的位置:首页 > 理论基础

计算机组成与体系结构笔记(1)

2018-10-10 20:21 120 查看

文章目录

  • 2.9 浮点数的运算
  • 2.10 数据在存储器中的存放形式
  • 1.1

    高级语言程序->汇编语言程序->机器语言程序
    计算机系统结构:外特性、程序员所见的属性,包括指令系统、数据表示、寻址方式、寄存器集
    计算机组成:计算机系统结构所体现的属性的具体实现

    1.2 计算机系统的基本组成结构

    冯诺依曼结构:以运算器为中心,程序顺序执行,指令和数据以同等地位存于存储器,按址寻访
    运算器、控制器、存储器、输入输出

    1.3 执行的过程

    储存器的基本组成:
    MAR:存储器地址寄存器,地址长度可反映存储器的容量
    MDR:存储器数据寄存器,寄存器宽度反映存储字长

    控制器基本组成:
    PC:程序计数器,存放当前即将执行的指令地址
    IR:指令寄存器,存放当前即将执行的指令
    取指->译指->执指

    术语:
    指令字长:一条指令的二进制代码位数
    存储字长:每次访问存储器获得的数据位数
    机器字长:CPU同时处理的数据位数

    1.4 计算机性能指标

    • 执行时间/响应时间/延迟
    • 吞吐量/带宽
      多个处理器可能仅仅增加吞吐量

    CPU时间:CPU执行给定程序所花费的时间,不包括I/O等待时间
    CPU执行时间:一个时钟周期长度指令数目平均每条指令所花的时钟周期
    指令条数:取决于指令集体系结构,编译器的质量
    CPI:执行一条指令所需时钟周期数
    MIPS:每秒执行百万条指令数
    FLOPS:每秒浮点运算次数

    性能设计的基本原则:
    大概率事件优先原则
    Amdahl定律:加速某部件所获得的系统性能加速比受限于该部件在系统中所占的重要性

    2 数据的机器级表示与运算

    2.1 整数的编码

    整数类型:short int long
    整数的编码:原码、反码、补码

    2.2 有符号数与无符号数间转换

    同时有无符号数与有符号数参加运算时,C编译器会隐含的将有符号整数强制转换到无符号数。数据在计算机中的储存不变,只是对数据的解释不同,符号位-2n变成2n
    比如说0-1=-1(1111),会看成15

    size_t表示无符号数,对于64位的机器,size_t类型数据取值范围是0~2^64-1
    而unsigned int类型取值范围是0~2^32-1,所以一个unsigned int一定>=0

    unsigned int加减法是模为Umax的算术运算,当你需要取模算术运算的时候再用unsigned

    2.3 整数的位运算与逻辑运算

    C语言中的按位运算:& | ^ ~
    C语言中的逻辑运算符:&& || !

    2.4整数的扩展与移位

    按位扩展:正数高位扩展是0,负数高位扩展是1,保留数值原来的含义
    执行与、或操作是零扩展,默认是无符号数,为0扩展
    addi加上立即数,andi与立即数
    位截断:强行将长位数转成短位数,直接截断,正数可能变成负数

    左移x<<y:高位移除,低位补0
    右移x>>y:低位移除
    逻辑右移:高位填0
    算术右移:补符号位
    C语言右移都是算术右移!!!想用>>实现逻辑右移就可以将操作数强制类型转化为unsigned类型

    2.5 整数的加法

    无符号数的加法:忽略最高位进位:1000+1001=0001
    有符号数的加法:补码直接相加
    整数运算的溢出:运算结果超出了表示范围
    无符号数溢出不报错
    有符号数:有硬件检测是否溢出overflow=carry
    xor carry[n-1],C++可以catch

    2.6 整数的乘法

    加法器实现乘法:速度慢
    无符号数阵列乘法器电路
    有符号数的乘法:乘数的补码的乘积不等于积的补码
    但是,截断后的w位,是一样的->标准的乘法:忽略运算结果的高w位,无符号乘法的部件,可以给符号乘法使用

    2.7 整数的除法

    余数符号与被除数符号相同
    (-7)/2=-3…-1
    (-7)/(-2)=3…-1
    通过右移实现处以2:正数负数都是商向下取整
    因为除法指令太慢了,所以编译器优化就先加再右移

    2.8 浮点数的表示

    IEEE 754浮点数标准

    单精度:32位

    8位阶码:1~ 254,但是要减去偏移量127,故阶码范围是-126~127
    23位尾码:尾码表示小数,范围0~ 1,最后再加上1(阶码全零的话不用加1),范围是1~2,相当于提高了一位精度,故有效位数是24位,相当于7位十进制有效位数
    规格化表示数值范围

    非规格化表示

    注意正零和负零之间的区别,正无穷的倒数是正零,负无穷的倒数是负零。
    某种意义下比正无穷还大的数是NaN

    双精度:64位

    11位阶码
    52位尾码:有效尾数53位,相当于17位十进制有效位数
    IEEE754属性:
    几乎可以之间按编码大小来比较数值大小

    2.9 浮点数的运算

    2.9.1 浮点数的舍入

    向9截断
    向正无穷截
    向负无穷截
    首选偶数
    四舍五入:对于五的舍入,采用取偶数的方式

    2.9.2 浮点数的加法

    步骤:
    对阶:小阶往大阶对
    尾数相减
    规格化,舍入
    检查溢出


    浮点数加法特性

    • 有交换性
    • 无结合性
    • 除了无穷和NaN满足单调性

    2.9.3 浮点数乘法

    步骤:
    阶码加
    尾数乘
    规格化、舍入
    检查溢出
    浮点数乘法特性

    • 有交换性
    • 无结合律、无分配律
    • 除了无穷和NaN满足单调性

    2.9.4 C语言中不同类型转换

    int->double
    只要int的值的bits<=53就能精确的转换
    int->float
    int的有效位数是31bits

    2.10 数据在存储器中的存放形式

    2.10.1 数据存储字节顺序

    • 大数端:低位对高地址
    • 小数段:高位对低地址

    2.10.2数据类型及存储方式

    • 字对齐:最节约内存,但数据跨字存储,访问次数增多
    • 字不对齐:空间浪费,但是访问速度快
    阅读更多
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: