计算机组成与系统结构

本文概述了程序开发与执行过程,包括高级语言到机器码的转换,以及数据在机器级别用补码、浮点数、BCD码和原码/反码表示的方法。重点介绍了加减乘除运算在不同类型的数(无符号整数、带符号整数和浮点数)中的处理,以及进位和溢出规则。
摘要由CSDN通过智能技术生成

前言: 这篇文章主要对细碎的和一些重要的知识点进行总结

第一章

1.4 程序开发与执行过程

高级语言到机器码以及各个器件的工作过程(P5 19:00)

在这里插入图片描述

不同高级语言到机器码的过程: C++/C都是编译型语言,将所有代码先编译为汇编语言,再生成机器码,java也是编译型语言;
而python则一句一句得将代码解释为机器码,是解释型语言

在这里插入图片描述

第二章 数据的机器级表示

补码

  • 真值 x转化为补码: 例如x为 -1001,将其转化为补码, 真值全部取反,然后+1,首位补1(代表负值) 1 (这种方法的本质其实是模2法,相当于取反+1) ,结果为 1 0111
  • 原码 转化为补码(常用于浮点数尾数的求差运算 ): 例如 0 111,转化为 0 111 (正数原码的补码等于其本身),又如 1 001(真值为-1), 符号位不变,其余的数全部取反,然后+1 ,结果为 1 111 .(原码加减法)

浮点数

  • 阶数 用移码表示,移码 = 真值 + 偏置值
  • 尾数 用原码表示,运算见教材1P38
  • 浮点数的 表示范围 : 对于单精度来说,阶码有8位,最大对应127,令尾数全为1,为 (1.1111…1)2×2127 , ,阶码最小为-126(-127对应全0,-128对应全1),令尾数全为0,为 (1.0000…0)2×2-126 ,大致对应 10-38 -1038 ; 双精度阶码有11位,类似.
  • 浮点数的三种状态: 1.规格数: 用于表示最常见的数值, 比如1.2, 34567, 7.996, 0.2. 但规格数不能表示0和非常靠近0的数; 2.非规格数: 用于表示0, 以及非常靠近0的数, 比如1E-38; 3. 特殊数: 用于表示"无穷"和"NaN"; 具体请参照浮点数的三种状态或者教材1P37.

BCD码

BCD码是用特定的四位二进制数表示0-9的十进制数,这些二进制数没有权重
对于8421码来说,当表示9+2这样的加法运算时,由于11(1011)在8421码中没有对应的四位二进制数表示,所以要加上一个0110(十进制为6)强制将结果由4位溢出成5位,变成10001(高位补零0001 0001),而0001在8421中对应十进制1,故结果为11.相当于8421码要逢1010进0110
可以这样理解,9+2=11对应的十进制数已经进位了,相应的四位二进制也必须进位,而+6则是强制让四位二进制数大于1111溢出0001,11+6相当于16+1

在这里插入图片描述

在这里插入图片描述

补码,原码,反码表示范围

在这里插入图片描述


第三章 原码,补码的加减乘除\

计算二进制的加减乘除和十进制没有本质区别,重要的是我们要 学习这些运算如何在计算机内部执行的 ,比如我们可以很轻松的计算无符号整数1111-0011,但计算机大部分没有专门为减法设计的电路,所以我们将 -0011 转化为 +[-0011] 即 +1101,才得以在计算机内部执行.

加减都在ALU内,进位和溢出的情况参照教材书2P61

在这里插入图片描述

无符号整数加减法(用于原码的数值部分在加法器内运算)

  • 当求 x-y 时, 转化为加法运算,将 -y 转化为 +[-y] .如 y=101, 将数全部取反加1,即 011 , 但是无符号整数只能用在运算不出现负数的情况下.

补码加减法(用于带符号整数的运算)

  • 当求 [x-y] (x和y为真值)时,因为-y在计算机内必须转化为补码运算,所以结果一定是补码表示, 可以转化为 [x] + [-y] ,若已知[y]=1 0011, 计算[-y], 将[y]从右往左出现的第一个1左边的全部取反包括符号位(即全部取反+1) ,得到 0 1101.
  • 当求 X-Y (X和Y都是补码)时: 转化为 X+[-Y] ,转化规则同上.
  • 补码进位规则为 OF=Cn-1 异或 Cn 2,结果的符号为F的最高位,产生进位后结果为n+1位,无进位结果为n位, 结果都是补码表示.

原码加减法(用于浮点数尾数部分的运算)

  • 数值运算部分由ALU处理,符号位由其它的辅助电路处理
    规则
    在这里插入图片描述

原码加减法的规则似乎很奇怪,我们可以想象时钟, 用mod12的十进制加减法来类比mod2n的二进制无符号整数加减法

在这里插入图片描述
在这里插入图片描述
从这两个例子中我们发现了一个奇怪的问题,为什么 无符号整数的减法最高位有进位结果为正,而无进位结果为负?

  • 我们从补码的定义出发,例1中, (-2)为 (-2+12)mod12=10, 那么(3+10)mod12可以写成 (3-2+12)mod12 ,括号中的结果为13>12,而我们在计算前执行了+12操作,这说明原来的计算(3-2)结果是大于0的,而在 mod12 的计算中 (13)mod12=1,产生了进位,所以说 最高位产生进位则运算结果为正 ,加法器的作用只是将减法变成了加法;
  • 在例2中,(-8)=(-8+12)mod12=4,那么 (3+4)mod12可以写成 (3-8+12)mod12,括号中的结果为7<12,而我们在计算前执行了+12操作,所以原先的计算值(3-8)是小于12的,又(7)mod12=7没产生进位,所以说 最高位没产生进位则运算结果为负数

总结:手工计算减法时,我们将结果与 0 比较判断正负,而在加法器做减法时,由于减数取补码加上了 12,所以我们将结果与 12 对比判断正负,而结果大于 12 的情况下要产生进位,所以进位对应的计算结果为正数,相反,不进位表明计算结果为负数

可以根据这一逻辑类比无符号整数的二进制减法

可以总结到,做减法时都是把 减数取反+1 ,这些操作逻辑由加法器的sub和多路选择器来实现

第七章 存储器层次结构

cache 的一些考题

  • 性能分析
    在这里插入图片描述
    在这里插入图片描述

  • 局部性原理 按块与内存进行数据交换
    在这里插入图片描述
    在这里插入图片描述

  • cache替换
    在这里插入图片描述


  1. 王道考研 ↩︎ ↩︎ ↩︎

  2. 计算机组成原理与系统结构 第三版(清华大学出版社) ↩︎ ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值