免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2623 | 回复: 1
打印 上一主题 下一主题

[其它] 关于80x86或者8086取指和执行周期 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-27 19:04 |只看该作者 |倒序浏览
在翻看微机原理过程中,有介绍微机简化结构模型下,取指和执行周期

时钟脉冲由环形计数器来驱动,T0-T5共6个时钟

在 地址阶段(T0 = 1)时候,将 PC内容送入 MAR中(MAR中同时会进入到 PROM中)
在 存储节拍(T1 = 1)时候,将 PROM中由PC送来的地址码指定内存内容送到 IR中,同时 IR会将 IR高4位数据送至 控制部件中
在 增量节拍(T2 = 1)时候,PC加1

以上三个是取指周期,将指令获取到 IR中,对于任何指令都相同

剩下三个是执行周期

在 T3 = 1时候,(现在假设是 LDA,load 数据到 AL中)控制部件分析高四位后得知是一个 LDA指令,于是将 IR中的低四位重新发送到 MAR中,最后到达 PROM中来获取 ROM中的对应数据
在 T4 = 1时候,将 PROM中对应的数据发送到 AL中
在 T5 = 1时候,对于该 LDA是个空闲的时钟周期

以上的是针对简化结构来说明的
对于 8086架构中,看到其中没有类似 PC或者 IR的寄存器

想问,对于 8086或者后续的 x86,其过程是否也是类似的

因为对于8086中,有IP(指令指针寄存器)。我们知道,一般 IP是指向下一个将会需要执行的代码(该代码存储于内存中)
比如对于下面的一个反汇编代码:

  1. 1000:0     b8 00 00     mov ax,0     ax=0 ip指向1000:3
  2. 1000:3     e8 01 00     call s       pop ip ip指向1000:7
  3. 1000:6     40           inc ax
  4. 1000:7     58         s:pop ax       ax=6
复制代码
理论上,在cpu读取完 call s指令后,ip就会指向下一条内存中的代码 inc ax的地址
因为现在是 call指令,所以会执行 push ip, jmp s的动作,跳到 s去执行
然后在s位置执行完后,会使用ret来返回到call s的下一条指令位置来继续执行,也就是 inc ax的位置来执行。通过 pop ip的方式来恢复压栈后的 ip来完成

这些是我们比较笼统的来解释的

那么,如果对应到这个取指然后执行周期来说明的话,对于8086系统为例,应该是怎么样的一个过程呢???其中是否还会有 PC,IR寄存器的参与??

论坛徽章:
0
2 [报告]
发表于 2014-07-08 14:01 |只看该作者
....难道这个问题太简单了么???
肿么没人回答尼
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP