当前位置:   article > 正文

408 知识点笔记——计组(指令系统、中央处理器)_程序计数器字长是多少

程序计数器字长是多少

4 指令系统

程序计数器、指令寄存器位数】

  • 程序计数器给出下一条指令字的访存地址,其位数应该是表示指令的寻址范围,取决于存储器的字数(即 存 储 器 大 小 指 令 字 长 \frac{存储器大小}{指令字长}
  • 指令寄存器用于接收取得的指令,取决于指令字长

△☼▽

在这里插入图片描述

分析:B,指令字长 32 位,故指令寄存器的位数至少为 32 位;主存有 4GB/4B = 1G 的主存字,故程序计数器的位数至少为 30 位

【指令字长、机器字长和存储字长】

  • 指令字长是指令中包含二进制代码的位数
  • 机器字长是 CPU 一次能处理的数据长度,通常等于内部寄存器的位数
  • 存储字长是一个存储单元存储的二进制代码的长度

于是,指令字长通常取存储字长的几倍数,取指周期就等于机器周期的几倍数。指令字长和机器字长没有必然的联系,考虑单字长指令 (指令长度等于机器字长)、半字长指令 (指令长度等于机器字长的一半) 和双字长指令 (指令长度等于机器字长的两倍),至于具体选择哪种

△☼▽

在这里插入图片描述

分析:B,半字编址,存储字长为 16 位,取一条指令 PC+2,指令长等于 2 倍的存储字长

【零地址指令】

  1. 不需要操作数的指令(空操作指令、停机指令、关中断指令
  2. 堆栈计算机中的零地址运算指令(它的操作数来自栈顶和次栈顶,运算结果再隐含地压入堆栈中)

【一地址指令】

  1. 只有目的操作数的单操作指令 OP(A1) → \rightarrow A1,通常为自增 1、自减 1、求反、求补等操作
  2. 隐含约定目的地址的双操作数 (ACC) OP (A1) → \rightarrow ACC,另一个操作数由 ACC 提供,运算结果也放在 ACC 中

【二地址指令】

此类指令的含义:(A1) OP (A2) → \rightarrow A2

二地址指令的常见分类
在这里插入图片描述
从上面表格可以说明二地址指令中的操作数的物理位置,记住仅有这三种情况

△☼▽(模拟题一)

在这里插入图片描述

分析:B,根据上面理论的内容,很容易知道 Ⅱ、Ⅲ 正确。我们现在来考察一下 Ⅰ算不算是 MM 型二地址指令呢?若操作数是从 Cache 调入的,则只有一种可能,即当操作数在内存时,正好 Cache 也有它的映射,可以直接从 Cache 中调入操作数。到目前为止一切正确,看起来似乎 Ⅰ 也算 MM 型。但指令不能直接指定某个 Cache 为操作数地址,其只能使用主存地址,故 Ⅰ 是不正确的

△☼▽

在这里插入图片描述

分析:
(1)寄存器-存储器型指令为二地址指令,指令格式如下

在这里插入图片描述
其中,操作码占 6 位;寻址方式占 1 位,I = 0 表示间接寻址,I = 1 表示直接寻址;由于有 32 个通用寄存器,故寄存器编号占 5 位;形式地址占 32-6-1-5=20 位。直接寻址的最大空间为 220
(2)如果增加基址寻址,且基址寻址采用通用寄存器,那么必须增加一个字段来表示基址寄存器到底使用了 32 个中的哪一个,故此时的指令格式如下:

在这里插入图片描述
这类指令可以访问的最大空间为 232

【三地址指令】

在这里插入图片描述

【四地址指令】

在这里插入图片描述
讨论一个问题:执行四地址指令需要几次访问存储器?

取指令 1 次,取操作数 2 次,存放结果1次,共4次(同理三地址指令也需 4 次访存,四地址指令多出来的一个地址是下一条要执行指令的地址)

【不定长操作码指令格式】

不定长操作码指令格式就是操作码的长度不固定,操作码的长度随地址码个数的减少而增加,不同的地址数的指令可以具有不同长度的操作码,在设计操作码指令格式时,必须注意以下两点:

  1. 不允许较短的操作码是较长的操作码的前缀
  2. 各指令的操作码一定不可以重复

具体操作过程中,我们都是从地址码个数较多的指令开始操作

△☼▽

在这里插入图片描述

分析:
(1)三地址指令:只需要 4 位操作码,4 位操作码可表示 16 种情况,而三地址指令只有 15 种情况,恰好最后一种情况 1111 用来扩展

(2)二地址指令:前面 4 位操作码已经固定了,即 1111,而 12 条二地址指令有需要 4 位操作码,因此操作码扩展到 8 位,1111 0000 ~ 1111 1011,而剩余的 1111 1100 ~ 1111 1111 可用来扩展成一地址指令

(3)一地址指令:操作码扩展到 12 位

1111 1100 0000 ~ 1111 1100 1111(16 条)
1111 1101 0000 ~ 1111 1101 1111(16 条)
1111 1110 0000 ~ 1111 1110 1111(16 条)
1111 1111 0000 ~ 1111 1111 1101(14 条)

而剩余的 1111 1111 1110 ~ 1111 1111 1111 又可以扩展成零地址指令

(4)零地址指令:

1111 1111 1110 0000 ~ 1111 1111 1110 1111(16 条)
1111 1111 1111 0000 ~ 1111 1111 1111 1101(14 条)

△☼▽ (注意下面两题对不定长 / 定长操作码指令格式的区别)

在这里插入图片描述

分析:A
对三地址指令,操作码只需要 5 位(25=32>29),此时还剩余 3 种操作码给二地址;而二地址又另外多了 6 位操作码,因此它的数量最大为 3×64=192( > 107),故指令字长最少为 23 位,但按字节编址,需要是 8 的整数倍,故 A 正确

△☼▽ (知道二地址指令数,接着推一地址指令数)

在这里插入图片描述

分析:A,16-5-5 = 6,即操作码占 6 位,可编码 26 = 64 条指令,在定长操作码的情况下,已经存在 60 条二地址指令,故仅可编码 4 条单地址指令

△☼▽ (知道二地址指令数、零地址指令数,推一地址指令数)

在这里插入图片描述

分析:B,2 条二地址指令,只需要 1 位操作码,但实际中,操作码占两位(两个地址码占 6 位,还剩下两位给操作码),于是还剩下 2 种编码没有使用,故零地址最多可编码 2×23×23 = 128 条指令,实际编码 10 条零地址指令,128-10 = 118,那么一地址指令最多可有 118/8 = 14 条指令(注意是取整除)

△☼▽
在这里插入图片描述

分析:
(1)二地址指令中操作码的位数为 16-2×6 = 4 位,故二地址指令最多可有 24-M-N 种
(2)(在不定长操作码指令中,能编码一地址指令、零地址指令时,二地址指令的最大数)由(1)知,二地址指令的操作码占 4 位,最多有 16 种指令,但是绝对取不到 16,如果取了 16,就不能扩展成一地址指令和零地址指令了。因此,二地址指令最多只有 15 条
(3)由于操作码位数可变,设一地址有 R R R 条,则满足 Q = [ ( 2 4 − P ) × 2 6 − R ] × 2 6 Q=\left [(2^4-P)\times2^6-R\right ]\times2^6 Q=[(24P)×26R]×26解之得 R = ( 2 4 − P ) × 2 6 − Q × 2 − 6 R=(2^4-P)\times2^6-Q\times2^{-6} R=(24P)×26Q×26

△☼▽ (计算操作码的平均长度)

在这里插入图片描述

分析:4 条三地址指令,操作码占 3 位,000 ~ 011;8 条二地址指令,100 000 ~ 100 111;150 条一地址指令,101 000 000 ~ 101 111 111(64 条),110 000 000 ~ 110 111 111(64 条),111 000 000 ~ 111 010 101(22 条)
故操作码的平均长度为 3 × 4 + 6 × 8 + 9 × 150 4 + 8 + 150 ≈ 8.7 \frac{3\times4+6\times8+9\times150}{4+8+150}\approx8.7 4+8+1503×4+6×8+9×1508.7

【标志寄存器与转移条件的逻辑表达式】

1)标志寄存器标志

CF:进位/借位标志;ZF:零标志位;SF:符号标志;OF:溢出标志

对 SF 我们做出如下的细节描述,

对于 SF 符号标志位,当运算结果最高有效位是 1,SF==1,否则,SF ==0;当此数是有符号数时,该数是个负数;当此数为无符号数时,SF 的值没有参考价值

△☼▽
在这里插入图片描述

分析:D,考虑如果是无符号数呢?则 SF 没有参考价值

2)与转移条件的逻辑表达式

