FT:M->IR PC+1->PC ST: SP->MAR M->MAR->C SP+1->SP DT:R0->MAR ET:C->MDR MDR->M PC->MAR
时间: 2023-07-08 22:14:05 浏览: 82
MOV R0, (SP)+ 的取址流程如下:
FT: 从内存中取出指令,存储在指令寄存器 IR 中。PC 加 1,指向下一条指令的地址。
ST: 将栈指针 SP 的值存储到内存地址寄存器 MAR 中,将 MAR 中的值存储到 C 中。SP 加 1,指向下一个栈地址。将 SP 的值存储到 MAR 中,将 MDR 中的值存储到 C 中。
DT: 将 R0 的值存储到内存地址寄存器 MAR 中。
ET: 将 C 的值存储到内存数据寄存器 MDR 中,将 MDR 中的值存储到内存地址寄存器 MAR 中。将 PC 中的值存储到 MDR 中。
其中,ST 表示栈的存储操作(Stack);DT 表示数据传输操作(Data Transfer);ET 表示执行操作(Execute)。解释如下:
FT: 从内存中取出指令,存储在指令寄存器 IR 中。PC 加 1,指向下一条指令的地址。
ST: 将栈指针 SP 的值存储到内存地址寄存器 MAR 中,将 MAR 中的值存储到 C 中。SP 加 1,指向下一个栈地址。将 SP 的值存储到 MAR 中,将 MDR 中的值存储到 C 中。这个操作是为 POP 操作做准备,将栈顶元素的地址存储到 MAR 和 C 中。
DT: 将 R0 的值存储到内存地址寄存器 MAR 中。将要 PUSH 的数据的地址存储到 MAR 中,准备将数据存储到栈中。
ET: 将 C 的值存储到内存数据寄存器 MDR 中,将 MDR 中的值存储到内存地址寄存器 MAR 中。将 PC 中的值存储到 MDR 中,将要 PUSH 的数据存储到 MAR 中。这个操作是将要 PUSH 的数据存储到栈中,并将 PC 的值存储到 MDR 中,为下一条指令的执行做准备。
需要注意的是,这个取址流程是 PUSH R0 的取址流程,而非 MOV R0, (SP)+ 的取址流程。
阅读全文