Record study record life
计算机组成原理
计算机组成原理

计算机组成原理

本文为考研复习结合王道教程做的一些笔记与截图

文章目录

计算机硬件的基本组成

计算机的结构

image-20230601150838380


**“存储程序”**的概念是指将指令以二进制代码的形式事先输入计算机的主存储器,然后按其 在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直 至程序执行结束。

image-20230620162806074image-20230620162854054

运算器

image-20230606204238529


控制器

image-20230601153142970

image-20230601155003218

image-20230601162403860

image-20230601164957098


### 计算器的工作过程

image-20230620163050541


计算机系统层次结构

image-20230620163157466


数据的表示和运算

数制与编码

进位计数制

除基取余法(整数部分的转换)

乘积取整法(小数部分的转换)

真值:符合人类习惯的数字

机器数:数字实际存到机器里的形式,正负号需要被“数字化”(0正 1负)

image-20230603204516567

注意:有的十进制小数无法用二进制精确表示,如:0.3


定点数与浮点数的编码表示

定点数:小数点的位置固定 Eg:996.007 –常规计数

浮点数:小数点的位置不固定 Eg:9.96007*102 –科学计数法

image-20230603210353034

无符号数:整个机器字长全部的二进制位均为数值位,没有符号位,相当于数的绝对值。

有符号数的定点表示:定点整数,定点小数

注:可用原码、反码、补码三种方式来表示定点整数和定点小数。还可用移码表示定点整数。

原码:用尾数表示真值的绝对值,符号位“0/1”对应“/正/负”

若机器字长n+1位,原码整数的表示范围: -(2n-1)≤(2n-1)

若机器字长n+1位,原码小数的表示范围: -(1-2-n)≤(1-2-n)

真值0+0-0两种形式

image-20230603213357369

反码:若符号位为0,则反码与原码相同;若符号位为1,则数值位全部取反

反码是原码转变为补码的一个中间过程

若机器字长n+1位,原码整数的表示范围: -(2n-1)≤(2n-1)

若机器字长n+1位,原码小数的表示范围: -(1-2-n)≤(1-2-n)

真值0+0-0两种形式

补码:整数的补码=原码;负数的补码=反码末位+1

image-20230603215643879

移码:补码的基础上将符号位取反。注意:移码只能用于表示整数(方便用于真值大小比较)

image-20230603220704703


各种码的作用

减法运算转换为加法运算需要用补码

补码的作用:使用补码可将减法操作转变为等价的加法,ALU中无需集成减法器。执行加法操作时,符号位一起参与运算。

移码的作用:移码表示的整数很方便对比大小


运算方法和运算电路


逻辑门电路

基本运算:与或非

复合逻辑运算:与非、或非、异或、同或

异或:两输入相异的时候,输出为1 (奇偶校验)

同或:与异或相反 也叫 异或非门

三种基本逻辑运算的优先级:非>与>或

image-20230603223404675


一位全加器

image-20230603225426518

串行进位加法器

image-20230603225805932


串行进位加法器

image-20230604224641858


并行进位加法器

image-20230604224713478

image-20230604224723197


定点数的运算


定点数移位

  • 原码:

只移动数值位,符号位不改变

右移:÷,高位补0,低位舍弃。若舍弃的位=0则相当于÷2;若舍弃的位≠0,则会丢失精度

左移:×,低位补0,高为舍弃。若舍弃的位=0则相当于×2;若舍弃的位≠0,则会出现严重误差

  • 反码

反码移位正数与原码相同

负数左移低位补1,右移高位补1

  • 补码

正数与原码相同

负数:最右边的1及其右边同原码。最右边的1的左边同反码。

右移(同反码):高位补1,低位舍弃

左移(同原码):低位补0,高位舍弃

  • 逻辑移位:可以看作对无符号数的算数移位

  • 循环移位:循环左移、循环右移、带进位的循环移位

image-20230605221023884


定点数加减运算

原码和补码、溢出判断

  • 原码的加法运算

    • 正+正 绝对值做加法,结果为正

    • 负+负 绝对值做加法,结果为负

    • 正+负 绝对值大的减绝对值小的,符号同绝对值大的数

  • 原码的减法运算

    • 同加法操作

  • 补码的加减运算

    • 符号位同样参与运算就行

溢出判断

上溢:“正数+正数“才会上溢,—-正+正=负

下溢:”负数+负数“才会下溢,—-

  • 判断溢出

    • 方法一:采用一位符号位

    • 方法二:上溢:符号位进位0,最高数值位进位1;下溢:符号位进位1,最高数值位进位0

    • 方法三:采用双符号位,正数符号为00,负数符号为11,第一个符号位为原本,第二位为现实的