在这里插入图片描述
下面给出一道题,并详细分析其表达式的形成过程,上述内容无需背记,只要理解就好

△☼▽(2011年真题)

在这里插入图片描述

分析:C,设两个无符号整数 x 和 y 且 x > y,于是,x-y 就肯定大于 0,故符号标志位 SF 和溢出标志 OF 用不上,已经排除 A、B、D 了,又 x-y > 0 肯定不会发生借位和进位,且 x≠y,故 CF 和 ZF 均为 0

△☼▽

在这里插入图片描述

分析:A,(R1) = -1,(R2) = -17,显然 -1-(-17) 不会发生溢出,(R1) > (R2),故不会发生借位

【立即数寻址】

通常把 # 放在立即数前面,表示该寻址方式为立即寻址
在这里插入图片描述
立即数寻址的用途:

  1. 需要传送一个循环次数给某专用寄存器 ,则可以使用立即寻址直接将循环次数作为立即数送入
  2. 需要将某程序的首地址送入程序计数器中,而且程序的首地址可以看成是一个操作数,则可以使用立即寻址直接将该程序的首地址作为立即数送入

总结来说,立即寻址方式通常用于对某寄存器或内存单元赋值

【直接寻址】

在这里插入图片描述
【隐含寻址】

隐含寻址指令中不明显给出操作数地址,其操作数地址隐含在操作码或者某个寄存器中。我们分析一个典型的例子,一地址格式的加法指令。操作码显示是 ADD,说明至少需要两个操作数才能做加法运算,但地址码仅给出了一个操作数的地址,那另外一个操作数呢?在 ACC (累加器)中

在这里插入图片描述
【间接寻址】

间接寻址分为一次间接寻址和多次间接寻址
在这里插入图片描述
假设指令字长和存储字长都是 16 位,其中 A 占 8 位,显然直接寻址范围为 28,而一次间接寻址的范围可达到 216;如果是多次间接寻址,则达不到 216,因为多次间接寻址需要使用存储字的第一位来标注间接寻址是否结束,其中 1 表示还需要继续访存寻址。当存储字首位位 0 时,表明此时为操作数的有效地址(注意,仍然找到只是有效地址 EA),很明显,存储字的首位不能作为操作数有效地址的部分,故多次间接寻址的寻址范围为 215

间接寻址便于子程序的放回查表(例如寻找中断服务程序入口就是使用间接寻址,类似于查表)

但是间接寻址也有很明显的缺点,N 次间接寻址需要访问存储器 N+1 次(前 N 次找到操作数的有效地址,第 N+1 次找操作数)

【寄存器寻址】

由于操作数在寄存器中,因此指令在执行阶段不需要访存,减少额执行时间;同时,寄存器寻址减少了指令字的长度
在这里插入图片描述
【寄存器间接寻址】

在这里插入图片描述
【基址寻址】

基址寄存器可采用隐式和显示两种。所谓隐式,是指在计算机内专门设一个基址寄存器(BR),使用时用户不必明显指出该基址寄存器,只需要指令的寻址特征位反映出基址寻址即可。显示是指在一组通用寄存器中,由用户明确指出哪个寄存器用作基址寄存器,基址寄存器的内容不可以由用户改变,但是用户号有权知道到底使用了哪个通用寄存器来作为基址寄存器

在这里插入图片描述

基址寻址便于解决多道程序问题

变址寻址

在变址寻址中,变址寄存器的内容是由用户设定的,在程序执行过程中其值可变,而指令字中的形式地址 A 是不可变的 (基址寻址中,用户操作的是偏移地址,基址寄存器的内容由操作系统控制,在程序执行过程中动态调整)

在这里插入图片描述

变址寻址非常适合处理数组问题和循环程序,由于变址寄存器的内容可由用户改变,淫才在处理数组问题时,只需将指令字中的形式地址设置为数组首地址,然后用户只需不断地改变变址寄存器 IX 的内容即可

相对寻址

相对寻址基于程序局部性原理

在这里插入图片描述
相对寻址有两个常见的用途:

  1. 用于转移类指令
  2. 便于编制浮动程序

【指令的操作数可能存放在机器的哪些位置】

(或换言之,地址码字段可能的情况)

内存单元(好理解)、寄存器(给出寄存器编号)、堆栈区(数据的地址隐含地由堆栈指针给出)、I/O 端口(I/O 接口中的寄存器与 CPU 寄存器内容交换)、指令中(立即数)

【寻址方式总结】
在这里插入图片描述
考察方式:

1)偏移寻址方式

基址寻址、变址寻址、相对寻址都可以看做是偏移寻址

2)取操作数

注意,操作数 = (EA)

△☼▽
在这里插入图片描述

分析:D
Ⅰ. 直接寻址,EA = 200,取出来的操作数应该是 300
Ⅱ. EA = 200,同 Ⅰ
Ⅲ. 存储器间接寻址,主存地址 200 所存的单元 300 为有效地址,访问的操作数是 400

△☼▽

在这里插入图片描述

分析:D,变址寻址,EA = A+(IX) = 2000H+1000H = 3000H,操作数即为 4000H

3)计算有效地址

△☼▽(模拟题一)

在这里插入图片描述

分析:B,0010 0010 0010 0010,X = 10,变址寻址,EA = A+(IX) = 1122H + 22H = 1144H

△☼▽(2009年真题)

在这里插入图片描述

分析:C,相对寻址,EA = (PC) + A,指令两字节,取完后 PC 的值为 2002H,故 EA = 2002H + 06H = 2008H(一定注意,相对寻址是在 PC 更新后再加上形式地址)

△☼▽

在这里插入图片描述

分析:C,变址寻址,EA = A+(IX) = B000H+007CH = B07CH

△☼▽ (补码给出形式地址)

在这里插入图片描述

分析:D,注意这道题有两个坑,一个是形式地址采用补码表示,一个是大端问题。先说地址计算的问题,形式地址为 FF12H,采用补码表示,其对应原码为 -00EEH,于是,EA = F000 0000H-0000 00EEH = EFFF FF12H。接着考虑大端的问题,大端是低字节高地址,于是最低有效字节所在地址应该为 EFFF FF12H+3 = EFFF FF15H

4)计算寻址范围

关于寻址范围的问题按照如下两点进行计算:

  1. 对偏移寻址,确定指令中地址码(或偏移量)所占位数
  2. 确定寻址方式(注意,多次间接寻址)

为什么要注意多次间接寻址呢?

多次间接寻址需要使用存储字的第一位来表示间接寻址是否结束,1 表示还需要继续访存寻址,0 表示此时为操作数的有效地址

在这里插入图片描述

△☼▽
在这里插入图片描述

分析:108 种操作,操作码占 7 位,7 种寻址方式,寻址特征占 3 位,地址码占 24-7-3 = 14 位,故直接寻址范围为 214;由于存储字长为 24 位,一次间接寻址的范围为 224;由于多次间接寻址需要使用一位来标记是否间接寻址完毕,因此只有 23 位用作寻址,寻址范围为 223

△☼▽(2014年真题)

在这里插入图片描述

分析:A,二地址指令,操作码 8 位,寻址一个寄存器需要 4 位,源操作数采用寄存器直接寻址用掉 4 位,目的操作数采用基址寻址也用掉 4 位,故最终留个偏移量的位数为 32-8-4-4 = 16 位,偏移量采用补码表示

5)计算偏移量/转移目标地址

△☼▽

在这里插入图片描述

分析:C,相对寻址,EA = A+(PC),08H+X+02H = 0FH,代入选项,满足的是 05H;同理,0FH+X+02H = 0H,代入选项,满足的是 F3H

(第二问正常处理的过程为:当前指令 300FH,+2 后为 3011H,取后一字节 0001 0001B = 17,转移到 04H = 4,第二字节位移量为 -13,其二进制补码为 1111 0011B = F3H)

但是把此题改编一下,问题可能就没有那么简单了,如下

△☼▽
在这里插入图片描述

