zoukankan      html  css  js  c++  java
  • 20145310《信息安全系统设计基础》第六周学习总结

    20145310《信息安全系统设计基础》第六周学习总结

    教材学习内容总结

    4.1
    Y86具体包括:8个程序寄存器(上一章说过)、3个1位条件码ZFSFOF、程序计数器(PC,存当前正在执行指令的地址)。

    程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态(正常还是异常)。

    指令编码长度从1个字节到6个字节不等,一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。

    Y86指令
    (1)movl:irmovl、rrmovl、mrmovl、rmmovl,分别显式地指明源和目的地的格式。第一个字母表明源的类型,i(立即数)、r(寄存器)或m(存储器 ),第二个字母代表目的,可以是r或者m。
    (2)整数操作指令OPl:addl、subl、andl和xorl。只对寄存器数据进行操作,同时还设置条件码。
    (3)跳转指令jXX:jmp、jle、jl、je、jne、jge、jg,根据分支指令的类型和条件码的设置来选择分支。
    (4)条件传送指令cmovXX:cmovle、cmovl、cmove、cmovne、cmovge和comvg,与寄存器-寄存器传送指令rrmovl一样,但只有当条件码满足所需要的约束时才会更新目的寄存器的值。
    (5)call指令将返回地址入栈,然后跳转到目的地址。ret指令从这样的过程调用中返回。
    (6)pushl和popl:入栈和出栈。
    (7)halt:停止指令的执行。

    p232的图一定要看懂,表明指令类型的第一个字节分为2个4位的部分,段fn指明是某个整数操作(OPL)、数据移动条件(cmovXX)或是分支条件(jXX),所有数值都用十六进制表示

    细节部分:a)不允许从存储器地址传存储器地址。b)整数操作命令对象只能为寄存器数据:立即数加寄存器数据必须先把立即数传到寄存器中)

    8个程序寄存器中每个都有相应的0~7的寄存器标识符,程序寄存器存在一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。当需要指明不应访问任何寄存器时,用ID值0xF表示。

    所有整数部分采用小端法编码。
    Y86状态码
    出现异常时Y86处理器停止运行指令,可以调用一个异常处理程序(配置成不同结果)

    保证栈不会增长的太大而覆盖程序的数据。

    模拟器只打印在模拟过程中改变的寄存器或存储器中的字,左边原始值,右边最终值。
    pushl指令的两种约定:a)压入/弹出%esp的原始值b)压入/弹出%esp-/+4后的值

    4.2
    4.2.1讲了与或非,4.2.2用这三个逻辑门组成位级电路,4.2.3多个位级电路组合成字级复合电路,4.2.4判断集合关系的通用格式iexpr in {iexpr1,iexpr2,……,iexprk}后面会用到。
    4.2.5
    1、存储设备都是由同一个时钟控制,两类存储器设备包括:
    a)时钟寄存器(寄存器):储存单个位或字,用时钟信号控制寄存器加载输入值。
    b)随机访问储存器(储存器):储存多个字,用地址选择该读/写哪个字。
    2、硬件和机器级编程中的寄存器有细微差别,分为称为“硬件寄存器”和“程序寄存器”。
    3、寄存器文件结构(内含8个程序寄存器):

    4、处理器有一个随机访问存储器来存储程序数据。
    4.3
    SEQ处理器:每一个时钟周期上,SEQ执行处理一条完整指令所需的所有步骤。

    将处理组织成阶段
    取址:valP:PC的值加上已取出指令的长度。
    译码:读入指令rA和rB字段指明的寄存器。
    执行:ALU执行指令指明的操作,计算存储器引用的有效地址,要么增加或者减少栈指针,得到的值为valE;对跳转指令来说,这个阶段会检验条件码和分支条件。
    访存:可以将数据写入存储器,或者从存储器读出数据。置为valM。
    写回:最多可以写两个结果到寄存器文件。
    更新:将PC设置成下一条指令的地址。

    执行一条指令需要的处理过程
    执行指令所表明的操作、计算地址、更新栈指针、确定下一条指令的地址。
    对于三种控制转移指令的处理:需要注意位信号Cnd。
    在更新PC阶段,检查这个标志,如果这个标志为1,将PC设为valC(跳转目标),如果为0,就设为valP(下一条指令的地址)。
    SEQ硬件结构
    实现所有Y86指令所需要的计算可以组织成6个阶段:取值、译码、执行、访存、写回和更新PC。 在SEQ中,所有硬件单元的处理都在一个时钟周期内完成。
    SEQ的时序
    SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器(程序计数器和条件码寄存器),随机访问存储器(寄存器文件、指令存储器和数据存储器)。

    每个时钟周期,程序计数器都会装在新的指令地址;只有在执行整数运算指令时,才会装载条件码寄存器;只有在执行rmmovl、pushl或call指令时,才会写数据存储器;寄存器文件的两个写端口允许每个时钟周期更新两个程序寄存器。

    处理器的原则:
    处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。
    SEQ阶段的实现
    nop指令:除了将PC加1,不进行任何处理;
    halt指令:将处理器状态设置为HLT,导致处理器停止运行。

    Y86安装过程

    首先构建YIS环境

    进行文件的修改(打开文件目录下的makefile文件夹,用leafpad或者其他记事本进行修改)
    GUIMODE=-DHAS_GUI       (去掉原有注释#)
    TKLIBS=-L/usr/lib/ -ltk8.5 -ltcl8.5
    TKINC=-I/usr/include/tcl8.5     

    make clean,make后,

    成功运行。

    代码托管

  • 相关阅读:
    注册审核
    静态表单验证
    多条件查询
    0623TP框架联系
    0618框架 增删改练习
    php框架 数据添加
    0616框架查询
    0614空操作方法 空控制器 跨控制器调用 命名空间
    php 0613框架基础
    php查询
  • 原文地址:https://www.cnblogs.com/pigeondandelion/p/5991356.html
Copyright © 2011-2022 走看看