zoukankan      html  css  js  c++  java
  • 第六周学习总结

    第四章  处理器体系结构

    4.1 Y86指令集体系结构

      定义一个指令集体系结构,例如Y86,包括定义各种状态元素、指令集和他们的编码、一组变成规范和异常事件处理。

    4.1.1 程序员可见的状态

    ①程序员可见的状态:Y86中每条指令都会读取或修改处理器状态的某些部分。这里的“程序员”既可以是用汇编代码写程序的人,也可以是产生机器代码的编译器。

    Y86的处理器状态类似IA32。有8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%esp和%ebp。处理器的每个程序寄存器存储一个字。

    ②存储器,从概念上来说是一个很大的字节数组,保存着程序和数据。

    Y86程序用虚拟地址来引用存储器位置。硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址,指明数据实际保存在存储器那个地方。

    ③状态码stat:它表明程序执行的总体状态,会指示是正常运行还是出现了某种异常。

     

     

    4.1.2 Y86指令

    Y86指令集基本上是IA32指令集的一个子集,只包括四字节整数操作,寻址方式比较少,操作也较少。

     

    IA32的movl指令分成了四个不同的指令:irmovl,rrmovl,mrmovl,rmmovl 显示的指明源和目的。

    源可以是立即数i,寄存器r,存储器m     目的可以是寄存器r,存储器m

    不允许从存储器到存储器,也不允许将立即数传到存储器。

    4个整数操作指令:addl,subl,andl,xorl  只对寄存器数据进行操作,会设置3个条件码

    7个跳转指令:jmp,jle,jl,je,jne,jge,jg

    6个条件传送指令:cmovle,comvl,cmove,cmovne,cmovge,cmovg

    call指令将返回地址入栈,然后跳到目的地址。ret从这样的过程调用中返回

     

    pushl,popl实现入栈和出栈

     

    halt停止指令的执行,会导致处理器停止,并将状态码设置为HLT

    4.1.3 指令编码

    每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型。

    1.第一个字节

    这个字节分为两个部分,每个部分4位:

    • 高四位:代码部分,值域为0~0xB
    • 第四位:功能部分,功能值只有在一组相关指令共用一个代码时才有用。

    比如:课本第233页,Y86指令集的功能码:

    整数操作里代码部分均为6,功能部分区分addl,subl,andl,xorl

    分支指令里代码部分均为7

    传送指令里代码部分均为2

    这里要注意rrmovl归到了传送指令里,前面说过它们有相同的指令代码

    8个程序寄存器中每个都有相应的0~7的寄存器标识符,程序寄存器存在CPU中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器id作为地址的随机访问存储器。

    当需要指明不应访问任何寄存器时,用ID值0xF表示

    2.有的需要额外的字节

    (1)附加的寄存器指示符字节

    指定一个或两个寄存器,例如rA或者rB。

    • 没有寄存器操作数的指令,例如分支指令和call指令,就没有寄存器指示符字节。
    • 只需要一个寄存器操作数的指令(irmovl,pushl,popl)将另一个寄存器指示符设为0xF
    (2)附加的4字节常数字

    这个字的用处:

    1.irmovl的立即数数据

    2.rmmol和mrmovl的地址指示符的偏移量

    3.分支指令和调用指令的目的地址

    注意事项

    1.分支指令和调用指令的目的地址是一个绝对地址

    2.所有整数采用小端法编码

     

    4.1.4 Y86异常

     

    对于Y86,当遇到这些异常的时候,我们就简单的让处理器停业执行指令。

    在更完整的设计中,处理器通常会调用一个异常处理程序,这个过程被指定用来处理遇到的某种类型的异常。

    4.1.5 Y86程序

    Y86和IA32的区别

    1.Y86有时需要两条指令来完成IA32一条指令就能完成的事

    2.Y86没有伸缩寻址模式

    4.1.6 一些Y86指令的详情

     

     

    4.2 逻辑设计和硬件控制语言HCL

    4.2.1 逻辑门

    1.逻辑门产生的输出,等于它们输入位值的某个布尔函数。

    2.

    AND &&OR ||NOT !

    3.逻辑门只对单个位的数进行操作,而不是整个字。

    4.逻辑门总是活动的,输入变化输出很快就跟着变化。

    4.2.2 组合电路和HCL布尔表达式

    组合电路:讲很多的逻辑门组成一个网,就能构成计算块。

    构建这些网有两条限制:

    ①两个或多个逻辑门的输出不能连接在一起,否则他们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电器故障。

    ②这个网必须是无环的。

    4.2.3 字节的组合电路和HCL整数表达式

     

    4.2.4 集合关系

    判断集合关系的通用格式是:

    iexpr in {iexpr1,iexpr2,...,iexprk}

    iexpr等都是整数表达式。

    4.2.5 存储器和时钟

    1.时序电路的两类存储器设备:

    (1)时钟寄存器(简称寄存器):储存单个位或字。

    (2)随机访问储存器(简称储存器):储存多个字,用地址选择该读/写哪个字。

    寄存器分为“硬件寄存器”和“程序寄存器”。

    2.Y86处理器

    它会用时钟寄存器保存程序计数器PC,条件代码CC和程序状态Stat。

    4.3 Y86的顺序实现

    4.3.1 将处理组织成阶段

    下面是关于各个阶段以及各阶段内执行操作的简略描述:

    • 取指:取指阶段从存储器读取指令字节,地址为程序计数器(PC)的值。
    • 译码:译码阶段从寄存器文件读入最多两个操作数,得到val A/val B.
    • 执行:执行阶段,算术/逻辑单元要么执行指令明确的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。得到的值称为valE
    • 访存:访存阶段可将数据写入存储器或从存储器读出数据
    • 写回:最多可写两个结果到存储器。
    • 更新PC:将PC设置成下一指令的地址。
    • 程序计数器放在寄存器中,位于左下角PC。
    • 信息随着线流动,方向是先向上再向右
    • 反馈先祖在右边向下
    • 所有硬件单元的处理都在一个时钟周期内完成。
    • 浅灰色方块表示硬件单元
    • 控制逻辑块是用灰色圆角矩形表示的
    • 线路的名字在白色椭圆中说明
    • 宽度为字长或更窄的数据连接用细线
    • 单个位的连接用虚线。

    4.3.2 SEQ硬件结构

    SEQ抽象视图的画法:

    • 程序计数器放在寄存器中,位于左下角PC。
    • 信息随着线流动,方向是先向上再向右
    • 反馈先祖在右边向下
    • 所有硬件单元的处理都在一个时钟周期内完成。
    • 浅灰色方块表示硬件单元
    • 控制逻辑块是用灰色圆角矩形表示的
    • 线路的名字在白色椭圆中说明
    • 宽度为字长或更窄的数据连接用细线
    • 单个位的连接用虚线。

     

    4.3.3 SEQ的时序

    一个时钟变化会引发一个经过组合逻辑的流来执行整个指令。

    SEQ的实现包括组合逻辑和两种存储器设备:

    时钟寄存器:程序计数器和条件码寄存器

    随机访问存储器:寄存器文件、指令存储器和数据存储器

    组合逻辑不需要时序或控制。

    四个硬件单元需要时序进行明确控制:程序计数器、条件码寄存器、数据存储器和寄存器文件,通过一个时钟信号来控制,它触发将新值装载到寄存器以及将值写到随机访问存储器。即要控制处理器中的时序,只需要寄存器和存储器的时钟控制。

    4.3.4 SEQ阶段的实现

     

    1、取指阶段

    以PC作为起始地址,从指令存储器中读出六个字节。

    根据这些字节,产生出各个指令字段。PC增加模块计算信号valP。

    2、译码和写回阶段

    指令字段译码,产生寄存器文件使用的四个地址(两个读和两个写)的寄存器标识符。

    从寄存器文件中读出的值成为信号valA和valB。两个写回值valE和valM作为写操作的数据。

    3、执行阶段

    ALU要么为整数运算指令执行操作,要么作为加法器。

    根据ALU的值,设置条件码寄存器。检测条件码的值,判断是否该选择分支。

    4、访存阶段

    数据存储器既可以写,也可以读存储器的值。从存储器读出的值就形成了信号valM。

    5、更新PC阶段

    根据指令代码和分支标志,从信号valC、valM和valP中选出下一个PC的值。

     

    参考资料:

    百度百科

    闫佳歆同学的博客

     

  • 相关阅读:
    在ashx页面中获取session
    写给程序猿们的交互设计
    javascript如何合并多个数组
    <%%>
    #实用# 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的原因
    通过ContentType = "text/XML" 实现ASP输出xml
    [记录] Host Office Document In WebBrowser control in a Windows Form Application.
    [转载]error LNK2001: unresolved external symbol __DllMainCRTStartup@12错误
    Access database not open
    一些Access MVP们的博客
  • 原文地址:https://www.cnblogs.com/lxq20135309/p/4890428.html
Copyright © 2011-2022 走看看