分析:考虑小端问题
(1)当前的 PC 值为 240,取指令后 PC 值为 243,转移到 290,相对位移量为 290-243 = 47,其补码为 2FH,又小端方式存储,故第一字节为 2FH,第二字节为 00H
(2)同理,相对位移量为 200-243 = -43,其补码为 D5H,故第一字节为 D5H,第三字节为 FFH

△☼▽

在这里插入图片描述

分析:B,这里的变址寻址和我们所熟悉的编址寻址的方式不同,抓住 “ 其偏移地址为变址值乘以 sizeof(double) ”,按字节编址,2100H 和 2000H 之间差了 100H 个地址单位,故编址寄存器的内容即为 256/8 = 32

△☼▽(2014年真题)

在这里插入图片描述

分析:
(1)(如何确定编址方式)M 采用 32 位定长指令字,指令 1 和指令 2 的地址相差了 4 个单位,故 M 的存储器按字节编址

(2)(如何确定元素大小)左移两位相当于乘以 4,于是,数组 A 中两个相邻数据之间的间隔为 4 个地址单位,M 按字节编址,故每个元素占 4B

(3)(确定转移目标地址计算公式)bne 指令的机器代码为 1446FFAH,OFFSET 字段的内容为 FAH,OFFSET 用补码表示,其真值为 -6;取完 bne 后,PC 内容 +4,即 08048118H,跳转到 08048100H 地址,它们之间间隔了 24 个地址单位,故转移目标地址的计算公式为 (PC)+4+OFFSET×4

(4)(考察数据相关和控制相关)1 和 2,2 和 3,3 和 4,5 和 6 均发生数据相关, 6 会发生控制相关(因为 6 是转移指令);上一个循环的指令 5 会因指令 6 的执行产生 3 个时钟周期的阻塞,故不会与下一个循环的指令 1 发生数据相关

在这里插入图片描述

5)各指令获取操作数的快慢程度

抓住两个点:

  1. 访问次数
  2. 访问寄存器远快于访问存储器

△☼▽
在这里插入图片描述

分析:C
Ⅰ. 立即寻址,地址中的 A 给出的不是操作数的地址,而直接就是操作数
Ⅲ. 访问一次寄存器的速度远快于访问一次主存的速度
Ⅳ. 同 Ⅲ 的理由,访问变址寄存器的速度远快于访问主存的速度

6)结合指令格式综合考察

△☼▽

在这里插入图片描述

分析:
(1)50 条指令,操作码占 6 位,3 种寻址方式,寻址方式占 2 位,剩下 8 位为地址码

在这里插入图片描述
(2)定义 00 为直接寻址,01 为相对寻址,10 为间接寻址,11 没有使用,可增加一种寻址方式

△☼▽
在这里插入图片描述

分析:
(1)能定义 25 = 32 种指令
(2)立即寻址只能访问唯一的一个数据;直接寻址 28 个数据字;一次间接寻址 216 个数据字,多次间接寻址 215 个字;变址寻址 216 个数据字;相对寻址的范围是 PC 值附近的 28 个数据字
(3)如下表所示

在这里插入图片描述
解释一个小问题:立即数寻址的有效地址为什么是 PC ?PC 存放的是当前执行指令的地址,而立即数就在指令自身中

△☼▽ (考虑如何扩大寻址范围,重点关注 2、3 两小问)

在这里插入图片描述

分析:

(1)单字长指令,指令字长为 16 位。定义 105 中操作,操作码占 7 位;因为有变址寄存器和基址寄存器,故肯定有变址寻址和基址寻址,再加上题目中提到的两种寻址方式,故寻址方式占 2 位;形式地址占 16-7-2 = 7 位。因此,直接寻址的范围为 27,一次间接寻址的范围为 216

(说明一点,既然变址和基址都有了为什么题干中说有硬件 PC 却不算上相对寻址呢?不管要不要相对寻址都是要 PC 的,所以相对寻址一定要题干明显说明有,才认为有)

(2)双字长指令,指令字长 32 位,形式地址占 7+16 = 23 位,双字长指令的格式如下所示:

在这里插入图片描述
此时,直接寻址的范围为 223

(3)容量为 8MB = 4M×16 位,从(2)可知,双字长指令可访问 8M 的存储空间。另外,还有一种方法是:将变址寄存器和基址寄存器取 22 位,那么变址寻址和基址寻址都可以访问到 4M 的存储空间

△☼▽ (考虑如何扩大寻址范围,重点关注 2、3 两小问)

在这里插入图片描述

分析:
(1)寄存器-存储器型指令为二地址指令,指令格式如下

在这里插入图片描述
其中,定义 120 中操作需要 7 位操作码;8 个通用寄存器,寄存器编码需要 3 位;主存容量为 16K 字,要使指令可直接访问主存的任意地址,则地址码占 14 位;因题中未提及寻址方式,故不考虑,指令字长应为 7+3+14 = 24 位

(2)增加了 1 位寻址特征位,且采用基址寻址,故此时的指令格式如下:

在这里插入图片描述
通用寄存器只有 12 位,最大寻址空间为 212 = 4K 字,因此采用基址寻址不可以访问主存的任意单元,但可以将通用寄存器的内容左移两位,低位补 0,这样就可以形成 14 位的基址地址,然后再与形式地址相加,就可以实现

(说明一点,为什么可以左移两位?这样不是溢出了?大致的解释是寄存器有基本寄存器和移位寄存器。基本寄存器就是用于存储一组二进制代码的电路,而移位寄存器除了具有存储代码的功能以外,还具有移位功能。这里所用的基寄存器也就是移位寄存器了)

(3)由于不能够改变硬件结构,故不可以扩大寄存器的位数,而指令字长 24 位,即存储字长 24 位,224=16M,如此可以采用一次间接寻址,一次间接寻址的范围为 16M,远大于 64K 字的主存容量,所以此方法是满足题意的

△☼▽

在这里插入图片描述
在这里插入图片描述

分析:

(1)第一种指令为单字长二地址指令,属于 RR 型;第二种指令为双字长二地址指令,属于 RS 型,其中 S 采用基址寻址或变址寻址,R 由源寄存器决定;第三种指令属于双字长二地址指令,属于 RS 型,其中 R 由目标寄存器决定,S 由 20 位地址(直接寻址)决定

(2)第一种指令时间最短,因为是 RR 型指令,而其余两种指令都需要访问主存;第二种指令时间最长,在访问主存的同时还要进行有效地址的变换运算;第二种指令执行的时间不会等于第三种指令,因为多了有效地址运算的时间

(3)(F0F1)H/(3CD2)H 的前 6 位为 111100 = 0011 1100 = 3CH,故表示 LDA 指令

在这里插入图片描述
把 (13CD2)H 地址单元的内容送至 15 号寄存器

(2856)H = 0010 1000 0101 0110,代表 MOV 指令,把 6 号寄存器的内容送至 5 号目的寄存器

△☼▽(2010年真题)
在这里插入图片描述

分析:
(1)操作码占 4 位,最多可定义 16 种指令;Ms/Md 占 3 位,则 Rs/Rd 占 3 位,最多可有 8 个通用寄存器;主存地址空间大小为 128KB = 216×16 位,故 MAR 至少需要 16 位;计算机字长为 16 位,MDR 至少 16 位

(2)转移指令采用相对寻址,寄存器字长 16 位,PC 和 Rn 的表示范围均为 0 ~ 216-1,且主存地址空间为 216,故转移的目标地址范围为 0 ~ 216-1

(3)op:0010,Ms:001,Rs:100,Md:010,Rd:101,其对应的机器代码为 2315H

R4 的内容为 1234H,R5 的内容为 5678H,则 (R5)+1 = 5679H,R5 的内容从 5678H 变为 5679H,((R4)) = 5678H,((R5)) = 1234H,5678H+1234H = 68ACH,存储单元 5678H 的 内容从 1234H 变为 68ACH

△☼▽△(2013年真题)
在这里插入图片描述
在这里插入图片描述

分析:

(1)(从转移目标地址计算公式入手,确定编址方式和转移范围)顺序执行时,下地址指令为 (PC)+2,而计算机采用 16 位定长指令格式,故编址单位为字节。OFFSET 字段占 8 位,用补码表示,表示范围为 2-7 ~ 27-1,故转移范围为 (PC)+2-128×2 ~ (PC)+2+127×2,故最多向后跳转 127 条指令

