zoukankan      html  css  js  c++  java
  • 计算机操作系统(三)--- 处理器体系结构(三)(转)

               文章部分图片文字来自参考文章,参考文章总结地很好。

    指令处理阶段

              为了降低实现的复杂性,采用统一的框架,这样可以共用一些部件.我们将Y86的指令处理组织成如下几个阶段:

    • 取指(Fetch):从指令寄存器读取指令.
    • 译码(Decode):读取程序寄存器.
    • 执行(Execute): ALU计算结果(分为两种一种是计算值(用于更新程序寄存器),一种是计算存储器引用的有效地址).
    • 访存(Memory):读写存储器.
    • 写回(Write Back):写回寄存器文件.
    • 更新PC(PC update):将PC设置成下一条指令的地址.

             先大家只需要了解一下一条指令执行的要经历的阶段,后面会分析Y86的具体指令的执行过程.

    需要注意的两点:

    1.在统一框架下,每条指令都会经历以上所有阶段.

    2.在SEQ/SEQ+里,各个阶段是顺序进行的,但一个阶段内的内容基本上(有例外,稍后再说)是并行执行的.

     

    Y86指令的执行

             下面是各种指令处理的各个阶段,大家可以一扫而过,看我的分析结果,再对照着图就很容易理解.








            看到上面的指令处理的各个阶段是不是天花乱坠啊.其实一点不复杂,因为使用的是统一的框架.总结起来就如下几点:

    (1).首先要看指令到底要干啥,它的操作数是啥,明确数据流的方向.

           比如opl, rrmovl, irmovl, cmovXX都不涉及到存储器,都是将Execute阶段中的执行结果valE给某个程序寄存器.(数据流方向: valE->程序寄存器).

           比如mrmovl, popl的数据流方向是:存储器->程序寄存器.以为这肯定要从存储器中取出valM,再给这个程序寄存器.

           比如rmmovl的数据流方向是:程序寄存器->存储器,肯定会写入存储器.

    (2).写入程序寄存器的数据有两种来源,一种是valE(opl,rrmovl, irmovl, pushl,  popl, call, ret,cmovXX),一种是valM(mrmovl, popl).

    (3). pushl, popl, call, ret都涉及了"栈"(存储器),都会更新%esp(%esp+/-4:在执行阶段计算出来valE).将valE写回%esp.

    (4). opl在执行阶段会设置CC, cmovXX, jXX在执行阶段会有一个判断逻辑.

    (5).只有rmmovl, pushl和call需要写回存储器.

    (6).统一处理的原则:在excute阶段,valA尽量不参与运算,使用valB参与运算;在memory阶段,都是valA参与运算(为了使得pushl和rmmovl统一处理).

    (7).总结

    疑点

    ————

    1. rrmovl的execute阶段本不需要运算,为什么要执行"valE = 0+valA"?

    答:使用的是统一的框架,每条指令都必须通过每个阶段.这样做还有一个好处,减少信号传递的数量.写回都是通过valE和valM的,而不需要valA.

    2.为什么是mrmovl D(rB), rA而不是 mrmovl D(rA), rB?

    答:统一处理 mrmvol和rmmovl.这样保证了"execute阶段, valA尽量不参与运算,使用valB参与运算".

    3. popl rA的Write back阶段需要写两个寄存器.这两个写应该是有次序的啊?

    答:是的.为了保证"popl%esp"的语义同IA32一致,"R[%esp]<-valE"必须在"R[rA]<-valM"之前,这意味着按照只能在上升沿update的规则,就需要2个cycles来执行(违反了原则)。

    4. pushl rA怎么没有问题?

    答:由于在SEQ CPU中.因为读取的值在某根信号线(指的是valA信号)上存在着.即便是"pushl %esp", %esp的值已经在valA信号线上了,只需要将valA的值写回存储器即可.

    参考文章:

    1.https://blog.csdn.net/dennis_fan/article/details/8280141

  • 相关阅读:
    vue form dynamic validator All In one
    TypeScript api response interface All In One
    closable VS closeable All In One
    macOS 如何开启 WiFi 热点 All In One
    vue css inline style All In One
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
    牛腩新闻 59 整合添加新闻页 FreeTextBox 富文本编辑器,检测到有潜在危险的 Request.Form 值,DropDownList 的使用
    牛腩新闻 61尾声: error.aspx的使用 防止报错
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (上)
    牛腩新闻 62:尾声续2 asp.net的编译和发布
  • 原文地址:https://www.cnblogs.com/Benjious/p/9749615.html
Copyright © 2011-2022 走看看