双符号位补码又称:模4补码

单符号位补码又称:模2补码

image-20230605224439523


原码的乘法运算

符号位异或,数值位取绝对值进行乘法运算

需要进行n轮加法、移位操作

image-20230606201057833

image-20230606202125796


补码的乘法运算

补码进行n轮加法、移位,最后再多来一次加法

每次可能+0、+[x]、-[-x]

image-20230606202145999


原码的除法运算

  • 恢复余数法

image-20230606210012510

  • 加减交替法

image-20230606205948741

image-20230606211005782

image-20230606211400740


补码的除法运算

image-20230606211854566

image-20230606212253270


数据的存储和排列

  • 大小端模式

    • 大端:便于人类阅读,低地址存高字节数据

    • 小端:便于机器阅读,低地址存低字节数据

现代计算机通常时按字节编址,即每个字节对应1个地址

通常也支持按字、按半字、按字节寻址

加入存储字长为32位,则1个字=32bit,半字=16bit。每次访存只能读/写1个字。

  • 边界对齐

image-20230606213445831


浮点数的运算


浮点数的表示

image-20230606214200154

阶码:常用补码或移码表示的定点整数

尾码:常用原码或补码表示的定点小数

浮点数的真值:N=rE×Mimage-20230606215642402

image-20230606220525321

image-20230606221018118


IEEE754

image-20230607203359144

image-20230607203559964

image-20230607203804048

image-20230607203832658

image-20230607204614268


浮点数的加减运算

image-20230607210552950

image-20230607210728538

image-20230607210753907


浮点数强制类型转化

image-20230607211105951

image-20230607211604439


存储系统


存储系统的基本概念

主存-辅存:实现虚拟存储系统解决了主存容量不够的问题(数据调用由硬件+操作系统完成)

Cache—主存:解决了主存与CPU速度不匹配的问题(数据调用由硬件自己完成)

存储器(按层次分类):高速存储器(Cache)、主存储器(主存、内存)、辅助存储器(辅存、外存)

读写存储器(Read/Write Memory)——即可读、也可写(如:磁盘、内存、Cache)

只读存储器(Read Only Memory)-—只能读,不能写(如:实体音乐专辑通常采用CD-ROM,实体电影采用蓝光光碟,BIOS通常写在ROM中)

image-20230609164900344

image-20230608194109916


主存储器


基本组成

image-20230609184022245

image-20230609184005637

image-20230609184059468

image-20230609184109885


SRAM&DRAM

DRAM(动态)用于主存,使用栅极电容

  • 读出1:MOS管接通,电容放电,数据线上产生电流,破坏性读出。读出后应有重写操作。

  • 读出0:MOS管接通后,数据线上无电流。

  • 电容最多只能保存2ms电荷,需要“刷新”

SRAM(静态)用于Cache,使用双稳态触发器。

  • 读写都稳定,无需重写,速度更快,集成度低,功耗大,成本高

DRAM刷新

image-20230609191507998

image-20230609191754214


ROM

image-20230609192333236

image-20230609193005462


双端口RAM和多模块存储器

image-20230609195252986

image-20230609200326439

image-20230609200529313

image-20230609200547531

主存储器与CPU之间的连接


连接原理

image-20230611162741634

image-20230611162833520


位扩展

由于存储芯片的位数限制,数据总线得不到充分利用,于是进行位扩展

image-20230611163147292

image-20230611163421047

这样就拓展位了8位,将1K×1位扩展为了8K×8位的存储器


字扩展

地址总线得不到充分利用,数据总线已经得到了充分利用,进行字扩展,增加地址总线利用率

剩余的地址位用作片选信号,这样使得可以选中不同的芯片

 
左图连同一个地址则重复了,右图剩余地址用作片选信号

如上为线选法,存在问题,可优化,问题为,不能同时选1,这样就写入一样的了,11就没用到

image-20230611164530911

可通过译码器进行优化,译码器片选法

image-20230611164841574

image-20230611164935443

线选法 译码片选法
n条线–>n个选片信号 n条线–>2^n个选片信号
电路简单 电路复杂
地址空间不连续 地址空间可连续


字位同时扩展法

多块芯片为一组(相当于位扩展),再进行字扩展

image-20230611165812453

译码器补充

画了o是低电平有效,相当于非

image-20230611170056208

多个使能

image-20230611170155440

image-20230611170321020