(2)指令中 C = 0,Z = 1,N = 1,故根据 ZF 和 NF 的值来判断是否转移。执行指令时,ZF = 0,NF = 1,故需要转移。偏移量为 E3H,补码表示,扩展后为 FFE3H,乘 2(左移移位)FFC6H,故转移目标地址为 200CH+2+FFC6H = 1FD4H,故该指令执行后 PC 的值为 1FD4H;当 ZF = 0,NF = 0,不需要转移,故 PC 的值为 200EH

(3)无符号数比较小于等于时转移,不会用到符号标志位 NF,两个无符号相见,结果为零或负数都要发生转移,故 C = 1,Z = 1,N = 0

(4)(还是从转移目标地址计算公式入手)①:指令寄存器;②:移位寄存器;③:加法器

【转移指令】

1)无条件转移指令

无条件转移指令即只需将转移指令的地址送入程序寄存器(PC)

2)条件相对转移指令

条件相对转移指令,指令中给出操作码和相对偏移量,条件转移要根据转移判断条件

其执行步骤如下:

  • 程序计数器(PC)的内容送至地址寄存器
  • 读内存,读出内容送到指令寄存器(IR),PC 内容自增 1
  • 执行条件转移指令时要判别指定的条件,若为真,则执行,尚未修改的 PC 内容(自增 1 之前的值)送 ALU,相对偏移量送 ALU,ALU 执行加操作,结果送入 PC;否则顺序执行下一条指令

【程序控制指令】

程序控制指令包括无条件转移条件转移循环子程序调用等能够控制程序执行的指令

注意,中断隐指令并不是指令系统中一条真正的指令,它没有操作码,因此是一种不允许、也不可能为用户使用的特殊指令

【汇编语句】

指令解释
a d d   a , b , c add\ a, b, c add a,b,c a = b + c a =b+c a=b+c
j l e jle jle条件转移指令,小于或等于时发生转移(等同于 j n g jng jng
c m p cmp cmp比较指令,做减法运算( 第 一 个 操 作 数 − 第 二 个 操 作 数 第一个操作数-第二个操作数 ),不保存结果,只影响相应的标志位
m o v mov mov数据传送指令
c a l l call call本质上还是汇编跳转指令,常用来调用函数
i m u l imul imul有符号数乘法
j m p jmp jmp无条件跳转
r e t ret ret本质上还是汇编跳转指令,用于返回被调用的程序点
b n e bne bne数据跳转指令,标志寄存器中Z标志位不等于零时, 跳转到BNE后标签处
b e q beq beq数据跳转指令,标志寄存器中Z标志位等于零时, 跳转到BEQ后标签处

【CISC、RISC】

1)RISC 特点总结(Reduced):

  • 选取使用频率较高的一些简单指令以及一些很有用但又不复杂的指令,让复杂指令的功能由使用频率较高的简单指令的组合实现
  • 指令长度固定,指令格式种类 ,寻址方式种类
  • 只有取数/存数指令访问存储器,其余指令的操作都在寄存器内完成
  • 采用流水线技术 (注意:RISC 一定是采用流水线),大部分指令在一个时钟周期内完成。采用超标量和超流水线技术,可使每条指令的平均执行时间小于 一个时钟周期
  • 控制器采用组合逻辑控制,不用微程序控制
  • 采用优化的编译程序

2)CISC 特点总结

前面几点都是和 RISC 反过来,控制器大多采用微程序控制,难以用优化编译生成高效的目标代码程序

3)两者比较

  • RISC 的寄存器较多(特别注意一下),因此就可以减少访存次数,其次由于指令数和寻址方式少,因此指令译码较快
  • RISC 比 CISC 更便于设计,可降低成本,提高可靠性
  • RISC 能有效支持高级语言程序

4)如何在实际操作中辨别两者

△☼▽

在这里插入图片描述
在这里插入图片描述

分析:计算机 M 是 CISC,因为 M 的指令长短不一致

【关于虚地址的计算】

1)算机器指令代码长度

△☼▽

在这里插入图片描述

在这里插入图片描述

分析:push ebp 指令的虚地址为 00401020,最后一条指令 ret 的虚拟地址为 0040107F,相差 0040107F+1-00401020=60H 个地址单元,按字节编址,故 f1 的指令代码长度为 64B

2)确定计算机编址方式

如何确定计算机编址的方式?

核心是知道指令字长,知道相邻两条指令地址相差几个单位,这样就可以确定计算机的编址方式

除了这里给出的通过虚地址的方式可以知道两条指令相差的地址单位,还可以通过转移目标地址计算公式知道相差几个地址单位,具体可以参考上面的习题

△☼▽

在这里插入图片描述

分析:每条指令的地址相差 4 个单位,又一条指令占 4B,故计算机按字节编址

3)计算指令的虚地址

△☼▽(2019年真题)

在这里插入图片描述
在这里插入图片描述

分析:
(1)计算法 f(10) 需要调用函数 f1 10 次,执行 call 这条指令会递归调用 f1

(2)jle 这条指令是条件转移指令;jmp 指令、call 指令和 ret 指令一定会使程序跳转执行

(3)(注意指令机器码字长是不固定的)第 15 条指令的虚拟地址为 00401024,根据其机器码可以只有一字节内容,而第 16 条指令的虚拟地址为 00401025,相差一个地址单位,故 M 按字节编址,根据机器码可以知道 call 指令占 5 字节,故第 17 条指令的虚拟地址为 0040102A;call 指令的当前程序计数器的内容为 00401025,跳转到的虚拟地址为 00401000,设偏移量为 offset,有 0040102A+offset = 00401000,故 offset = FFFFFD6,显然 M 采用的是小端存储方式

(4)因为 int 占 32 位,其最大能表示的数为 231,显然 f(13) 超过了 int 能表示最大范围,故两者不相等;如果要使返回结果正确,将 函数 f1 的返回值修改为 long 类型

(5)若乘积的高 33 为非全 0 或非全 1,则 OF = 1;要使 CPU 在发生溢出时转异常处理,编译器应在 imul 指令后加一条溢出自陷指令,使得 CPU 自动查询溢出标志 OF,当 OF = 1时,调出溢出异常处理程序

5 中央处理器

【CPU】

1)CPU 的功能

CPU = 运算器+控制器
在这里插入图片描述
CPU 的功能:指令控制、操作控制、时间控制、数据加工、中断处理

一台计算机基本上可划分为两大部分:控制部件和执行部件。控制器就是控制部件,而运算器、存储器、外部设备相对控制器来说就是执行部件

△☼▽

在这里插入图片描述

分析:A,理论如上

2)CPU 的基本结构

在这里插入图片描述
3)CPU 中的主要寄存器

运算器中的寄存器,

  1. 暂存寄存器,用于暂存从主存读出来的数据(考虑 2015 年真题中 ALU 输入端 A 的暂存寄存器的作用)
  2. 累加寄存器 ACC,它是一个同通用寄存器,其功能是:当 ALU 执行算术或逻辑运算时,为 ALU 提供一个工作区,ACC 暂时存放 ALU 运算的结果信息。显然,运算器中至少要有一个累加寄存器
  3. 通用寄存器组,程序员可见
  4. 状态条件寄存器 PSW,PSW 包括两个部分:一是状态标志,如进位标志(C)、结果为零标志(Z)等,大多数指令的执行将会影响到这些标志位;二是控制标志,如中断标志、陷阱标志等

控制器中的寄存器,

  1. 程序计数器 PC
  2. 指令寄存器 IR
  3. 存储器数据寄存器 MDR,用来暂时存放由主存读出的一条指令或一个数据字(考虑 M(MAR) → MDR,MDR → IR),其作用有三条:① 作为 CPU、内存和外部设备之间信息传送的中转站;② 补偿 CPU、内存和外部设备之间才操作速度上的差别;③ 在单累加器结构的运算器中,MDR 还可兼作为操作数寄存器
  4. 存储器地址寄存器 MAR

考虑什么是用户可见/不可见寄存器?

用户可见寄存器指用户可以通过程序去访问的寄存器。IR、MAR、MDR 是 CPU 的内部工作寄存器,在程序执行的过程中是自动赋值的,程序员无法对其操作,称为用户不可见寄存器。而程序计数器中存放的是下一条需要执行的指令,因而程序员可以通过转移指令、调动子程序等指令来改变其内容,故而可见

