计算机组成原理(运算器)

1、“821.2016T1(1)”,表示821真题,2016年的题,T1是 选择题/填空题/大题 的第一题,其他类似标记也是相通

2、个人小白总结自用,不一定适用于其他人,请自行甄别

3、有任何疑问,欢迎私信探讨,看到后会及时回复

选择题

  1. IEEE754规范:阶码决定该数据的类型

    规格化:阶码不为全0不为全1

    非规格化:阶码全0

    无穷大:阶码全1,且尾数=0

    NaN:阶码全1,且尾数≠0,(Not a Number,非

  2. 浮点数加减运算:(手势:右手握拳大拇指向上,左手握拳大拇指向下)

    (右上)阶码溢:规、尾数舍

    (左下)阶码下溢:左规(数字左移)

    尾数溢出,结果不一定溢出

            双、单符号位加减产生的进位自然舍去,所以不算溢出

            但是要是尾数右规,所导致阶码溢出,则表示结果溢出

    对阶操作不会引起阶码上溢或下溢(因为是小阶向大阶对阶)

填空题

  1. 浮点数加减运算,尾数右移的2种情况

    尾数对阶

    规格化与判溢出

  2. 寄存器里面是补码,(FFFF FF80)补 = -128(821.15.T3)
  3. 32的机器上运行,int、short,x=127,y==-9,执行z=x+y,x、y、z的机器数:都要用32表示出来(821.16.T2
  4. 原码一位乘,n次移位,最多n次加法;Booth一位补码,n次移位,最多n+1次加法

移动次数

(最多)加法次数

原码一位乘法

部分积

乘数+0

n

n

补码一位乘法/Booth

部分积

乘数+1

n

n+1

补码两位乘法/Booth

部分积

乘数+1

n/2

(n/2) +1

原码一位除法

被除数/余数

商+1

n

n+1

补码一位除法

被除数/余数

商+1

n

n

简答题

大题

舍入规则

浮点数:尾数求和、规格化浮点数≠IEEE754规格化浮点数

  1. 规格化浮点数

    尾数:0.1…

    阶码:补码,无偏移量

  2. IEEE754规格化浮点数

    尾数:1.0…,1.1…,首位1隐含

    阶码:移码,float单精度是127的偏移量

0舍1入:可能导致最终结果需要右移1位,阶码+1后上溢

.0001 1 = .0010(入)

.0001 0 = .0001(舍)

规格化浮点数加/减法

  1. 4个答题步骤
  2. 对阶,其实是:用大阶的码,将小阶的尾数右移,进行舍入操作
  3. 注意补码右移,是算术右移,是补符号位

原码1位乘法/除法

  1. 符号位、数值位分开求
  2. 2个符号位异或,相同为0
  3. 部分积0.0000
  4. 乘数只写小数点后面的数值部分
  5. 直接用原码化成十进制的小数,检验相乘的答案

补码一位乘法/除法

注意题中所给的数据,是原码还是补码(821.15.T1,给的就是补码)

原码/反码/补码/IEEE754码

  1. 真值原码 = 十进制二进制原码

    带符号的数值,转二进制时,最高位是数值位

  2. 原码补码

    正数补码直接就是自己的原码

    负数的补码才要转换,规则:除去最高位符号位不动,其他位全反+1

  3. [A]补 转 [-A]补,直接全反+1,包括符号位
  4. 单精度浮点数IEEE754加法

    数符S + 阶码E + 尾数M = 32 = 1 + 8 + 23

    偏置值 = 127 = 0111 1111

            E(阶码)=真值+偏置值

    尾数用原码,阶码用移码

    隐含:①基数是2;② 尾数是1.开头的

  5. 寄存器的加减运算

    寄存器的内容 = 补码

    带符号整数补码加法

        一个正数,一个负数相加,不会溢出

        只有同正、同负的才会溢出

    ------------------------------------------------------------------------

    例如:寄存器R1的内容 = C4C4 8000 H

        C4C4 8000 H = 1100 0100 1100 0100 1000 0000 0000 0000 B,这是寄存器里面的内容,所以是补码(最高位的1,是符号位)

        补码转原码,除符号位直接全反+1,原码 = 1011 1011 0011 1011 1000 0000 0000 0000 B = - 3B3B 8000 H

        - 3B3B 8000 H,可以直接在答题卡写:-(3x16^{7} + 11x16^{6} + 3x16^{5} + 11x16^{4} + 8x16^{3}

  6. 8位二进制加法器,画图(821.12.T1(3)

    1位半加器

    1位全加器

    8位串行加法器(带溢出判断)

    并行加法器(暂未强制考)

补充知识点

逻辑位移(无符号数)

算术位移
(有符号数)
只移动数值部分
补填数值左移高位,
溢出(结果出错)
右移低位,
丢失精度
正数原=反=补0丢1时丢1时
负数原码0丢1时丢1时
反码1丢0时丢0时
补码左移0,右移1(符号位)丢0时丢1时
总结1、负数原码,与正数原码完全相同,与自己负数反码完全相反
2、负数的补码:左移丢0【和反码丢的相同】溢出,右移丢1【和原码丢的相同】丢失精度
3、符号位,不参与位移
(王道.P48.T11&T12)
双符号位是,最高位不参加,次高位参加位移(王道.P50.T27)
4、[X]=X0.X1X2…,其中X0为符号位,X1为最高位,只要  ?  则补码左移时将会发生溢出(王道.P29.T19)
5、补码时,正数符号位0,左移0时,数据不丢失;负数符号位1,左移1时,数据不丢失(王道P50T27)

算术位移 & 逻辑位移

  1. 算术位移,与其他位移不同的是:符号位不变,仅仅是其他位的位移而已
  2. 算术右移,符号位不变,最低位移入进位标志位
  3. 不带进位的循环,就是不用管CF(进位标志位),直接数值位循环左移和右移就可以

 

有无符号转换

有无符号转换 十六进制
(寄存器里的二进制)
真值 十六进制真值方法总结
低->高有符shortFFFA-6有符intFFFF FFFA-6 
有符short-6无符intFFFF FFFA将 FFFF FFFA 转为10进制
4294967290 
①有符short
②有符int(同①类型扩位)
③无符int
无符short65530有符int0000 FFFA65530①无符short
②无符int(同①类型扩位)
③有符int
无符short65530无符int0000 FFFA65530 
相同类型有符shortFFFA-6无符shortFFFA65530①寄存器之间二进制不变,且都是补码
②唯一改变的就是符号位是否数值化
无符shortFFFA65530有符shortFFFA-6
高->低有符intFFFF FFFA-6有符shortFFFA-6高位转低位,直接高位截断
有符int-6无符short65530
无符int将 FFFF FFFA 转为10进制
4294967290 
有符short-6
无符int将 FFFF FFFA 转为10进制
4294967290 
无符short65530

 

#include <stdio.h>

int main()
{
    /*  有符号用%d输出,无符号用%u输出 */
    short a = 65530;
    unsigned short b = a;
    printf("%d %u", a , b);
   
    return 0;
}
/* 参考博客:https://blog.csdn.net/qq_38608897/article/details/103966054 */
/* C语言在在线运行器:https://c.runoob.com/compile/11/ */

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值