文章目录
- 一、取指周期
- 二、间址周期
- 三、执行周期
- (一)数据传送类指令(mov/load/store)
- (二)运算类指令(加/减/乘/除/移位/与/或)
- (三)转移类指令(jmp/jxxx)
- 四、中断周期
CPU每取出并且执行一条指令所需要的全部时间称为指令周期,指令周期通常包括取指周期、间址周期、执行周期、中断周期,有的指令可能不包含间址周期或者中断周期。
数据流是根据指令要求依次访问的数据序列。在指令执行的不同阶段,要求依次访问的数据序列是不同的。而且对于不同的指令,它们的数据流往往也是不同的。
·对于无条件转移指令JMPX,在执行时不需要访问主存,只包含取指阶段(包括取指和分析)和执行阶段,所以其指令周期仅包含取指周期和执行周期。
·对于间接寻址的指令,为了取操作数,需要先访问一次主存,取出有效地址,然后访问主存,取出操作数,所以还需包括间址周期。间址周期介于取指周期和执行周期之间。
·当 CPU采用中断方式实现主机和 I/O 设备的信息交换时,CPU 在每条指令执行结束前,都要发中断查询信号,若有中断请求,则CPU 进入中断响应阶段,也称中断周期。
为了有一个具象的认知,大家在看下面的数据流分析时可以参考这张计算机系统结构模型图:
一、取指周期
取值周期的作用是根据PC中的内容从主存中取出指令代码并且存放在IR中,取指令的同时,PC值+1。
数据流如下:
1.PC—>内部总线—>MAR—>地址总线—>存储器,PC—>PC+1
解读:PC中存储的是要执行的指令的地址,首先通过内部总线将该地址传送到MAR中,然后MAR通过地址总线将地址传送给存储器。
2.CU发出读命令—>控制总线—>存储器
解读:CU通过控制总线将读命令传递给存储器,存储器从而开始读取数据。
3.主存—>数据总线—>MDR—>内部总线—>IR
解读:主存将读取到的数据通过数据总线传送给MDR,MDR通过内部总线传送给IR,暂存指令。
4.CU发出控制信号—>PC值+1
解读:CU发出控制信号,PC值加1
5.根据OP(IR),CU对执行周期所需的部件发出控制信号
解读:OP(IR)表示取出IR中存放的指令字的指令码字段。
二、间址周期
间址周期的作用是取操作数有效地址。以一次间址为例,将指令中的地址码送到MAR并送至地址总线,此后 CU 向存储器发出读命令,以获取有效地址并存至MDR。
数据流如下:
1.Ad(IR)(或者MDR)—>内部总线—>MAR—>地址总线—>存储器
解读:将指令中的地址码通过内部总线传送给MAR,再通过地址总线传送给存储器。其中,Ad(IR)表示取出IR中存放的指令字的地址字段。
2.CU发出读命令—>控制总线—>存储器
解读:CU通过控制总线将读命令传递给存储器,存储器从而开始读取数据。
3.主存—>数据总线—>MDR
解读:主存将读取到的数据通过数据总线传送给MDR,存放有效地址。
三、执行周期
执行周期的任务是取操作数,并根据IR中的指令字的操作码通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向,对于三类不同的指令,大致可以总结出以下几种不同的数据流向。
(一)数据传送类指令(mov/load/store)
数据传送类指令是一类在计算机中用于将数据从一个地方传送到另一个地方的指令。它们通常用于从内存中读取数据并将其加载到寄存器中,或将寄存器中的数据存储到内存中。数据传送类指令包括MOV、LDR、STR等。其中,MOV指令用于将一个操作数的值复制到另一个操作数中,LDR指令用于将内存中的数据加载到寄存器中,STR指令用于将寄存器中的数据存储到内存中。
数据流有以下几种:
1)寄存器—>寄存器
2)寄存器—>主存
3)主存—>寄存器
4)立即数—>寄存器
5)寄存器—>寄存器
6)寄存器—>寄存器
注意两点:
1.如果涉及到主存,关注读、写主存的数据流:
1)读
地址—>MAR
M(MAR)—>MDR
MDR—>目的地
CU发出读命令—>控制总线—>存储器
2)写
地址—>MAR
数据—>MDR
MDR—>M(MAR)
CU发出写命令—>控制总线—>存储器
2.关注总线占用
由于总线是临界资源,所以要合理安排控制信号。
(二)运算类指令(加/减/乘/除/移位/与/或)
运算类指令是计算机中用于执行算术和逻辑运算的指令。这些指令可以执行加、减、乘、除等数学运算,以及逻辑运算,如与、或、非等。这些指令可以被CPU识别并执行,从而实现程序的运行和计算。在汇编语言中,运算类指令通常以助记符的形式表示,例如ADD、SUB、MUL等。
对于运算类指令,要关注它所使用到的部件,如下:
(三)转移类指令(jmp/jxxx)
转移类指令用于实现程序流程的跳转。当程序执行到转移类指令时,会根据指令中给出的跳转地址或跳转条件来改变程序执行的顺序,从而实现跳转到指定的代码位置或者循环执行某一段代码。
常见的转移类指令有无条件跳转指令jmp、条件跳转指令jxxx和子程序调用指令等。其中,无条件跳转指令可以直接跳转到目标地址,而条件跳转指令则需要根据条件是否满足来决定是否跳转到目标地址。子程序调用指令则用于在程序中调用其他函数或子程序,执行完毕后再返回到原来的程序位置。
转移类指令最重要的是改变PC值,对于条件转移,要判断是否达到条件,也就是通过cmp计算A-B,生成CF、ZF、OF、SF,根据标志位判断是否转移,如果要转移,注意以下两点:
1)注意指令寻址方式:
·相对寻址:PC+偏移值(以字为单位或者以字节为单位)
·直接寻址(少见)
2)注意PC值的变化:
·以字节为单位:CISC
·以指令字为单位:RISC
四、中断周期
中断周期的作用是处理中断请求。执行周期结束后,如果CPU检测到中断请求,则进入中断周期,此时需要关中断、保存断
点、修改 PC 值为中断服务程序的入口地址,并转向中断服务程序。假设程序断点存入堆栈中,并用 SP 指示栈顶地址,而且进栈操作是先修改栈顶指针,后存入数据。
数据流如下:
1.CU控制将SP减1,SP—>内部总线—>MAR—>地址总线—>存储器
解读:中断周期中的进栈操作是将SP减“I”,这和传统意义上的进栈操作相反,原因是计算机中的堆栈都是向低地址方向增长,所以进栈操作是减“1”而不是加“1”。将SP值保存进存储器中。
2.CU发出写命令—>控制总线—>存储器
解读:CU通过控制总线将写命令传递给存储器,存储器从而开始写数据。
3.PC—>内部总线—>MDR—>数据总线—>主存
解读:将程序断点存入存储器。
4.CU—>PC
解读:将中断服务程序的入口地址写入PC,接下来执行中断服务程序。
注:在做题的时候经常能看见这种形式表达的数据流——(a)—>b,其含义是将a部件中存储的内容存入b部件,M(a) 表示存储器a地址存放的内容。
写在后面
这个专栏主要是我在学习408真题的过程中总结的一些笔记,因为我学的也很一般,如果有错误和不足之处,还望大家在评论区指出。希望能给大家的学习带来一点帮助,共同进步!!!
参考资料
[1]王道408教材(2025版)
[2]王道暑期强化讲义