image-20230611165935098


外部存储器

磁盘存储器

image-20230611202724140

image-20230611203412500

image-20230611204704736

旋转延迟时间可以按转半圈来算

image-20230611204810872

image-20230611210149165

image-20230611210228199

image-20230611210450981


固态硬盘SSD

image-20230611211140150


高速缓冲存储器

Cache的基本原理

局部性原理

  • 空间局部性:在最近的未来要用 到的信息(指令和数据),很可能与现在正在使用的信息在存储空 间上是邻近的

  • 时间局部性:在最近的未来要用 到的信息,很可能是现在正在使用的信息

性能分析

设tc为访问一次Cache所需的时间,tm为访问一次主存的所需时间

命中率H:CPU欲访问的信息已在Cache中的比率

缺失(未命中)率:M=1-H

Cache-主存系统的平均访问时间t为t=Htc+(1-H)*(tc+tm//先访问Cache,若未命中再访问主存

t=Htc+(1-H)*tm    //同时访问Cache和主存,若Cache命中则立即停止访问主存

 

image-20230613153903858


Cache和主存的映射关系

全相联映射(随意放)

image-20230613155928262


直接映射(只能放固定位置)

末尾几位不用存,因为硬件不需要取余,只需对比后面几位,后面几位为cache块号

image-20230613160037651


组相联映射(可放到特定分组)

末尾几位不用存,因为硬件不需要取余,只需对比后面几位,后面几位为cache组号,组号相同则为同一组

image-20230613160741894


image-20230613160931899


Cache替换算法

随机算法

随机算法(RAND, Random)——若Cache已满,则随机选择一块替换。

随机算法——实现简单,但完全没考虑局部性原理,命中率低,实际效果很不稳定

image-20230613161751528


先进先出算法

先进先出算法(FIFO, First In First Out)——若Cache已满,则替换最先被调入Cache 的块。

先进先出算法——实现简单,最开始按#0#1#2#3放入Cache,之后轮流替换 #0#1#2#3 FIFO依然没考虑局部性原理,最先被调入Cache的块也有可能是被频繁访问的

image-20230613162032681


近期最少使用算法

近期最少使用算法(LRU, Least Recently Used )—— 为每一个Cache块设置一个“计数器”,用于记录 每个Cache块已经有多久没被访问了。当Cache满后替换“计数器”最大的

LRU算法——基于“局部性原理”,近期被访问过的主存块,在不久的将来也很有可能被再次访问,因 此淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,Cache命中率高。 若被频繁访问的主存块数量 > Cache行的数量,则有可能发生“抖动”

  • ①命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变

  • ②未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲行全加1;

  • ③未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1。

image-20230613162301228

做题技巧:从当前位置往前看,找到最后一个出现的主存块,就是最近最少使用的将其替换


最不经常使用算法

最不经常使用算法(LFU, Least Frequently Used )—— 为每一个Cache块设置一个“计数器”,用于记录每个Cache块被访问过几次。当Cache满后替换“计数器”最小的

LFU算法——曾经被经常访问的主存块在未来不一定会用到(如:微信视频聊天相关的块), 并没有很好地遵循局部性原理,因此实际运行效果不如 LRU

image-20230613163148962


image-20230613163214473


Cache写策略

写命中
  • 写回法

写回法(write-back) —— 当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主 存,只有当此块被换出时才写回主存 被替换时写回一整块

减少了访存次数,但存在数据不一致的隐患。

image-20230613164358303

  • 全写法

全写法(写直通法,write-through) —— 当CPU对Cache写命中时,必须把数据同时写入Cache 和主存,一般使用写缓冲(write buffer) 写 写 Cache块被替换 时无需写回

访存次数增加,速度变慢,但更能保证数据一致性

使用写缓冲,CPU写的速度很快,若写操作不频繁,则效果很好。若写操作很频繁,可能会因为写缓冲饱和而发生阻塞

image-20230613164706486

image-20230613164719842


##### 写不命中

  • 写分配法

写分配法(write-allocate)——当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache 中修改。通常搭配写回法使用。

写回法(write-back) —— 当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存, 只有当此块被换出时才写回主存

  • 非写分配法

非写分配法(not-write-allocate)——当CPU对Cache写不命中时只写入主存,不调入Cache。 搭配全写法使用。

只有”读”未命中时才调入Cache,写操作未命中就只写入主存不调入Cache

全写法(写直通法,write-through) —— 当CPU对Cache写命中时,必须把数据同时写入Cache和 主存,一般使用写缓冲(write buffer)


多级Cache

image-20230613165548843


image-20230613170020758


页式存储器

逻辑地址(虚地址):程序员视角看到的地址

物理地址(实地址):实际主存的中的地址

image-20230614095928543

CPU执行的机器指令中,使用的是“逻辑地址”,因此需要通过“页表”将逻辑地址转为物理地址。

页表的作用:记录了每个逻辑页面存放在哪个主存块中。

image-20230614100749059

快表TLB

有点类似Cache

快表,加快地址变换的速度

image-20230615163120098

image-20230615164341566


虚拟存储系统

image-20230615165843117

image-20230615170541366

image-20230615170822854

页式虚拟存储器:按页大小拆分

段式虚拟存储器:按功能拆分

段页式虚拟存储器:先分段再分页


指令系统

指令系统的基本格式

一条指令通常包括操作码字段和地址码字段两部分。


按地址码数目分类

零地址指令

image-20230615195042311

  1. 不需要操作数,如空操作、停机、关中断等指令

  2. 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶

一地址指令

image-20230615195201994

  1. 只需要单操作数,如加1、减1、取反、求补等

    指令含义:OP(A1)→A1 ,完成一条指令需要3次访存:取指–>读A1 –>写A1

  2. 需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)

    指令含义: (ACC)OP(A1)→ACC 完成一条指令需要2次访存:取指–>读A1

