代码最终被编译器翻译成系统可识别的一条条机器指令,系统对指令操作分为五个过程:
1.取值
假设一条指令的长度为1-6字节,movl的指令码为40
系统中有个寄存器文件,该文件保存着寄存器,而寄存器又是靠寄存器标识来索引,那么这里假设
%esp的寄存器标识符为4,存储的值为128
0x14-0x15 存储着指令的指令码40,对应着movl
0x15-0x16 寄存器标识43,4为%esp,3为%ebx
pc=0x1a
上述例子没有对寄存器写,所以写回阶段为空
1.取值
从指令存储器中取出指令
翻译指令,获取指令中的操作数
在处理器的alu(算术逻辑单元)中执行加减乘除
读写操作中使用到的存储地址
写寄存器
更新PC值,让其指向下一条命令地址
假设一条指令的长度为1-6字节,movl的指令码为40
系统中有个寄存器文件,该文件保存着寄存器,而寄存器又是靠寄存器标识来索引,那么这里假设
%esp的寄存器标识符为4,存储的值为128
%ebx的寄存器标识为3,存储的值为12
0x14 404364000000 movl %esp,100(%ebx)
0x14-0x15 存储着指令的指令码40,对应着movl
0x15-0x16 寄存器标识43,4为%esp,3为%ebx
0x16-0x1a 存储着立即数,0x00000064,100
获取两个寄存器中的值%esp为128,%ebx为12
100(%ebx)使用了加法,%ebx+100,即12+100
把值123写入112存储地址
写回
无操作
pc=0x1a
上述例子没有对寄存器写,所以写回阶段为空