4)若干相关的习题

△☼▽(2010 年真题)

在这里插入图片描述

分析:B,理论如上所述

△☼▽

在这里插入图片描述

分析:C,地址译码器在存储器中

△☼▽

在这里插入图片描述

分析:此处给出两道例题是 15 年真题中 43、44 两道综合性相当高的题目,其主体内容是关于中央处理器结构等问题,故在此全部给出

(1)通用寄存器 R0 ~ R3 和 PC 是程序员可见的;CPU 采用单总线结构,若无暂存器 T,则 ALU 的 A、B端口会同时获得两个相同的数据,致使数据通路不能正常工作

(2)ALU 共 7 种操作,故 ALUop 占 3 位;SR 共 3 种操作,故 SRop 占 2 位

(3)信号 SRout 所控制的部件是一个三态门,用于控制移位寄存器与总线之间数据通路的连接和断开(不是理解三态门的话,可以参考下 09 年真题给出来的这个图,结合理解一下)
在这里插入图片描述
(4)①、②、③、⑤、⑧

(5)连线:⑥→⑨ 和 ⑦→④(理解了第 6 小问的话,这里连线就显而易见了)

(6)每条指令长 16 位,计算机按字节编址,故一条指令占 2B,顺序执行时,下条指令地址为 (PC)+2,MUX 的一个输入端为 2,可便于执行 (PC)+2 操作(MUX 为多路选择器)

△☼▽

在这里插入图片描述
在这里插入图片描述

分析:
(1)寻址方式占 1 位,Md、Ms1、Ms2 共占 3 位,寄存器编号占 2 位,Rd、Rs1、Rs2 共占 6 位,还剩下 16-3-9 = 7 位,故最多可定义 27 条指令

(2)inc R1 为单地址指令,其机器码为 0240H(000 0001 0 01 000 000)
shl R2,R1 为二地址指令,其机器码为 0488H(000 0010 0 10 0 01 000)
sub R3,(R1),R2 为三地址指令,其机器码为 06EAH(000 0011 0 11 1 01 0 10)

(3)①:0;②:mov;③:mova;④:left;⑤:read;⑥:sub;⑦:mov;⑧:SRout

(4)inc R1 的执行需要 2 个时钟周期(可参照 shl 指令,第一个周期读出 R1 进行加一操作,第二个周期写回 R1);sub R1,R3,(R2) 的执行需要 4 个时钟周期(从图上方框中读出来的,一行即认为占用一个时钟周期)

【机器的速度除了和主频相关,还与什么相关?】

实际上机器的速度不仅与主频有关,还与机器周期中所含有的时钟周期数以及指令周期中所包含的机器周期数有关。机器周期所含时钟周期数少的机器,速度更快

△☼▽ (考虑主频和 MIPS 的关系)

在这里插入图片描述

分析:主频 8MHz,时钟周期 = 1/8×106 = 0.125us,机器周期 = 4×0.125us = 0.5us
(1)平均指令执行速度为 0.8MIPS,平均指令周期 = 1/0.8×106 = 1.25us
(2)每个指令周期含 1.25/0.5 = 2.5 个机器周期
(3)改用时钟周期为 0.4us 的芯片,主频 = 1/0.4×106 = 2.5MHz,平均指令执行速度为 (0.8MIPS/8MHz)×2.5MHz = 0.25MIPS
(4)设 CPU 的主频为 f,则有关系式 (0.8MIPS/8MHz)×f = 0.4MIPS,解之得 f = 4MHz

【指令周期】

1)基本概念

CPU 每取出并执行一条指令所需的全部时间,即 CPU 完成一条指令的时间,称为指令周期

指令周期被划分为几个不同的阶段,每个阶段所需的时间称为机器周期,又称为 CPU 工作周期

指令周期、机器周期和时钟周期的关系如下如所示

在这里插入图片描述

△☼▽(2019 年真题)

在这里插入图片描述

分析:D,时钟脉冲信号的宽度称为时钟周期,时钟周期是 CPU 工作的最小时间单位,根据图 5-4 显然 D)选项错误。时钟脉冲信号是由机器脉冲源发出的脉冲信号经整形和分频后形成的,时钟周期以相邻状态单元之间组合逻辑电路的最大延迟为基准确定

2)取指周期、间址周期、执行周期和中断周期

在这里插入图片描述
【指令执行方案】

1)单指令周期

对所有指令都选用相同的执行时间来完成,此类方案中指令周期的大小取决于执行时间最长的指令的执行时间

2)多指令周期

对不同类型的指令选用不同的执行步骤来完成,多指令周期方案的指令之间仍然串行执行

3)流水线方案

指令之间可以并行执行的方案

【指令的执行过程与信息流】

取指、间址、执行和中断周期都有 CPU 访存操作,只是访存的目的不同。取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数(当指令为访存指令时),中断周期是为了保存程序断点

1)取指周期

取指周期要解决两个问题:一个是 CPU 到哪个存储单元取指令;另一个是如何形成后继指令地址

取指周期的信息流

序号记作解释
1(PC)→MAR现行指令地址送至存储器地址寄存器
21→R向主存发送读命令,启动主存做读操作
3M(MAR)→MDR将 MAR(通过地址总线)所指的主存单元中的内容(指令)经数据总线读至 MDR 内
4MDR→IR将 MDR 的内容送至 IR
5OP(IR)→CU指令的操作码送至 CU 译码
6(PC)+1→PC形成下一条指令的地址

△☼▽

在这里插入图片描述

分析:C,取指周期完成的微操作序列是公共的操作,与具体指令无关,取指周期的信息流如上所示

2)间址周期(并不是所有指令的执行过程中都会有间址周期)

当遇到间接寻址的指令时,由于指令字中只给出操作数有效地址的地址,因此为了取出操作数,需先访问一次存储器,取出有效地址,然后再访问存储器,取出操作数

序号记作解释
1AD(IR)→MAR将指令的地址码部分(形式地址)送至存储器地址寄存器
21→R向主存发送读命令
3M(MAR)→MDR将 MAR(通过地址总线)所指的主存单元中的内容(有效地址)经数据总线读至 MDR 内
4MDR→AD(IR)将有效地址送至指令寄存器的地址字段

3)执行周期

不同指令的执行周期操作命令是不一样的,所以没有统一的格式

讲解两个典型指令

在这里插入图片描述
在这里插入图片描述

4)中断周期

CPU 在每条指令执行阶段结束前,都要发出中断查询信号,以检测是否有某个 I/O 设备提出中断请求。如果有请求,则 CPU 要进入中断响应阶段,又称中断周期。在此阶段,CPU 必须将程序断点保存到存储器中

在这里插入图片描述

5)若干相关的习题

△☼▽(2019 年真题)

在这里插入图片描述

分析:B,源操作数分别采用寄存器和寄存器间接寻址方式,故在取数阶段需要通用寄存器组和存储器;在执行阶段,两个源操作数相加需要用到算术逻辑单元;而指令译码器是在取指阶段用到

【控制部件】

CPU 控制器主要由 3 个部件组成:指令寄存器、程序计数器和操作控制器

(注意:状态条件寄存器属于运算部件,详细可以参考下面这张图)

在这里插入图片描述

【控制信号】

△☼▽(2009 年真题)

在这里插入图片描述
在这里插入图片描述

分析:题目已经给出了取值阶段每个节拍的功能和有效控制信号,本题是想将 R0 中的数据与 R1 内容所指主存单元的内容相加,结果写入 R1 内容所指的主存单元

考虑读出 R1 内容所指主存单元的内容
在这里插入图片描述
考虑从 R0 读出数据存入寄存器 A ,然后执行相加操作
在这里插入图片描述
考虑计算结果存回 R1 的内容所指的内存单元
在这里插入图片描述
当然,题中没有要求优化,但是在这里我们进一步考虑下优化的问题:优化应该遵循什么样的原则呢?① 不相互依赖;② 使用不同的线路

C5 ~ C10 中只有 C6、C7 不相互依赖,因为一个是根据 R1 内容从主存单元读数据,使用 DB;一个是从 R0 寄存器读数据,使用内总线,故可以将两者合并在一个节拍内完成,最终结果如下所示
在这里插入图片描述

【控制方式】

1)同步控制方式

① 采用完全统一节拍的机器周期(定长方式)

在这里插入图片描述
② 采用不同节拍的机器周期(不定长)