二地址指令

image-20230615195714181

常用于需要两个操作数的算术运算、逻辑运算相关指令

指令含义:(A1)OP(A2)→A1

完成一条指令需要访存4次,取指→读A1 →读A2 →写A1

三地址指令

image-20230615195837272

常用于需要两个操作数的算术运算、逻辑运算相关指令

指令含义:(A1)OP(A2)→A3

完成一条指令需要访存4次,取指→读A1 →读A2 →写A3

四地址指令

image-20230615195859897

指令含义:(A1)OP(A2)→A3,A4=下一条将要执行指令的地址

完成一条指令需要访存4次,取指→读A1 →读A2 →写A3

正常情况下:取指令之后 PC+1,指向下一条指令

四地址指令:执行指令后,将PC的值修改位 A4 所指地址

image-20230615200217990


按指令长度分类

指令字长:一条指令的总长度(可能会变)

机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)

存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)

半字长指令、单字长指令、双字长指令 ——指令长度是机器字长的多少倍

指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存

  • 定长指令字结构:指令系统中所有指令的长度都相等

  • 变长指令字结构:指令系统中各种指令的长度不等


按操作码长度分类

  • 定长操作码:指令系统中所有指令的操作码长度都相同

    控制器的译码电路设计简单,但灵活性较低

  • 可变长操作码:指令系统中各指令的操作码长度可变 n位–>2n条指令

    控制器的译码电路设计复杂,控制器的译码电路设计复杂

定长指令字结构+可变长操作码–>扩展操作码指令格式 不同地址数的指令使 用不同长度的操作码


按操作类型分类

image-20230615200951963

image-20230615201329020


拓展操作码指令格式

image-20230615202048333

image-20230615202108291

image-20230615203625503

image-20230615203522201


指令的寻址方式

指令寻址

  • 顺序寻址

    通过程序计数器PC加1(1个指令字长),自动形成下一条指令的地址。(变长指令字结构,可以根据操作码判 断这条指令的总字节数 n, 修改PC的值)

  • 跳跃寻址

    通过转移类指令实现。所谓跳跃,是指下条指令的地址不由程序计数器PC自动给出,而由本条指令给出的下条指令地址的计算方式。而是否跳跃可能受到状态寄存器和操作数的控制,跳跃的地址分为绝对地址(由标记符直接得到)和相对地址(相对于当前指令地址的偏移量),跳跃的结果是当前指令修改PC的值,所以下一条指令仍然通过PC给出。

image-20230616140330003


数据寻址

数据寻址是指如何在指令中表示一个操作数的地址,如何用这种表示得到操作数或怎样计算出操作数的地址。

数据寻址的方式较多,为区别各种方式,通常在指令字中设一个字段,用来指明属于哪种寻址方式,由此可得指令的格式如下所示

image-20230616140927652

直接寻址

直接寻址:指令字中的形式地址A就是操作数的真实地址EA,即EA=A 。

image-20230616141746591


间接寻址

间接寻址:指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址。所在的存储单元的地址,也就是操作数地址的地址,即EA=(A) 。

间接寻址(Indirect Addressing)是一种计算机程序中使用的寻址方式,它通过一个地址指针来访问内存中的数据或指令。

