计组13
关于各类周期:
指令周期指取出并完整执行一条指令的时间
不同指令的指令周期基本不一样,这个很容易理解
不同指令内的机器周期也不一定相同,因为包含的基本操作可能不一样
机器周期和机器周期也不一定相同,可以是相同长度的,也可以是不同的时钟周期个数
时钟周期:
计算机中最小的时间单位,等于cpu主频的倒数
一个时钟周期内,cpu仅完成一个最基本的动作
机器周期(cpu周期):
计算机中为了方便管理,常把一条指令的执行过程划分为若干个阶段
取指周期、间址周期,这些都是机器周期,不同命令之间也是不一样的
每一个基本操作都是由若干CPU最基本的动作组成,即包含若干时钟周期
这个基本操作所需要的时间称为机器周期,则机器周期由若干个时钟周期组成
而机器周期内,每一个周期基本都是要进行一次访存的,所以往往和存储周期差不多
类似于
这里面的几个指令周期流程,基本都是需要访问主存的,那么毫无疑问和存取周期关联大
并且考试的话,以这几个访问主存的目的为考察重点
指令周期:
从取指开始到执行完成该指令所需要的全部时间。指令周期包含若干机器周期。
于是,指令周期>机器周期>时钟周期
下面框内内容暂 ...
计组12
今天内容较为简单,不做PPT,主要理顺一些比较乱的概念性问题
此外,这些寄存器的英文名建议都背下来,否则到时候遇到不认识就完蛋了
CPU至少有5个专用寄存器。它们是:程序计数器(PC),指令寄存器(IR),存储器地址寄存器(MAR),储存器数据寄存器(MDR),状态标志寄存器(PSWR)。
1>程序计数器:又称指令计数器,用来存放正在执行的指令地址或接着要执行的下条指令地址。
2>指令寄存器:用来存放从存储器中取出的指令。
3>存储器数据寄存器:用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存写入一条指令或一个数据字时,也暂时将它们存放在存储器数据寄存器中。
4>存储器地址寄存器:用来保存当前CPU所访问的主存单元的地址。
5>状态标志寄存器:用来存放程序状态字。程序状态字的各位表示程序和机器运行的状态,是参与控制程序执行的重要依据之一,它包括状态标志和控制标志。
其余均是通用寄存器
取寄存器内内容一般没有特别声明是否需要加内容符号,因为有时候也会有误解
但一般自己写的时候注意要加符号,题目里面暂时还没有出现这类破事情,除了偏移时候
留了个 ...
计组11
CF:反映无符号数加减是否溢出
简单来说就是当加法的时候是否导致了高位进位产生一个1,减法进位产生一个0
OF:反映有符号数加减是否溢出,简单来说就是同符号是否产生不同符号
两个负的加出一个正的肯定是错了,两个正的加出来一个负的也肯定是错了
ZF:看是否是全零,对于有无符号都有意义
SF:符号位,仅对有符号加减法有意义
注意,不论有符号加减法还是无符号加减法都不代表这几个位不会产生变动,都可能的
无非是有时候没有意义而已罢了
参考此节进行学习,理论上还需要下功夫
其中cin为0的时候是加法,cin为1的时候是减法,无符号和有符号均适用
这里就直接谈核心重点了,这两个指令的作用就摆在这,后面会有更详细的介绍
这边只是粗略上给出了大致的操作内容
其实实际上是压入两个内容,一个是PC的返回地址,其实也可以称作是IC的返回地址
这两个是同一个东西,在取址后都会进行自增操作,然后X86里面都是按字节进行编址的
所以就要稍微注意下相对应的增量到底是多少,课后习题基本都有
另外一个东西就是上一段程序的起始地址,否则后续的EBP就无法返回正常位置
课后习题其实也声明过,如果是嵌套循环那么必须是压 ...
计组10
书上对此节的概况较为全面详细,这里是一个思维统概,方便未来按模块复习
建议以书为复习的主核心对象
后面主要需要谈的是拓展操作码的设计、计算,算是一个重点
这里谈设计问题
从三地址开始计算,三地址因为只有4位二进制,因而最多表示十六个,而需要保留一位
全一用作下一位的拓展码,所以其15条的范围就是单纯的0000-1110
而下四位二地址拓展码,以前四位全一作为标记区分位,后面四位可以表示十六个
现在需要的是十二个,那么为了区分标记位,那么设计从0000到1011共十二个
剩下的几位也是一定有顺序的,即1100-1111四位保留用作下一位的拓展码,可以计算
因为后续是四位二进制地址,又为下层保留了四位二进制,那么最多可以表示六十四个
现在仅保留六十二位,剩下两位,那么保留0000-1101这样,为下面剩下1100和1110两位
因而最后剩下五位恰好可以表示三十二个地址
PS:讲的一般,建议自己做几道题就能理解问题所在
关于优缺点:
指令寻址的目的是寻址下一个指令的主存地址,都是从主存里面取指令的
先谈重点就是这几个:
这里又有坑了,如果一条指令占了半个存储单元怎么办?
假 ...
计组9
本节单看书实际上较难理解,但PPT内容就很不错
首先明确具体的虚拟存储器整个的概况状态,再细化去划分
上面的就是虚拟存储器,下面就是之前学过的熟悉的Cache、主存层
然后再来一步步介绍这一块东西
首先不要去纠结快、慢表,记住快表是慢表的一部分
CPU会通过一个虚拟地址,首先根据其虚拟页号去访问快表,快表没有命中再找慢表
如果快表命中那么直接把相对应的物理地址给传过去合并为实际地址
如果慢表命中那么直接把相对应的物理地址给传过去合并为实际地址
一旦不命中,组合就会比较复杂,分为三种缺失可能性
其中如果主存中没有,即慢表没有命中,那么Cache也是一定不会命中的,一共五种
如果慢表中没有命中那么快表也是一定不会命中的,因为快表是慢表的一部分
但记住,一旦产生缺失,最终一定是需要更新这个表的
计组8
局部性原理的本质实际上是对CPU预测的一种解释
空间局部性是指CPU会对这个数据周围,尤其特指数组、向量、指令集等集合数据提前预读
为了定义这个周围,往往采用将主存分块(地址上虚拟,解释方法不同分块)
然后将这个周围的数据放在Cache里面
时间局部性是指CPU会对循环内的当前执行的这个数据进行存留,以备下次的继续使用
包括循环内执行的指令、操作数,基本都会进行存留,下次取用的时候也就会方便一些的
这些都会存于Cache中,通过预测方式得到了高命中率
另外,性能分析那边,又到了文字游戏:提高了多少,提高了几倍,提高到几倍….
比较器么,书上写的比较模糊,但大致上应该是在说这样
直接映射是一个就够了,全相联就要N个,而组内就只需要组内可能是其存放的数量R个
一个块,可能在Cache里面存放在多少个位置上,就要多少个比较器
PS:
主存的块被称为“页、页面、页框”,Cache的块被称为是“行”
然后说几句吧,即使是块内,也是有多个地址对应多个数据行存储的,所以才要组内地址
主存和CPU交互是以机器字,而和Cache交互是以块为单位
主存地址是不会改变的,只是CPU在根据不同的映射法对 ...
计组7
一些乱七八糟的概念,考察概率不高
说几个名词,一个磁盘存储器往往有多个磁盘,连接在一根主轴上
每个盘都会对应一个读写磁头,也称为磁头数、记录面数、磁盘数等,是三维坐标
磁道数,指每个磁盘一圈圈绕出去的磁道数量,多个磁盘叠加起来就是柱面,也称柱面数
磁道和磁道间不是完全相连的,是有空隙保证精度的,磁道内也不是连续的,是分扇区的
一个磁道就有多个扇区,一个磁盘的扇区数量是固定的,每个扇区都是对应的一个角度
然后就是补充内容,每圈磁道的存储内容大小完全相同,因而从外到内存储密度增加
扇区是磁盘读取的最小单位,也称为块
磁盘性能指标上
非格式化容量=磁盘数量·磁道数量·每个磁道所蕴含的可用磁化单元数
格式化容量=磁盘数量·磁道数量·磁道扇区数量·每个扇区容量,感觉还是有区别
格式化容量小于非格式化容量
一般只考计算,尤其是数据传输速率和平均存取时间
对于磁盘地址,记住需要确定坐标的值:磁盘存储器号、磁盘号、角度(扇区、R(磁道数
存取时间的计算应该没什么问题,就是套公式
数据传输率这边其实可以改很多东西出来,变体,但记住几个关系
一个磁道有多个扇区,多个不同磁道的存储大小一样,扇区的存 ...
计组6
先谈位拓展,位拓展是一个必须的操作,如果存储字长没CPU数据总线那么长,必须拓展
位拓展的本质就是把一个二进制数分到了多个存储芯片的同一地址内存储
所以也是能看到地址总线是接到每一个芯片上面的
即将N位变成了N/M1·M位
这里的话,不需要区分片选信号,因为所有片都需要提供某几位二进制数的位
所有都需要工作
字拓展实际上相当于把原先的64K变为了16K+16K+16K+16K的形式
而这里不必要修改输出的位数,因而就直接连接即可,不过需要单独区分选片信号
然后每次根据不同的地址信号去选取不同的存储芯片即可,这里又衍生出两类信号选择法
一类是用某一位去选择一块芯片,并且为了防止选中别的芯片,只能这一位有效
其他位必须都是无效的,这个就是线选法,一般称CPU地址高位为选择地址位(虚拟位
低位的话就是片内选地址了,低位都是和芯片接着的,数目一样
所以说这个非常浪费,8个芯片就需要8个引脚,明明依靠值选择就可以3个引脚解决的事
一类就是译码片选法,一般采用一个MCU来进行输出选择,这里就是三个引脚解决的事
值选择,而非位选择,利用率高
这两种考起来的区别还是比较明显的,注意点
另 ...
计组5
略微关注下其中的存储器分类,尤其是除存储介质的后面几个,书上都有,多去看
都是偏概念的东西,常见的东西、英文名出来需要知道它是属于哪个类别的,到时候整理
补充下层次结构,书上基本都有,不多赘述
注意下层次结构里面最高还有一个寄存器的存在,别忘了这个在CPU内存在
关于命中率,先从cache里面找,再去内存里面,再去外存里面
这是一个概率问题,越是上层的内容存储的越是经常被调用的东西,下层的访问概率很低
所以容量越来越小、速度越来越快、上面的命中率也会非常高
寄存器、Cache、主存都可以直接被CPU访问,相关的操作由硬件还是软件结合见上图
另外,CPU的速度是远远快于存储器的存取周期的
关于寻址:
一般可以这样理解,按字节编址,意思就是把多位存储元视作一个存储单元
即,给一个存储单元一个地址,这个地址实际上也就分配了该存储单元所占用的存储元
一个字节就是8位/8个存储元视作一个存储单元,这里当然是默认存储元是一位二进制的
图内谈论的实际上是存储单元矩阵,将多个8位的存储单元视作一个单元,本质一样
例如按字节寻址那么每个单元就是8位
简单理解就是存取时间其实比较短, ...
计组4
规格化:
不论补码还是原码表示法,均是小数,其中小数点前一位是符号位,后面才是数值最高位
左规,一般情况不论原码还是补码均是补0,同时阶码变小,因为小数点右移
在因为右移导致一些有效位出去的情况下,需要把有效位保留并移动回原来的数内
左规这里不需要担心溢出,因为顶多是下溢,机器是将其视作为零的
右规,指代尾数有效位进位到小数点前,可能导致符号位的溢出,同时也需要保留进位
右规是指代小数点左移,会导致阶码变大
进行一次全体右移,把原符号位补回,同时需要进行两个判断
第一个就是是否右规导致阶码溢出,如果溢出那么就没救了,直接不用干了
第二个就是因为右规会有低位的舍弃,此时需要进行舍入,可能也会导致尾数变大进位
这时候就可能再次右规,可能又会产生阶码的溢出
简单来说,就是数值位溢出其实没什么事情,可以依靠阶码变大来弥补
如果阶码溢出,那么是真没救了
注意下补码、原码的规格化判断有一定的不同,主要在于数值位的表示法上
另外注,基数不同的情况下的特殊处理
首先就是基数扩大,那么每次移动的位数自然也会变化,也要看是几进制的数再说
基数扩大,那么最终规格化的表示也会有所不同,但核心应该是一样,就是 ...
计组3
基本数电知识补充:
加法器简单知识(不必深究),可见加法器、并行进位加法器篇章
基本原理:
可构建:
串联后可构建:
注意进位需要上一次运算完成后才能判断,因而串联效率不高
而进位实际上可以在一开始就算完,后面一次性给出,因而就可以构建并行加法器
这边才是核心内容,需要了解其各端口表示什么,不必追求死磕原理
虽然原理后面学下去也能懂就是了
注:加法器是ALU的核心器件
MUX(多路选择器:
若是八个输入端则需要3位二进制来表达不同的输入端口号
本质是用二进制表达其端口号,控制信号即为指定该位置的输入可进入
注:有时候可能会多一个控制信号单独表示什么都不选择,那么就需要不止三位信号
或者拿一个空端口作为一个补充也可以实现同样功能,具体再议
三态门,区分于非门,当op为1时允许通过,当op为0时禁止信号通过
op只需要一位即可,因为一位就是二进制的0和1两种状态,可以拥有非运算的特性
电路基本不怎么考,上面的内容知道即可
ALU:
核心是参考了MUX的多路选择需要的位数
以及需要注意的是ALU、通用寄存器组的宽度位数即为机器字长
移位,向右或者向左移位
对正数来说 ...
码的互相转换以及补充
对下图需要注意下溢出的情况判断,后面自然会有讲三种方法
原码可表示小数,也可以表示整数,但一般在计算机中采用原码表示浮点数的尾数
移码只能表示整数,注意
补码应用非常广,也是最有效率的,ALU内的计算几乎全部依赖于补码,不论小数整数
无非就是乘除法的时候会采用不同取模运算罢了,模四或者模二
无符号数就不多说了,就是简单的机器数
对于补码,真值、原码、移码、反码的全面总结,一共二十种(可以优化表述
具体补位的长度看题目给定,如果给定字长为X位就进一步补位数即可
真值-补码:
正数:即为正数转原码,原码补码相同,数值位高位补0
负数:即为负数转原码,原码转反码,反码转补码
最高位符号位定1,数值位高位补0转为原码
除符号位最高位全部取反转为反码
低位加一转为补码
真值-原码:
正数:数值位高位补0
负数:最高位符号位定1,数值位高位补0
真值-反码:
正数:即为正数转原码,原码反码相同,数值位高位补0
负数:即为负数转原码,原码转反码
最高位符号位定1,数值位高位补0转为原码
除符号位最高位全部取反转为反码
真值-移码(仅适用于偏移量为恰到好处的:
正数:即为正数转原码,原码转补码, ...