📜  CO中的指令执行和直线排序

📅  最后修改于: 2021-09-28 09:25:25             🧑  作者: Mango

介绍 :
由于指令是程序的一部分,存储在内存中,所以每次处理器需要执行一条指令时,处理器都会先从内存中取出指令,然后对指令进行解码,然后再执行指令。整个过程称为一个指令周期。

指令周期状态转移图

指令执行:
指令执行需要以下步骤,分别是

  • 处理器的PC(程序计数器)寄存器给出了需要从内存中取出的指令的地址。
  • 如果然后取指令,则对指令操作码进行解码。在解码时,处理器识别操作数的数量。如果有任何要从内存中取出的操作数,则计算该操作数地址。
  • 从内存中获取操作数。如果操作数不止一个,则可以重复取操作数的过程(即地址计算和取操作数)。
  • 之后,对操作数进行数据运算,并产生结果。
  • 如果必须将结果存储在寄存器中,则指令到此结束。
  • 如果目标是内存,那么首先必须计算目标地址。然后将结果存储在存储器中。如果有多个结果需要存储在内存中,那么这个过程可能会重复(即目的地址计算和存储结果)。
  • 现在已经执行了当前的指令。同时,PC 递增以计算下一条指令的地址。
  • 然后重复上述指令循环以获取更多指令。

直线排序:

  • 直线排序是指程序的指令按顺序执行(即每次PC 增加一个固定的偏移量)。
  • 并且PC 上没有加载分支地址。

例子 –

  • 在这里,程序和数据存储在同一个内存中,即冯诺依曼架构。
  • 程序的第一条指令存储在地址 i。 PC给出地址i,从内存中取出存储在该地址i处的指令,然后解码,然后从内存中取出操作数A并存储在临时寄存器中,然后执行指令(即地址A的内容被复制到处理器中)寄存器 R0)。
  • 在解码或执行期间并排,PC 增加 4(即它包含下一条指令的地址),因为指令和内存段是 4 个字节。所以地址i处的指令被执行。
  • 所以每次PC都加4。因此,程序是按顺序执行的。而这个过程称为直线排序。

  

示例 2 –
用于添加 n 个数字的直线排序程序。

  • 包含n个数字的内存位置的地址表示为NUM1,NUM2…..NUMn(即NUM1地址包括第一个数字)。
  • 第一个数字存储在处理器寄存器 R0 中。并且每隔一个数字将添加到寄存器 R0。最后,当程序结束时(即n个数字相加,结果放在内存位置SUM

用于添加n个数字的直线排序程序

  • 第二种方法是使用循环添加n个数字。但是这里没有使用直线排序,因为每次循环迭代结束时,PC 必须加载分支地址,程序从该地址开始执行。
  • 这里位置 N 存储了 n 的值。处理器寄存器 R1 用作计数器来确定循环执行的次数。
  • 在程序执行开始时,位置 N 的内容被移动到 R1 中。
  • 之后,寄存器 R0 被清除。
  • 地址 LOOP 被一次又一次地重新加载,直到 R1 变为 0(这意味着所有数字都被添加)。每添加一个数字,那么 R1 的值就会递减。
  • 当 R1 变为 0 时,我们退出循环,并将存储在 R1 中的结果复制到内存位置 SUM 中。