在间接寻址中,CPU并不直接使用操作数中的地址,而是把该地址看作是一个指向另一个地址的指针。CPU首先读取这个指针指向的地址,然后再根据这个地址来获取实际的操作数值。这个过程也称为间接引用(Indirection)。

例如,在汇编语言中,可以使用间接寻址来实现数组访问。假设有一个数组a,其起始地址存储在寄存器R1中,要访问第i个元素,可以使用如下代码:

MOV R2, i  ; 把i加载到寄存器R2中
MOV R3, [R1+R2] ; 使用间接寻址,将a[i]存放到寄存器R3中
在这个例子中,[R1+R2]就是一个间接寻址,它先把R1和R2相加得到一个地址,然后从这个地址中读取数据,即为a[i]的值。通过使用间接寻址,程序员可以很方便地访问数组中的元素,同时也提高了程序的灵活性。

image-20230616142010074


寄存器寻址

寄存器寻址:在指令字中直接给出操作数所在的寄存器编号,即EA =Ri ,其操作数在由Ri 所 指的寄存器内。

image-20230616142928403


寄存器间接寻址

寄存器间接寻址:寄存器Ri 中给出的不是一个操作数,而是操作数所在主存单元的地址, 即EA=(Ri ) 。

image-20230616143134543


隐含寻址

隐含寻址:不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址 。

image-20230616143300733


立即寻址

立即寻址:形式地址A就是操作数本身,又称为立即数,一般采用补码形式。 #表示立即寻址特征。

一条指令的执行: 取指令 访存1次 执行指令 访存0次 暂不考虑存结果 共访存1次

优点:指令执行阶段不访问主存,指令执行时间最短

缺点: A的位数限制了立即数的范围。 如A的位数为n,且立即数采用补码时,可表示的数据范围为−2n-1~2n-1− 1


相对寻址

相对寻址:EA=(PC)+A,其中 A是相对于PC所指地址的位移量,可正可负,补码表示

拓展:ACC加法指令的地址码, 可采用“分段”方式解决,即 程序段、数据段分开。

优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是 相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)。 相对寻址广泛应用于转移指令。

image-20230616153220603


基址寻址

基址寻址:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A, 而形成操作数的有效地址,即EA=(BR)+A。

优点:便于程序“浮动”,方便实现多道程序并发运行

拓展:程序运行前,CPU将BR的值修改为 该程序的起始地址(存在操作系统PCB中)

注:基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行 过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。

当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器, 但其内容仍由操作系统确定

优点:可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);用户不必考虑自 己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序 (整个程序在内存里边的浮动) 。

image-20230616151259965


变址寻址

变址寻址:有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和, 即EA= (IX)+A,其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器

注:变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变

(IX作为偏移量),形式地址A不变(作为基地址) 。

基址寻址中,BR保持不变作为基地址, A作为偏移量

优点:在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便 可很容易形成数组中任一数据的地址,特别适合编制循环程序。


基址&变址复合寻址


堆栈寻址

堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。

堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)”,原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)。

image-20230616155756625


image-20230616155616039

image-20230616160447121


##### 总结

简述各常见指令寻址方式的特点和使用情况

立即寻址操作数获取便捷,通常用于给寄存器赋初值。

直接寻址相对于立即寻址,缩短了指令长度

间接寻址扩大了寻址范围,便于编制程序,易于完成子程序返回。

寄存器寻址的指令字较短,指令执行速度较快。

寄存器间接寻址扩大了寻址范围。

基址寻址扩大了操作数寻址范围,适用于多道程序设计,常用于为程序或数据分配存储空间。

变址寻址主要用于处理数组问题,适合编制循环程序。

相对寻址用于控制程序的执行顺序、转移等。

基址寻址和变址寻址的区别:两种方式有效地址的形成都是寄存器内容+偏移地址,但是在基址寻址中,程序员操作的是偏移地址,基址寄存器的内容由操作系统控制,在执行过程中是动态调整的;而在变址寻址中,程序员操作的是变址寄存器,偏移地址是固定不变的。

取指也要一次访存

image-20230616155829959


程序的机器码表示

X86相关寄存器

image-20230619190104804

image-20230619190123932

image-20230619191023292


X86常用指令

image-20230619211906300

image-20230619211932538

image-20230619211943276


AT&T格式 vs Inter格式

image-20230619213200742

image-20230619213221079


选择语言

可以用函数名做标号

无条件转移指令

jmp <地址> #PC 无条件转移至 <地址>

