这篇文章记录一下,8086CPU读取指令执行的过程。
CPU当前的状态如下图所示:
CS中的内容为2000H,IP为0000H;在内存中20000H-20009H的内存单元中。
假如CPU要执行上面内存单元中的汇编指令,执行过程如下:
第一步:初始状态
初始状态:CS:2000H,ip:0000H,CPU将从内存2000H*16+0000H=20000H内存单元中读取指令,如下图所示。
第二步 将CS IP送入地址加法器
将CS 和IP寄存器中的内容送入地址加法器,地址加法器按照“”短地址*16 + 偏移地址 = 物理地址”的方式计算物理地址,如下图所示:
第三步:送出计算好的物理地址
地址加法器将计算好的物理地址,送入输入输出控制电路,过程如下:
第四步:输入输出电路将地址送上地址总线
输入输出电路将物理地址20000H送上地址总线:
第五步: 内存将指令送入CPU
从内存20000开始的位置存放的指令 B8 23 01通过数据总线送至CPU;
第六步: 输入输出控制电路接收到指令并处理
输入输出电路,接收到指令后开始处理:通过数据总线穿过来的B8 23 01送入指令缓存器中。
第七步: IP值自动增加
CPU读取一条指令后,IP中的值自动增加,因为当前读取的指令长度为3字节,所以IP的值自动加3;此时CS:IP指向的内存单元为:2000H:0003H
第八步: 执行控制器执行指令
执行控制器开始执行指令B8 23 01
第九步: 执行指令后
执行控制器执行指令后,AX中的内容为0123H;至此,一条指令执行完毕。执行CPU在执行下一条指令时,以CS:IP当前的状态开始执行。
注意:上边的图是汇编语言第四版书上的原图。