• 408王道计算机组成原理——数据的运算及大题


    目录

    1.大纲要求

    1.1.定点数的编码表示

    1.2.运算方法和运算电路

    1.3.整数的表示和运算

    1.4.浮点数的表示和运算

    1.6.小结

    2.无符号数的加/减

    3.加法器电路

    3.1.无符号数加法

    3.2.无符号数减法

    3.3.补码加法/减法

    3.4.标志位CF、ZF、OF、SF

    3.5.补充

    4.乘法溢出

    5.精度丢失

    6.真题


    1.大纲要求

    1.1.定点数的编码表示

    1.无符号整数的减法实现:减数转换为补码,通过加法的形式实现减法的运算

    2.无符号整数的溢出判断:①手算        ②机器实现:CF标志位

    3.有符号数:补码、原码(浮点数)

    1.2.运算方法和运算电路

    1.加法器的原理:两个 n bit的输入,一个n bit的输出

    2.ALU

    ①看懂ALU图示。CU(控制单元)给ALU一个控制信号,告诉ALU将要进行什么操作(加/减/乘/除)

    ②两个输入一个输出;形成CF、ZF、OF、SF标志位

    ③不仅执行sub、add、mul等运算指令需要ALU参与,执行其他指令时,ALU也会参与

    (1)条件转移指令可以根据ALU进行运算时生成的标志位进行判断是否满足条件

    (2)每次执行完指令后,PC都会自动+"1",有的计算机中可能会使用ALU完成此操作

    (3)jump指令通过ALU对PC进行加减操作,从而实现指令的往前或者往后

    3.补码加/减运算器:

     4.乘除法原理:无符号数、补码以及它们的运算电路

    1.3.整数的表示和运算

    1.4.浮点数的表示和运算

    1.6.小结

    1.无符号数

    2.有符号数 → 补码

    3.定点小数和原码仅在浮点数中用到:考察深度浅

    4.运算:加减(深),乘除(浅)

    5.溢出:加减、乘除

    2.无符号数的加/减

    1.加法:从最低位开始,按位相加,并往更高位进位

     2.减法:

    ①被减数不变,减数全部按位取反,取反后加1

    快速方法:从右往左找到第一个1,这个1左边的全部位按位取反

    减法化成加法的原因是:加法电路易于实现,造价便宜,减法电路实现困难,造价昂贵

    ②从最低位开始,按位相加,并往更高位进位(同无符号数加法操作)

    3.加法器电路

    3.1.无符号数加法

    ①加法器的左端输入被加数A(1010),右端输入加数B(1000)

    ②加法 → Sub = 0,即加减法控制信号向多路选择输入0,B通过MUX的0侧输入到加法器中

    ③加法器进行对1010和1000进行逐位相加 → 1 0010 → 只保留低4bit,最高位丢弃

    ④OF(虽然对无符号数没有意义,但是仍然会生成):1010的最高位(1)和1000的最高位(1)进位(1)和1010的次高位(0)和1000的次高位(0)进位(0)进行异或 → OF = 1

    ⑤CF(无符号数通过CF是否为1判断是否产生溢出):最高位进位(即cout输出位,1)和sub输入位(加法,0)进行异或 → CF = 1,1010 + 1000发生进位/借位,即溢出 

    3.2.无符号数减法

    ①加法器的左端输入被加数A(1010),右端输入加数B(1000)

    ②减法 → Sub = 1

    1.加减法控制信号向多路选择输入1,B通过MUX的1侧输入到加法器中:B经过非门,即B按位取反 → 0111(实现按位取反)

    2.加法器进行对1010和0111进行逐位相加 → 1 0001

    3.加减法控制信号通过cin向加法器输入1 → 1 0010(实现末位加1)只保留低4bit,最高位丢弃

    ③CF(无符号整数的减法中,减数大于被减数,就会发生借位,即结果为负数,而无符号数只能表示整数,故CF = 1时表示无符号减法溢出):最高位输出位(1)和sub输入位(减法,1)进行异或 → CF = 0,1010 - 1000没有借位/进位,即没有溢出

    3.3.补码加法/减法

    ①实现原理和无符号数的加/减原理一样(ALU在实现运算时,并不区分是实现的原码还是补码的运算)

    ②是否溢出看CF是否为1:最高位进位和SUB异或(OF对补码加/减无意义)

    ③SF = 1表示负数,SF = 0表示负数

    3.4.标志位CF、ZF、OF、SF

    1.OF(无符号数无意义):最高位进位和次高位进位异或

    2.SF(无符号数无异议):结果的最高位

    3.ZF:结果全0,ZF = 1;结果非全0,ZF = 0

    4CF.(有符号数无意义):最高位进位和SUB异或

    3.5.补充

    1.计算机通过当前指令的不同,即进行的微操作不同,对当前进行有符号数/无符号数的计算进行区分,进而让有符号数的加减进行溢出判断时,检查OF;无符号数的加减进行溢出判断时,检查CF

    2.加减乘除出现溢出时,并不一定导致异常(内中断):

    ①硬件:让硬件自动捕捉异常并且发生异常时直接运行中断处理程序

    ②软件:在执行加减乘除指令后,加上一条陷入指令,由该陷入指令检查溢出是否发生,并且发生时运行中断处理程序

    ③溢出无所谓,不进行处理

    4.乘法溢出

    1.2n位保存结果:nbit * nbit 结果一定能用2n bit表示(999 * 999 = 998 001,即3位 * 3位一定不超过6位),故当使用2n bit保存结果时,不会发生溢出

    2.n位保存结果:只保留后nbit

    (1)无符号数:当前nbit全为0时,舍弃前nbit不影响结果的真值,故不发生溢出;当前nbit只要有出现1时,舍弃前nbit就会影响结果的真值,故发生溢出;当发生溢出时,PSW的OF同样会被置为1

    (2)有符号数:当前n+1bit全为0/1,舍弃前nbit不影响结果的真值,故不发生溢出,当前nbit不是全为0/1,舍弃前nbit就会影响结果的真值,故发生溢出

    原因是补码的符号扩展:当n位补码最高位为0时,扩展为2nbit,则扩展的nbit为全0;当n位bit最高位为1时,扩展为2nbit,则扩展的nbit全为1;故前n+1bit全0/全1时,舍弃前nbit不影响真值

    5.精度丢失

    1.浮点数的表示隐含了一个最高位的1,即计算精度位数时,需要尾数位数 + 1

    2.被转换数有效位数 > 转换类型的精度:发生精度丢失

    INT类型有1位是符号位,故精度为32 - 1 = 31bit

    INT类型精度为31bit,float类型精度为23 + 1 = 24bit → 31 > 24 →可能发生丢失

    INT类型精度为31bit,double类型精度为52 + 1 = 53bit → 31 < 53 → 不会发生丢失

    6.真题

    (1)可以通过软件的方式使用n轮循环加法指令、减法指令、移位指令等价实现乘法操作

    (2)控制逻辑控制循环的次数,并且发出右移和加法指令

    (3)a即用软件方式实现(2n轮),b即用硬件方式实现(n轮),c即(1轮)

  • 相关阅读:
    【Java面试题】6年开发去A里面试P6竟被Mysql难住了,说一下你对行锁、临键锁、间隙锁的理解
    Efficient Batched Oblivious Transfer Protocol
    java计算机毕业设计化妆品销售网站源码+mysql数据库+系统+lw文档+部署
    非洲美食多样性而丰富多彩
    腾讯云轻量级服务器和云服务器什么区别?轻量服务器是干什么用的
    基于SSM的在线家教管理系统
    如何写Go代码
    Python学习7(正则表达式)
    浏览器打开JupyterLab后所有快捷键与窗口按键均失效怎么办?
    BIRCH算法全解析:从原理到实战
  • 原文地址:https://blog.csdn.net/JiangNan_1002/article/details/126341298