jmp 128 #<地址>可以用常数给出 

jmp eax #<地址>可以来自于寄存器 

jmp [999] #<地址>可以来自于主存

jmp NEXT #<地址>可以用“标号”锚定

条件转移指令

cmp/tesr指令。cmp指令用于比较两个操作数的值,test指令对两个操作数进行逐位与运算,这两类指令都不保存操作结果,仅根据运算结果设置CPU状态字中的条件码。

image-20230619214951298

image-20230619220212117


循环语言

while

do-while

for

用条件测试和跳转组合起来实现循环的效果。

用条件转移指令实现循环,需要4个部分构成:

  • 循环前的初始化

  • 是否直接跳过循环?

  • 循环主体

  • 是否继续循环?

ecx循环计数器,不能用其他的寄存器

image-20230619220851576


函数调用机器表示

call ret指令

函数调用指令:call<函数名>

函数返回指令:ret

注:x86处理器中 程序计数器 PC (Program Counter) 通常被称为 IP(Instruction Pointer)

call指令的作用:

  • 将IP旧值压栈保存(保存在函数的栈帧顶部)

  • 设置IP新值,无条件转移至被调用函数的第一条指令

ret 指令的作用:

  • 从函数的栈帧顶部找到 IP旧值,将其出栈并恢复IP寄存器


如何访问栈帧?

image-20230619222437766

image-20230619222830077

image-20230619222856653


如何切换栈帧

image-20230619223908554

image-20230619223950069

注:每个栈帧底部,用于保存上一层的栈帧基址

push ebp
mov ebp esp
...
...
...
mov esp ebp
pop ebp


栈帧中包含什么内容?参数、返回值传递

栈帧最底部一定是上一层栈帧基址(ebp旧值)

栈帧最顶部一定是返回地址(当前函数的栈帧除外)

image-20230620092108814

image-20230620092852782

image-20230620092947953


CISC和RISC

复杂指令集精简指令集

image-20230620103900191

CISC大部分使用微程序控制

image-20230620103916157


中央处理器

CPU的功能和基本结构

CPU的功能

  • 指令控制。完成取指令、分析指令和执行指令的操作,即程序的顺序控制。

  • 操作控制。一条指令的功能往往是由若干操作信号的组合来实现的。CPU管 理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件, 从而控制这些部件按指令的要求进行动作。

  • 时间控制。对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。

  • 数据加工。对数据进行算术和逻辑运算。

  • 中断处理。对计算机运行过程中出现的异常情况和特殊请求进行处理。

控制器和运算器的功能

运算器:对数据进行加工

控制器

  • 协调并控制计算机各部件执行程序的指令序列,基本功能包括取指令、分析指令、执行指令

  • 取指令:自动形成指令地址;自动发出取指令的命令。

  • 分析指令:操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址。

  • 执行指令:根据分析指令得到的”操作命令”和”操作数地址”,形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作。

  • 中断处理:管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)。

运算器的基本结构

image-20230621203347194

image-20230621203601064

控制器的基本结构

image-20230621204424386

CUP的基本结构

image-20230621204603327

image-20230621205401398


指令的执行过程

指令周期

image-20230624160841793

image-20230624161437555

取指周期

image-20230624162335284

间址周期

image-20230624162427609

执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。

不同指令的执行周期操作不同,因此没有统一的数据流向。

中断周期

image-20230624162606101

执行方案

image-20230624163848685

image-20230624164315213


数据通路的功能和基本结构

image-20230627222828329

单总线结构

image-20230627222859665

例题

image-20230627222948706

image-20230627223106014

image-20230627223141969


专用通路结构

image-20230627223415260

例题

image-20230627223436305

image-20230627223501446

image-20230627223517587

image-20230627223526692

image-20230627223614250

image-20230627223623842

image-20230627223645188


控制器的功能和工作原理

硬布线控制器

image-20230628205635740

image-20230628205651671

image-20230628205701442

image-20230628205729455

image-20230628205735322

image-20230628205754342

image-20230628205803288


微程序控制器

image-20230628205832047

image-20230628205849105

image-20230628205859942

image-20230628205910821


总结

image-20230628205935331


微指令的设计

微指令的格式

image-20230628210005793

微指令的编码方式

直接编码(直接控制)、字段直接编码方式、字段简介编码方式

image-20230628210032495

image-20230628210016181

image-20230628210055980

微指令的地址形成方式

image-20230628210107206

image-20230628210122618


异常和中断机制

指令流水线

定义

image-20230627223846949

image-20230627223922245


指令流水线的性能指标

