zoukankan      html  css  js  c++  java
  • 信息安全系统设计基础第六周学习总结—20135227黄晓妍

    第四章

    ISA

    指令集体系统结构:一个处理器支持的指令和指令的字节级编码。

    不同的处理器家族有不同的ISA。

    Y86

    本章定义的一个简单的指令集。包括各种状态元素、指令和它们的编码、一组编程规范和异常事件处理。

    Y86处理器

    以顺序指令执行为基础,设计了一个流水化的处理器。将每条指令分成5步,每个步骤都由一个独立的硬件部分或者阶段来处理。每个时钟周期有新的指令进入流水线,即说该处理器可以同时执行5条指令的不同阶段。(重点在于如何处理冒险冲突的情况。数电,EDA中的概念)

    4.1.1 程序员可见状态

    即:Y86程序中每条指令都会读取或者修改处理器状态的某些部分的状态。

    帮助理解   程序员:用汇编代码写程序的人,产生机器代码的编译器。

    具体内容   8个程序寄存器(与IA32 一样),3个条件码(ZF,SF,OF)。PC程序计数器存放当前正在执行指令的地址。存储器,很大的字节组,保存着程序和数据。状态码Stat,表明程序的总体状态。(见p232图4—1)

    4.1.2 Y86指令

    背景知识:一条指令含有一个单字节的指令指示符。可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。字段fn说明是 某个整数操作opl,数据移动条件comvXX,分支条件Jxx。

    movl指令:

             irmovl , rrmovl , mrmovl , rmmovl .

    i:立即数r:寄存器m:存储器。

    第一个字母代表源操作数,第二个字符代表目的操作数。

    注意:有存储器寻址参与的两种movl指令,采用基址和偏移量形式。不支持第二变址寄存器和任何寄存器值得伸缩。

    (p233页有以下详情)

    4个整数操作指令:addl,subl,andl,xorl.

    7个跳转指令。

    6个条件传送指令。

    Call指令返回地址入栈,人后跳回目的地址。 Ret令从这样的调用中返回。

    Pushl popl入、出栈。

    Hatl将处理器停止,并将状态码设定为HLT。

    4.1.3指令编码

    每条指令的第一个字节:

    高四位0~B表示,是代码部分。手工对指令编码时参照p232页的表格。注意rrmovl和cmovXX取值一样。

    低四位是功能部分。除了opl,jXX,cmovXX以外全为0.这三者的指令对应的值,参照p233页的图。

    附加部分:

    寄存器指示符:参照p234页的表格,对应的寄存器的编号。

    4字节的常数字(这个部分采用小端法):

    1. irmovl中的立即数数据
    2. mmovl,mrmovl中存储器m地址指示符的偏移量
    3. 分支指令jXX的目的地址(绝对地址)
    4. 调用指令call的目的地址(绝对地址)

    根本前提:字节编码和指令序列是一一对应的。

    4.1.4Y86异常

    使用状态码stat描述。一共有四种取值。(见p237)在Y86中除了等于1以外的其他情况,都会使处理器停止(在IA32或者更完整设计的ISA中,都会调用一个异常处理程序但这个是简化版咯。)

    4.1.5Y86完整的程序

    和IA32的汇编程序一样,包括代码段数据段和代码。“.”开头的词语是汇编器命令。

    理解见p238.239.240的程序。基本和汇编程序是一样的。

    4.2逻辑设计

    这部分与以前学习过的电子电路,数字电路,EDA关联性非常大。

    前提知识点:

    *逻辑1是用1V左右的高电压表示的。

    *逻辑0使用0V左右的低电压表示的。

    *实现一个数字系统:计算对位进行操作的函数的组合逻辑、存储位的存储器元件、控制存储器元件更新的时钟信号。

    4.2.1逻辑门:

    只对单个位的数进行操作,而不是整个字。

    与:&&  或: ||  非: !

    4.2.2组合电路:

    很多逻辑门组合成一个网构建的计算块。(注意两个或多个输出不能连接在一起,并且无环。)

    HCL表达式与C语言中的表达式的区别:

    *HCL中输出会持续随着输入变化而变化。而C语言中只有在程序执行到的时候才进行求值。

    *HCL只对0和1操作。C语言中,0是FLASE,除了0以外的所有整数都是TRUE

    *C中&&和||这两种,是优先求值,(&和|并不是)第一个值就能确定结果的话,它不会去计算第二个值。但是HCL中并没有这样的规则。

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

    例如:bool eq=(A==B);

    在HCL硬件描述语言中,每个字都可以声明为特定的位数。允许描述自是否相等。输出eq表示AB是否相等。

    画字级电路的时候,实线表示携带字的每个位的线路,虚线表示布尔信号的结果。

    多路复用函数使用情况表达式描述:

    [

             Select:expr

    ]

    Select代表什么时候选择这种情况

    Expr表示该种情况得到的数值

    注意:顺序执行,第一个求值为1 的情况会被选中。一般最后一个表达式是 1:expr。表示的意思是前面所有情况都没有选中,就执行最后这个。

    例如:

    Int out=[

             S&&q :a

             S&&w:b

             1    :c

    ]

    算术逻辑单元:

    两部分组成:数据输入,控制输入。

    控制输入代表不同的算术或逻辑操作。

    0:+

    1:-

    2:&

    3:^

    4.2.4集合关系

    书上的引入例子是数据选择器,是EDA 中学习的七个基本集合电路中的一个。

    4.2.5存储器和时钟

    时钟寄存器:(硬件寄存器)存储单个位或字。时钟信号控制寄存器加载输入值。

    随机访问存储器(存储器)存储字,用地址来选择该读或该写那个字。

    4.3Y86的顺序实现

    处理指令阶段化:

    取值译码(从寄存器读入最多两个操作数)、执行访存(写入,读出存储器)、写回(写最多两个结果到寄存器)、更新PC(设置为下一条指令的地址)。

    取值:valC四字节常数字valP下一条指令的地址。

    译码:从寄存器读入的数valA,valB.

    执行:计算出的值valE.

    访存:从存储器读出的值valM.

    写回:写入寄存器的结果。

    更新PC

    SEQ硬件结构:

    计算中不一样的地方:

             四个寄存器的ID信号:srcA,valA的源;srcB,valB的源;dstE,写入valE的寄存器;dstM,写入valM的寄存器。

    SEQ的时序:

    需要时序控制的控制的四个硬件:程序计数器、条件码寄存器、数据寄存器、寄存器文件。

    它们的值要等时钟信号(上升沿或者下降沿来临时才改变)。

    SEQ阶段的实现:

    取值:第一个字节Split:由icode和ifun组成。Align:一字节的寄存器指示符和四字节的常数字。

    译码和回写:读、写端口都有一个地址连接(寄存器ID)和数据连接(寄存器文件的输出、入字)。

    执行阶段

    访存阶段更新PC

    参考资料:《深入理解计算机系统》

  • 相关阅读:
    C语言入门(16)——C语言的数组
    快速插入一百万行数据储存过程
    如何将两个表名对调
    MySQL规范
    MySQL运行环境部署规范
    mysql查看存储过程
    批量杀死MySQL连接的几种方法
    查看堵塞的SQL
    mysqldump备份脚本
    查看当前的数据和索引的总大小
  • 原文地址:https://www.cnblogs.com/angelahxy/p/4889991.html
Copyright © 2011-2022 走看看