在这里插入图片描述
③ 采用中央控制和局部控制的相结合的方法

这种方案将机器的大部分指令安排在统一的、较短的机器周期段内完成,称为中央控制。同时,可以将执行周期需要更多时钟周期的指令安排局部控制节拍,并将其插入到中央控制的执行周期内,典型特例如乘、除和浮点数运算

在这里插入图片描述
2)异步控制

这种方式微操作的时序由专门的应答线路控制,即当 CU 发出执行某一微操作的控制信号后,等待执行部件完成了该操作后发回 “ 回答 ” 信号,再开始新的微操作,使 CPU 没有空闲状态,但因需要采用应答电路,故其结构比同步控制方式复杂

【硬布线逻辑控制与微程序控制】

  • 硬布线逻辑控制由基本的门电路组合实现。这种方式实现的控制器的处理速度快,但是电路庞杂(说明扩展难),制造周期长,不灵活,可维护性差
  • 微程序控制所有指令对应的微程序放在只读存储器中,这个只读存储器称为控制存储器(CM)。在微程序控制方式下,控制单元的设计相对简单,指令添加容易,可维护性好,但是速度较慢

△☼▽(2009 年真题)
在这里插入图片描述

分析:D,理论如上所述

△☼▽

在这里插入图片描述

分析:D,对 A)微程序控制器比硬布线控制器慢;B)控制存储器采用的是 ROM;C)微指令计数器决定的是微指令的执行顺序

【微程序设计】

如果机器有 M M M 条指令,那么就对应了 M + 3 M+3 M+3 个微程序, 3 3 3 分别代表了取值、间址和中断周期的微程序

1)微命令和微操作

一条机器指令可以分解成一个微操作序列,这些微操作是计算机中最基本的、不可再分解的操作。在微程序控制的计算机中,将控制部件向执行部件发出的各种命令称为微命令,它是构成控制序列的最小单位。微命令和微操作一一对应,微命令是微操作的控制信号,微操作是微命令的执行过程

2)微指令和微周期

微指令是若干微命令的集合。存放微指令的控制存储器的单元地址叫微地址。微指令包含量大部分信息:

  1. 操作控制字段,即微操作码字段
  2. 顺序控制字段,用于控制产生下一条要执行的微指令地址

微周期指从控制存储器中读取一条微指令并执行相应的微操作所需要的时间

3)主存储器和控制存储器

  • 主存储器用于存放程序和数据,在 CPU 外部,用 RAM 实现
  • 控制存储器用于存放微程序,在 CPU 内部,用 ROM 实现

△☼▽(2017 年真题)
在这里插入图片描述

分析:B,CS 按照微地址访问

【微程序控制单元的基本组成】

在这里插入图片描述
【微指令的基本格式】

上面有提到,微指令的基本格式分为两个字段,一个为操作控制字段,该字段发出各种控制信号;另一个为顺序控制字段,该字段可指出下地址,以控制微指令序列的执行

微指令结构设计的目的

  • 有利于减小控制存储器的容量
  • 有利于提高微程序的执行速度
  • 有利于微指令的修改
  • 有利于微程序设计的灵活性
  • 有利于缩短微指令的长度

【机器指令和微指令】

在这里插入图片描述
【微指令的编码方式】

1)直接编码(直接控制方式)

在微指令的微命令字段中的=每一位都代表一个微命令

在这里插入图片描述
2)字段直接编码方式

将微指令的微命令字段分成若干小字段,把互斥性微命令组合在同一字段,相容性命令组合在不同的字段中每个字段还要留出一个状态,表示本字段不发出任何微命令

在这里插入图片描述

3)字段间接编码方式

一个字段某些微命令需要由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码。这种方式可进一步缩短微指令字长,但因削弱了微指令的并行控制能力,因此通常作为字段直接编码方式的一种辅助手段

在这里插入图片描述

4)若干相关习题

△☼▽

在这里插入图片描述

分析:
(1)采用字段直接编码方式,需加上每个控制字段至少要保留一个码字表示不激活任何一条控制线,故总位数 = 3+3+2+4+4+5+3+1+4+5 = 34
(2)采用直接编码方式,微指令的控制字段的总位数等于总的控制信号数,即 4+4+2+11+9+16+7+1+8+22 = 85

△☼▽(2012 年真题)

在这里插入图片描述

分析:C,加上保留的一个码字后为 8、4、13、6、7,3+2+4+3+3 = 15

【微指令序列地址的形成】

1)断定法(下地址字段法)

后续微指令的地址可以由微指令的下地址字段直接给出,此时请注意下地址字段位数的计算

△☼▽
在这里插入图片描述

分析:C,32 条指令,各指令对应的微程序平均有 4 条微指令,32×4 = 128,再加上两条公共的取指令程序的微指令,故一共有 130 条微指令,于是,下地址字段至少需要 8 为(28 = 256 > 130)

总结:设某计算机采用微程序控制器共有 n n n 条指令,公共的取指令微程序包含 b b b 条微指令,各指令对应的微程序平均由 a a a 条微指令组成,那么一共有 a n + b an+b an+b 条微指令

2)根据机器指令的操作码形成

当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。微地址形成部件实际是一个编码器,其输入为指令操作码。将机器指令的操作码送入地址译码器进行译码,输出结果就是对应该机器指令微程序的首地址,然后拿着首地址去微命令寄存器找到相应的微命令

△☼▽
在这里插入图片描述

分析:D,理论如上所述

3)增量计数器法

P C PC PC 类似, ( C M A R ) + 1 → C M A R (CMAR)+1\rightarrow CMAR (CMAR)+1CMAR

4)分支转移

分支转移微指令的格式

在这里插入图片描述
其中转移方式指明判别条件,转移地址指令转移成功后的去向,如不成功,则顺序执行。有的转移微指令中设有两个转移地址,条件满足时选择其中一个转移地址,条件不满足时选择另外一个转移地址

5)由硬件产生微程序入口地址(知道即可)

【水平型微指令与垂直型微指令】
在这里插入图片描述
总结来说,水平型微指令的特点包括并行操作能力强,效率高,灵活性强,执行一条机器指令所需微指令的数目少,执行时间短,但是微指令字较长,同时要求设计者熟悉数据通路

△☼▽ (设计微指令,计算控制存储器的容量)

在这里插入图片描述

分析:
(1)有 5 个相斥类,每组增加一种不发命令的情况,即 6、9、3、16、23,共需要 3+4+2+4+5 = 18 位。条件测试字段的长度取决于条件转移类微指令可判定的外部条件的个数,此外还要考虑到无条件转移的情况,采用字段直接编码方式,条件测试字段至少应有 2 位,微指令字长 28 位,下地址字段取 28-18-2 = 8 位,故微指令的格式为

在这里插入图片描述
(2)下地址占 8 位,微指令字长 28 位,故控制存储器的容量为 28×28 位

【微操作的节拍和安排设计步骤】

微程序控制单元在取指周期发出的微操作命令及节拍安排如下:

在这里插入图片描述
和组合逻辑控制相比,只有在 T2 节拍内的微操作命令有所不同。组合逻辑控制单元在 T2 节拍内要将指令的操作码送指令译码器,以控制 CU 发出相应的微命令,即 O P ( I R ) → 指 令 译 码 器 OP(IR)\rightarrow 指令译码器 OP(IR)

如果把一个节拍 T 内的微操作安排在一条指令中完成,则上述微操作对应 3 条微指令。在上面的取值微程序中,除第一条指令外(因为执行的第一条微指令地址由专门的硬件电路产生),其余微指令的地址均由上一条微指令的下地址字段直接给出,因此上述每一条微指令都需要增加一个将微指令下地址字段送至 CMAR 的微操作,记为 A d ( C M A R ) → C M A R Ad(CMAR)\rightarrow CMAR Ad(CMAR)CMAR

取值微程序的最后一条微指令,其后续微指令的地址是由微地址形成部件形成的,即 微 地 址 形 成 部 件 → C M A R 微地址形成部件\rightarrow CMAR CMAR

考虑到需要形成后续微指令地址的话,上述分析的取值操作共需 6 条微指令完成,即

在这里插入图片描述

△☼▽(模拟题一)

在这里插入图片描述

分析:C,安排微操作的节拍时应该注意:1)注意微操作的先后顺序,有些微操作的次序是不容改变的;2)不同时请求内部总线的微操作,若能在一个节拍内执行,则应尽可能安排在同一个节拍内