吞吐率

image-20230627224010959

加速比

image-20230627224022844

效率

image-20230627224052704


指令流水线影响因素分类

结构相关

image-20230627224154934

数据相关

image-20230627224207053

image-20230627224513700

image-20230627224523257控制相关(控制冲突)

image-20230627224244738


流水线的分类

image-20230627224325931

image-20230627224333233


流水线的多发技术

超标量技术

image-20230627224407643

超流水技术

image-20230627224427568

超长指令字

image-20230627224445565


五段流水线技术

image-20230627224622481

image-20230627224635323

image-20230627224657005

image-20230627224707434

image-20230627224719873


多处理机的基本概念

SISD:单指令单数据流

SIMD:单指令多数据流

MIMD:①共享存储多处理器系统②多计算机系统

向量处理器

硬件多线程的基本概念

细粒度多线程

粗粒度多线程

同时多线程(SMT)

image-20230627225004052

总线(选择)

总线概述

image-20230627135154612

总线的定义:总线是一组能为多个部件分时共享的公共信息传送线路。

为什么要用总线?

早期计算机外部设备少时大多采用分散连接方式,不易实现随时增减外部设备。为了更好地解决I/O设备和主机之间连接的灵活性问题,计算机的结构从分散连接发展为总线连接。

image-20230627135430763

共享是指总线上可以挂 接多个部件,各个部件 之间互相交换的信息都 可以通过这组线路分时共享。

分时是指同一时刻只允 许有一个部件向总线发 送信息,如果系统中有 多个部件,则它们只能 分时地向总线发送信息

总线的特性

  • 机械特性:尺寸、形状、管脚数、排列顺序

  • 电气特性:传输方向和有效的电平范围

  • 功能特性:每根传输线的功能(地址、数据、控制)

  • 功能特性:每根传输线的功能(地址、数据、控制)


总线的分类

image-20230627140546213

串行总线

优点:只需要一条传输线,成本 低廉,广泛应用于长距离传输; 应用于计算机内部时,可以节省 布线空间。

缺点:在数据发送和接收的时候 要进行拆卸和装配,要考虑串行-并行转换的问题

并行总线

优点:总线的逻辑时序比较简单, 电路实现起来比较容易。

缺点:信号线数量多,占用更多的布线空间;远距离传输成本高昂;由于工作频率较高时,并行的信号线之间会产生严重干扰,对每条线等长的要求也越高,所以无法持续提升工作频率。

片内总线

片内总线是芯片内部的总线。 它是CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线。

系统总线

系统总线是计算机系统内各功能部件(CPU、主存、I/O接口)之间相互连接的总线。 按系统总线传输信息内容的不同,又可分为3类:数据总线地址总线控制总线

  • 数据总线用来传输各功能部件之间的数据信息,它是双向传输总线,其位数与机器 字长、存储字长有关。

  • 地址总线用来指出数据总线上的源数据或目的数据所在的主存单元或I/O端口的地址, 它是单向传输总线,地址总线的位数与主存地址空间的大小有关。

  • 控制总线传输的是控制信息,包括CPU送出的控制命令和主存(或外设)返回CPU的 反馈信号。

数据通路表示的是数据流经的路径

数据总线是承载的媒介

通信总线

通信总线是用于计算机系统之间或计算机系统与其他系统(如远程通信设备、测试设备) 之间信息传送的总线,通信总线也称为外部总线。


系统总线的结构

单总线结构

image-20230627141626736双总线结构

image-20230627141715376

三总线结构

image-20230627142057833

四总线结构

image-20230627142311554

image-20230627142452258


总线的性能指标(大题第一问)

总线的传输周期(总线周期)

一次总线操作所需的时间(包括申请阶段、 寻址阶段、传输阶段和结束阶段),通常 由若干个总线时钟周期构成。

总线周期与总线时钟周期的关系比较魔幻, 大多数情况下,一个总线周期包含多个总线时钟周期 有的时候,一个总线周期就是一个总线时钟周期 有的时候,一个总线时钟周期可包含多个总线周期

总线时钟周期

机器的时钟周期。计算机有一个统一的 时钟,以控制整个计算机的各个部件,总 线也要受此时钟的控制。

总线的工作频率

总线上各种操作的频率,为总线周期的倒数

若总线周期=N个时钟周期,则总线的工作频率=时钟频率/N。

实际上指一秒内传送几次数据。

总线的时钟频率

即机器的时钟频率,为时钟周期的倒数。

若时钟周期为T,则时钟频率为1/T。

