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

    教材学习内容总结

    Y86指令集体系结构

    内容:定义一个指令集体系结构,包括定义各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理。
    程序员可见状态
    Y86程序中的每条指令都会读取或修改处理器状态的某些部分。
    Y86具体包括:8个程序寄存器、3个条件码ZFSFOF、程序计数器(PC)。
    Y86用虚拟地址引用存储器位置。 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态。
    Y86指令
    IA32指令集的一个子集,只包括四字节整数操作。寻址方式比较少,操作也比较少。
    指令编码长度从1个字节到6个字节不等,一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。字段fn指明是某个整数操作(OPL)、数据移动条件(cmovXX)或是分支条件(jXX),所有数值都用十六进制表示

    指令编码

    每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每部分4位:高4位是代码部分,低4位是功能部分。功能值只有在一组相关指令共用一个代码时才有用。
    8个程序寄存器中每个都有相应的0~7的寄存器标识符,程序寄存器存在一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。当需要指明不应访问任何寄存器时,用ID值0xF表示。有的指令没有寄存器操作数(分支指令和call指令),就没有寄存器指示符字节;只需要一个寄存器操作数的指令(irmovl、pushl、popl),将另一个寄存器指示符设为0xF。
    指令集的一个重要性质:字节编码必须有唯一的解释。
    Y86异常
    Y86状态码(在我们的设计中,任何AOK以外的代码都会使处理器停止)

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

    要实现一个数字系统需要三个主要的组成部分:
    计算对位进行操作的函数的组合逻辑
    存储位的存储器元素
    控制存储器元素更新的时钟信号组合电路:将很多的逻辑门组合成一个网,能构建计算块。
    多路复用:根据输入控制信号的值,从一组不同的数据信号中选出一个。
    构建这些网有两条限制:(1)两个或多个逻辑门的输出不能连接在一起(2)这个网必须是无环的。
    HCL表达式和C语言中逻辑表达式的区别:
    组合逻辑电路的输出会持续地响应输入的变化;C表达式只有在程序执行过程中被遇到时才会求值。
    C的逻辑表达式允许参数是任意整数,0表示FLASE,其他任何值都表示TRUE;逻辑门只对位值0和1进行操作。
    C的逻辑表达式可能只被部分求值;组合逻辑没有部分求值的规则,逻辑门只是简单地响应输入的变化。

    Y86的顺序实现

    各个阶段以及各阶段内执行操作:
    取指:从存储器读取指令字节,地址为程序计数器PC的值
    译码:从寄存器读入最多两个操作数,得到valA或valB
    执行:算术/逻辑单元要么执行指令指明的操作,计算存储器引用的有效地址,要么增加或减少栈指针。得到的值为valE。
    访存:将数据写入存储器,或从存储器中读出数据,读出的值为valM。
    写回:最多可以写两个结果到寄存器文件
    更新PC:将PC设为下一条指令的地址
    执行一条指令需要的处理过程:执行指令所表明的操作、计算地址、更新栈指针、确定下一条指令的地址。
    对于三种控制转移指令的处理:需要注意位信号Cnd。 在更新PC阶段,检查这个标志,如果这个标志为1,将PC设为valC(跳转目标),如果为0,就设为valP(下一条指令的地址)。

    取指阶段:
    以PC为第一个字节的地址,一次读6个字节。
    icode:控制逻辑块计算指令
    ifun:功能码
    三个一位的信号(根据icode值计算):instr_valid:发现不合法的指令;need_regids:包含寄存器指示符字节吗;need_valC:包括常数字吗
    后五个字节是寄存器指示符字节和常数字的组合编码。
    译码和写回阶段:
    都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB。
    寄存器文件,支持同时进行两个读和两个写,每个端口有一个地址连接(寄存器ID)和一个数据连接(32根线路),既可以作为寄存器文件的输出字,又可以作为他的输入字。
    执行阶段:
    包括算数/逻辑单元(ALU),输出为valE信号。ALU通常作为加法器使用
    包括条件码寄存器
    每次运行产生:零、符号、溢出、产生信号set_cc
    访存阶段
    读或者写程序数据。
    两个数据块产生存储器地址和存储器输入证据的值,两个产生控制信号表明应该是读还是写。当执行读操作时,数据存储器产生valM。
    根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。
    更新PC阶段
    产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。

    教材学习中的问题和解决过程

    学习的问题就是做练习4.2时它给出了五个字节序列,要我们确定所编码的Y86的指令序列。我不太懂,看了答案,不知道怎么通过这些字节序列就推出其汇编的指令序列。

    本周代码托管截图

    20145230/IS-design-20145230 - 码云 - 开源中国 http://git.oschina.net/20145230/IS-design-20145230

    其他(感悟、思考等,可选)

    本周我们学习的内容主要是Y86指令集以及关于它的一些执行过程,本章不仅用了汇编语言来让我们深入了解一条指令完整执行的过程,更用了HCL语言来直观地体现输入与输出的关系。HCL语言看似和我们学的HDL语言差不多,其实也有细微差别,HDL语言是程序描述语言,HCL语言则是控制语言。总之,坚持脚踏实地地完成好每周的任务使我们需要做到的,学好一门课程及语言的捷径就是不断实践、练习!

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 2000行 20篇 400小时
    第一周 2/2 20/20 初步了解Linux的一些基本命令
    第二周 1/3 15/35 了解vim编辑器
    第三周 86/86 1/4 25/60 了解了信息的表示和处理
    第五周 79/79 1/5 30/90 了解了程序的机器级表示
    |          |        |
    | 第六周     |   56/221      |  1/6     |  30/120 了解处理器的体系结构      |

    参考资料

  • 相关阅读:
    实现报表数据外置计算
    实现报表数据的可控缓存
    实现报表数据分库存储
    实现报表数据预先计算
    实现报表与算法的统一管理
    如何实现报表直接打印需求
    交叉填报表的制作
    格间计算性能提升方案
    填报脚本之轻松搞定复杂表的数据入库
    treeview_dropdown_control
  • 原文地址:https://www.cnblogs.com/kobe20145230/p/5991452.html
Copyright © 2011-2022 走看看