于是,第一个节拍可以安排微操作 a,第二个节拍可以安排微操作 b 和 c,第三个节拍可以安排微操作 d,故总共 3 个节拍周期

【指令流水线】

1)基本理论

假设一条指令的执行过程需要经过 3 个阶段:取指令、译码、执行;每个阶段花费一个时钟周期

在这里插入图片描述
当使用指令流水线时,执行 N N N 条指令需要的时钟周期数为 N + 2 N+2 N+2,第一条指令执行完需要 3 个时钟周期,以后都是每一个时钟周期执行完一条指令,故需要的总时钟周期数为: 3 + ( N − 1 ) = N + 2 3+(N-1)=N+2 3+(N1)=N+2

总结如下:

m m m 段流水线的各段经过时间均为 Δ t \Delta t Δt,则需要 T 0 = m Δ t T_0=m\Delta t T0=mΔt 的时间建立流水线,之后每隔 Δ t \Delta t Δt 就可以留出一条指令,完成 n n n 个任务共需要时间 T = m Δ t + ( n − 1 ) Δ t T=m\Delta t+(n-1)\Delta t T=mΔt+(n1)Δt

△☼▽ (流水线下微周期)

在这里插入图片描述

分析:
(1)微周期为 40ns

在这里插入图片描述
(2)微周期为 50ns

在这里插入图片描述

△☼▽

在这里插入图片描述

分析:
(1)指令周期流程如下:

在这里插入图片描述
(2)

在这里插入图片描述
(3)

在这里插入图片描述
(4)实际吞吐率 = 10 [ 4 + ( 10 − 1 ) ] × 100 n s 条 指 令 / s =\frac{10}{[4+(10-1)]\times100ns}条指令/s =[4+(101)]×100ns10/s(我们取 10 条指令来研究)

(5)加速比 = 4 × 10 4 + ( 10 − 1 ) =\frac{4\times10}{4+(10-1)} =4+(101)4×10

2)CPU时钟周期和流水线时钟周期的对应关系

流水线的时钟周期应与所有功能段中消耗时间最长的功能段的耗时相同

△☼▽

在这里插入图片描述

分析:A,理由如上所述

△☼▽

在这里插入图片描述

分析:D,对 A ~ E 五个部件,最大时间部件为 80ps,此外还要加上流水段寄存器延时,故 CPU 时钟周期至少为 100ps

3)关于流水线性能指标的计算

流水线的性能指标通常用吞吐率、加速比和流水线效率来衡量,关于吞吐率和加速比的计算如下例题说明,流水线效率的计算公式为   E = n 个 任 务 占 时 空 图 的 有 效 面 积 n 个 任 务 所 用 的 时 间 与 k 个 流 水 段 所 围 成 的 时 空 区 总 面 积   \\ \ \\E=\frac{n个任务占时空图的有效面积}{n个任务所用的时间与k个流水段所围成的时空区总面积}\\ \  E=nkn 

△☼▽ (吞吐率和加速比的计算)

在这里插入图片描述

分析:
(1)10 条指令的执行需要 4+(10-1) = 13 个时钟周期,故实际吞吐率为 10/(100ns×13) ≈ 0.77×107 条指令/s
(2)非流水线处理 10 条指令需要 40 个时钟周期,故该流水线的加速比为 40/13 ≈ 3.08

理想状态下,

  • 若流水线各级的执行时间相同,都为 Δ t \Delta t Δt,则流水线的最大吞吐率为 1 Δ t \frac{1}{\Delta t} Δt1
  • 计算机采用 n n n 级指令流水线,加速比为 n n n

△☼▽

在这里插入图片描述

分析:采用 5 级指令流水线,理想状况下加速比等于 5,最大吞吐率为 1/2ns

4)有利于实现指令流水线的方法

  1. 指令格式规整且长度一致
  2. 指令和数据按边界对齐存放
  3. 只有 Load/Store 指令才能对操作数进行访问

【指令流水线的数据通路】

五阶段流水线可分为取值 IF、译码/取数 ID、执行 EXC、存储器读 MEM、写回 Write Back,各个子系统通过数据总线连接形成的数据传送路径称为数据通路,包括程序计数器、算术逻辑运算部件、通用寄存器组、取指部件等,不包括控制部

△☼▽(2017 年真题)

在这里插入图片描述

分析:A,理论如上所述

【引起指令流水阻塞】

有3种相关可能引起指令流水线阻塞:

  • 结构相关(又称为资源相关)
  • 数据相关(数据旁路技术可以解决数据相关)
  • 控制相关(主要由转移指令引起)

【数据相关】

数据相关分为 3 类:写后读相关(RAW),读后写相关(WAR),写后写相关(WAW)

(注意英文缩写的记忆方法,将 RAW 从右往左读即可)

三类数据相关的判断:字面意思即是正常的操作顺序,如写后读表示正常操作为先写后读,而现在采用流水线技术可能发生还没写就读了的情况,那么就判定会出现写后读相关

△☼▽

在这里插入图片描述

分析:
(1)正确的执行顺序是 I1 先写 I2 后读,当 I1 和 I2 采用流水线技术时,有可能 I2 先从 R1 中取出操作数,导致错误,故可能发生写后读相关
(2)正确的执行顺序为 I3 先读 I4 后写,故可能发生读后写相关
(3)正确的执行顺序为 I5 先写 I6 后写,故可能发生写后写相关

△☼▽

在这里插入图片描述

分析:C,分析如下

在这里插入图片描述

△☼▽ (重点关注数据旁路技术对数据相关问题的解决)

在这里插入图片描述

分析:
(1)流水线操作的时钟周期应该取 4 步中最长一个步骤的时间,即 T = 100ns
(2)如下两条指令发生数据相关

ADD R1,R2,R3 // (R2)+(R3)→(R1)
SUB R4,R1,R5 // (R1)-(R5)→(R4)

本来 ADD 应先写入 R1,SUB 后读入 R1,结果变成 SUB 先读了 R1,如果硬件上不采取任何措施,则第二条指令 SUB 至少应推迟 2 个时钟周期,即 SUB 指令中的指令译码并取数周期应该在 ADD 写回周期之后

在这里插入图片描述
(3)如果在硬件上改进,则只需要延迟一个时钟周期即可,因为在 ADD 中运算周期完成就已经产生了结果,可以通过数据旁路技术在运算结果得到的时候将结果快速送入 R1,而不需要等到写回周期完成

在这里插入图片描述

△☼▽ (2012 年真题)

在这里插入图片描述
在这里插入图片描述

分析:
(1)[-513] = 1111 1101 1111 1111B,算术右移一位之后的结果为 1111 1110 1111 1111B,即 FEFFH
(2)执行这 4 条指令所需要的时钟周期数为 5+(4-1) = 8 个
(3)I3 需要用到 I1 和 I2 的数据,故它们之间存在数据相关,I3 必须等到 I1 和 I2 写回 R1 和 R2 之后才能执行译码/读寄存器操作,故 I3 的 ID 段被推迟;由于 I3 的 ID 段被推迟,导致 I4 不能完成取指令操作,故 I4 的 IF 段被阻塞
(4)这里我们取左移操作实现 2*x
在这里插入图片描述
故执行这条语句至少需要 17 个时钟周期

△☼▽

在这里插入图片描述

分析:
(1)从下表很容易看出,只有 XOR 指令是在 ADD 指令 WB 段结束后才可以正常取到 R1 寄存器中的数据

在这里插入图片描述
(2)需要占用 12 个时钟周期,理由如下表所示

在这里插入图片描述
(这里有个小问题,AND、OR、XOR 指令的 IF 段是不是一定要对应在上条指令的 ID 段?理论上来说是不一定的,但是根据上面 12 年真题的答案,建议答题时还是把它们对应到一个时钟周期,但是总体上来说需要占用的时钟周期的总数是没有改变的)

【超标量流水线和动态流水线的基本概念】

1)超标量流水线

超标量是指在 CPU 中有一条以上的流水线,并且每个时钟周期内可以完成一条以上的指令,其实质是以空间换时间 (为此需要配置多个功能部件)
在这里插入图片描述
△☼▽(2017 年真题)
在这里插入图片描述