实际上指一秒内有多少个时钟周期

总线宽度

又称为总线位宽,它是总线上同时能够传输的数据位数, 通常是指数据总线的根数,如32根称为32位(bit)总线。

总线带宽

可理解为总线的数据传输率,即单位时间内总线上可传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单 位可用字节/秒(B/s)表示。

总线带宽 = 总线工作频率 × 总线宽度 (bit/s)= 总线工作频率 × (总线宽度/8) (B/s)

image-20230627143844378

注:总线带宽是指总线本身所能达到的最高传输速率

在计算实际的有效数据传输率时,要用实际传输的数据量除以耗时。

例题

image-20230627144111926


总线复用、信号线数

image-20230627144640904


image-20230627144730210


总线 操作和定时

总线周期的四个阶段

1)申请分配阶段:由需要使用总线的主模块(或主设备)提出申请,经总线仲裁机构决定将下一传输周 期的总线使用权授予某一申请者。也可将此阶段细分为传输请求总线仲裁两个阶段。

2)寻址阶段:获得使用权的主模块通过总线发出本次要访问的从模块的地址及有关命令,启动参与本次传输的从模块。

3)传输阶段:主模块和从模块进行数据交换,可单向或双向进行数据传送。

4)结束阶段:主模块的有关信息均从系统总线上撤除,让出总线使用权。

总线定时是指总线在双方交换数据的过程中需要时间上配合关系的控制,这种控制称为总线定时,它的实质是一种协议或规则

同步定时方式

image-20230627145937328

image-20230627145951357


异步定时方式

请求与回答

image-20230627150546337

image-20230627150509564


半同步通信

从设备速度跟不上,可以加各等待信号,等待数据准备

image-20230627151600809


分离式通信

由于准备数据的时候没有使用总线,但是主从设备还占用了总线,分离式通信将总线串数周期分离成两个周期,这样准备数据的时候就不占用总线了。

image-20230627151638401


输入和输出系统

I/O系统基本概念

IMG_1074


显存

一帧的大小

VRAM容量=分辨率*灰度级位数

VRAM带宽=分辨率*灰度级位数*帧频


IO接口

重点:IO接口中各种寄存器各种逻辑电路的作用

I/O接口:又称I/O控制器(I/O Controller)、设备控制器,负责协调主机与外部设备之间的数据传输

image-20230627163143729

image-20230627163444186

统一编址 独立编址

image-20230627164423822

image-20230627164726217


I/O方式

image-20230627201501907

程序查询方式

image-20230627201541346

image-20230627201614306

程序查询方式例题:

image-20230627201658437

程序查询方式

CPU一旦启动I/O,必须停止现行程序的运行,并在现行程序中插入一段程序。

主要特点:CPU有“踏步”等待现象,CPU与I/O串行工作。

优点:接口设计简单、设备量少。

缺点:CPU在信息传送过程中要花费很多时间用于查询和等待,而且如果采用独占查询, 则在一段时间内只能和一台外设交换信息,效率大大降低。

独占查询:CPU 100%的时间都在查询I/O状态,完全串行

定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次I/O状态。查询的 间隔内CPU可以执行其他程序


程序中断方式

中断的基本概念:程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂 时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现 行程序的断点处,继续执行原程序

image-20230627210146207

关中断的作用:实现原子操作(一气呵成的做完)

IF=1表示开中断(允许中断)

IF=0表示关中断(不允许中断)

中断请求标记触发器

每个中断源向CPU发出中断请求的时间是随机的。 为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR, 当其状态为“1”时,表示中断源有请求。 这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。

image-20230627210543340

中断判优实现

image-20230627210639881

中断判优-优先级设置

  1. 硬件故障中断属于最高级,其次是软件中断;

  2. 非屏蔽中断优于可屏蔽中断;

  3. DMA请求优于I/O设备传送的中断请求

  4. 高速设备优于低速设备;

  5. 输入设备优于输出设备;

  6. 实时设备优于普通设备。

image-20230627211446773

image-20230627211523873

image-20230627211719286

image-20230627212106588


多重中断

image-20230627212537442

中断屏蔽技术

image-20230627212812828

image-20230627212956277

image-20230627213019242

image-20230627213317014


中断方式例题

image-20230627214022022

image-20230627214154396

image-20230627214343440


DMA方式

image-20230627214835039

image-20230627220632204

image-20230627220737040

image-20230627220852251

image-20230627220920874

image-20230627221943729

image-20230627222108658

image-20230627222533280

赞赏

微信赞赏 支付宝赞赏

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注