分析:C,超标量流水线能在一个时钟周期内同时发射多条指令,故 Ⅱ 正确;能结合动态调度技术提高指令执行并行性,故 Ⅲ 正确;但是从本质上来说,其并没有缩短单个流水线功能段的处理时间,Ⅰ 不正确

2)超级流水线

典型的流水线将一条机器指令分为 5 步,而所谓的超级流水线是将机器指令划分为更多级的操作,以减轻每一级的复杂程度。在流水线的每一步中,如果需要执行的逻辑操作少一些,那么每一步就可以在较短的时间内完成

(注意对照上面 17 年的真题,这里言下之意是缩短了流水线功能段的处理时间)

3)超长指令字

由编译程序挖掘出指令潜在的并行性,将多条能并行操作的指令组合成(注意,和超标量流水线的区别)一条具有多个操作码字段的超长指令字,为此需要采用多个处理部件

在这里插入图片描述

4)动态流水线

动态流水线就是多种运算可以同时进行,而静态流水线只能是一种运算进行完再进行下一种运算 (由此可知,超长指令字应该属于动态流水线)

【三级时序系统】

三级时序系统是小型机常用的时序系统,在机器周期间、节拍电位间、工作脉冲间既不允许有重叠交叉,也不允许有空隙,应该一个接一个的准确连接

△☼▽

在这里插入图片描述

分析:A,理论如上所述

【单周期处理器】

△☼▽(2016 年真题)

在这里插入图片描述

分析:A

单周期处理器即指所有指令的指令周期为一个时钟周期,即每条指令的 CPI = 1,正因为如此,要考虑比较慢的指令,所以处理器的时钟频率比较低,故 B、D 正确

单总线结构将 CPU、主存、I/O 设备都挂在一组总线上,允许 I/O 设备之间、I/O 设备与主存之间直接交换信息,但多个部件只能争用唯一的总线,且不支持并发传送操作。考虑加法指令,其中一个操作数在主存中,那么取值周期和执行周期都涉及读存储器,显然这将发生争用,故不可能在一个时钟周期内完成该指令的所有操作,故单周期处理器并不是采用单总线结构数据通路,故 A 错误

控制信号即指 PC 中的内容,PC 用来存放当前预执行指令的地址,可以自动 +1 形成下一条指令的地址,在指令执行的过程中控制信号不变,对于单周期处理器也是这样的,故 C 正确

【中断系统】

1)中断的概念

在这里插入图片描述

考虑一个问题:指令中断和缺页中断的根本区别是什么?

  • 指令中断一定是在某条指令执行结束后才去响应中断,中断处理完之后继续执行下一条指令
  • 缺页中断处理完之后,返回执行当前指令

2)各中断源如何向 CPU 提供中断请求

设置中断请求标记触发器 INTR

在这里插入图片描述
各中断源向 CPU 提出中断请求,只需要将对应的值置为 1 即可

3)当多个中断源同时提出中断请求时,中断系统如何确定优先响应哪个中断源?

当某一时刻有多个中断源提出中断请求时,中断系统必须按其优先顺序予以响应,这成为中断判优

① 硬件实现(要会看这个电路)

在这里插入图片描述

② 软件实现

在这里插入图片描述

4)中断服务程序入口地址是怎么寻找的?

① 硬件向量法

硬件向量法就是利用硬件产生中断向量地址,再由中断向量地址找到中断服务程序入口。而向量地址由中断向量地址形成部件产生的,有两种方法通过向量地址找到中断服务程序入口地址,

  1. 在向量地址内存放一条无条件转移指令,当 CPU 响应中断时,只要将向量地址送到 PC,执行这条指令,便可无条件地转向某服务程序的入口地址
  2. 设置向量表,如下图所示
    在这里插入图片描述

注意,中断向量是中断服务程序入口地址,而中断向量地址是中断服务程序入口地址的地址

② 软件查询法(知道即可)

5)中断隐指令完成的操作

  1. 保护程序断点,断点是被中断程序继续执行处指令的地址(即响应中断时 PC 的值)和当时的程序状态字(PSW)的内容
  2. 寻找中断服务程序入口地址
  3. 关中断

注意,在响应中断的时候保存断点(由隐指令完成),而在处理中断的时候保护现场(由中断服务程序完成)

△☼▽(2012 年真题)
在这里插入图片描述

分析:B,保存通用寄存器的内容属于保护现场的操作

6)多重中断

开中断指令的位置决定了 CPU 能否实现多重中断

在这里插入图片描述

△☼▽(2011 年真题)

在这里插入图片描述

分析:C,由于没有 Cache 和指令预取技术,因此不可能从 Cache 以及在前一个指令执行的时候取指令,每个指令周期中 CPU 必访问主存一次去指令,故 A 正确;B 显然正确;至少 PC 寄存器的内容会自加 1,故 C 错误;由于机器处于开中断状态,因此当前程序在每条指令结束时都可能被外部中断打断,故 D 正确

【屏蔽技术】

每个中断请求触发器都有一个屏蔽触发器,将所有屏蔽触发器组合在一起,便构成了一个屏蔽寄存器。屏蔽寄存器的内容称为屏蔽字。每个中断源都对应一个屏蔽字

什么时候设置屏蔽字合适呢?由于只要中断一开,就允许中断嵌套,因此设置屏蔽字的指令必须安排在中断服务程序的开中断指令之前,如下图所示

在这里插入图片描述
( “ 多重中断系统在保护被中断进程现场时关中断,执行中断处理程序时开中断 ”,如果理解了这句话,就能理解什么在上面的流程图中恢复现场前要关中断)

严格来说,优先级包括响应优先级和处理优先级。响应优先级指 CPU 响应个中断源请求的有限次序,这种次序往往是硬件电路已经设置好的,不便于改动;处理优先级指 CPU 实际对各中断源请求处理的有限次序,可以通过屏蔽技术改变优先次序

对屏蔽寄存器的内容,当第 i 位为 0 时,表示第 i 个中断源不可屏蔽,要马上响应;当第 i 位为 1 时,表示第 i 个中断源可屏蔽

△☼▽

在这里插入图片描述

分析:D,根据上述理论描述知道,屏蔽字中 1 越多的优先级越高

△☼▽(2011 年真题)

在这里插入图片描述

分析:D,L1 可屏蔽的中断源仅有 L1 和 L3,故把 1、3 两位置 1,其余置 0

△☼▽

在这里插入图片描述

分析:

在这里插入图片描述

△☼▽

在这里插入图片描述

分析:
(1)

在这里插入图片描述
(2)5、6、7 同时到达,CPU 按响应优先顺序响应 5,执行中断处理 5,当 5 结束后,再响应 6,由于 8 的处理优先级高于 6,故 6 被打断转而去处理 8,处理 8 时,2 到达,2 优先级低于 8,故 8 继续执行,8 执行完回到 6,6 又被等着的 2 打断,执行完 2 之后回到 6,6 执行完后才到 7, 7 执行完回到现行程序

在这里插入图片描述

△☼▽

在这里插入图片描述

分析:
(1)

在这里插入图片描述
(2)

在这里插入图片描述
①:在运行用户程序时,同时出现 2、4 级中断请求,先响应 2 级中断
②:在 2 级中断服务程序过程中,首先保护现场、保护旧屏蔽字、设置新的屏蔽字 01100,然后,在具体中断处理前先开中断
③:一旦开中断,则马上响应 4 级中断,在执行 4 级中断结束后,回到 2 级中断服务程序继续执行
④:在具体处理 2 级中断的过程中,同时发生了 1、3、5 级中断请求,根据屏蔽字,2 级中断对 1、5 级中断开放,对 3 级中断屏蔽,所以只有 1 和 5 两级中断进行排队判优,先响应 1 级中断
⑤:因为 1 级中断的处理优先级最高,所以在其处理过程中不会响应任何新的中断请求,直到 1 级中断处理结束,然后返回 2 级中断
⑥:2 级中断对 5 级中断开放,所以在回到 2 级中断服务程序中执行一条指令后,又转去执执行 5 级 中断服务程序,执行完后回到 2 级中断
⑦:虽然 3 级中断有请求,但是,因为 2 级中断对 3 级中断不开放,所以 3 级中断一直得不到响应,直到 2 级中断处理完回到用户程序,才能响应并处理 3 级中断

(结合图 5-40 加入屏蔽技术中断服务程序流程去理解)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/177617
推荐阅读
相关标签
  

闽ICP备14008679号