• 2017-2018-1 学号20155311 《信息安全系统设计基础》第7周学习总结


    2017-2018-1 学号20155311 《信息安全系统设计基础》第7周学习总结

    安装Y86模拟器

    1. 在http://csapp.cs.cmu.edu/public/students.html地址下载sim并解压。

    安装tcl/tk:

    1. 修改Makefile文件(sim文件夹下的):
    • GUIMODE=-DHAS_GUI
    • TKLIBS=-L/usr/lib/ -ltk8.5 -ltcl8.5
    • TKINC=-I/usr/include/tcl8.5
    1. 需要先make clean,再make

    2. 成功编译后,使用cat命令查看Y86-64的汇编程序

    1. 我们可以打开模拟器,使其进行更为直观的演示。以pipe文件夹为例,注意到文件夹下有一个名为“psim”的可执行文件,输入./psim -t -g ../y86-code/asum.yo即可打开模拟器:

    Y86的指令集:

      

    • halt:这个指令将会终止指令的执行。

    • nop:这是一个占位指令,它不做任何事情,后续为了实现流水线,它有一定的作用。
      xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器。

    • opl:操作指令,比如加法,减法等等。

    • jxx:条件跳转指令,根据后面的条件进行跳转。

    • cmovxx:条件传送指令,后面的xx代表的是条件。特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器。

    • call与ret:方法的调用和返回指令。一个将返回地址入栈,并跳到目标地址。一个将返回地址入PC,并跳到返回地址。

    • push与pop:入栈和出栈操作。

    • SEQ硬件结构

    • 在SEQ中,所有硬件单元的处理都在一个时钟周期内完成。

    • SEQ线路图的画图惯例:

    • 浅灰色方框表示硬件单元

    • 控制逻辑块是用灰色圆角矩形表示的

    • 线路的名字在白色椭圆中说明

    • 宽度为字长的数据连接用中等粗度的线表示

    • 宽度为字节或者更窄的数据连接用细线表示

    • 单个位的连接用虚线表示

    • SEQ的时序

    • SEQ的实现包括组合逻辑和两种存储器设备: 时钟寄存器 程序计数器和条件码寄存器
      随机访问存储器 寄存器文件、指令存储器和数据存储器

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

    • 组织计算原则:处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。 用时钟来控制状态元素的更新,值通过组合逻辑传播。

    • SEQ阶段的实现

    • 取指阶段: 以PC为第一个字节的地址,一次读6个字节。 icode:控制逻辑块计算指令; ifun:功能码;
      三个一位的信号(根据icode值计算):instr_valid:发现不合法的指令;need_regids:包含寄存器指示符字节吗;need_valC:包括常数字吗 后五个字节是寄存器指示符字节和常数字的组合编码。
      译码和写回阶段: 都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB。 寄存器文件,支持同时进行两个读和两个写,每个端口有一个地址连接(寄存器ID)和一个数据连接(32根线路),既可以作为寄存器文件的输出字,又可以作为他的输入字。

    • 执行阶段: 包括算数/逻辑单元(ALU),输出为valE信号。ALU通常作为加法器使用

      • 访存阶段 读或者写程序数据。 两个数据块产生存储器地址和存储器输入证据的值,两个产生控制信号表明应该是读还是写。当执行读操作时,数据存储器产生valM。 根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。
    • 更新PC阶段 产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。

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

    • Y86模拟器的时候一直没有找到psim的可执行文件,但是有psim.c文件?
    • 后来发现原来自己没有MAKE应该在make clean指令之后再接make没有编译好

    代码调试中的问题和解决过程

    代码托管

    https://gitee.com/gaoziyun11/Linux/tree/master

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

    这周的学习算是对上一章内容的更深层次的理解和学习,同时也是对上学期汇编学习的再复习与巩固,Y86是一个指令体系结构(ISA),目的是为了让我们更加清晰的了解ISA,我们学这个并不是为了设计指令集,因为这种工作很难发生在我们的身上。我们的目的是为了了解CPU处理指令的流程以及它的工作原理,学习它的思想,这对我们说不定会有一些启发。

  • 相关阅读:
    了解一些分词工具
    Maven 依赖的作用域
    aop 的一些表达式
    Mybatis 高级查询的小整理
    namespace" 或The content of element type "mapper" must match "EMPTY"
    Spring事务管理
    Java异常详解
    初识事务
    数据库共享锁与排它锁
    StringUtils.isEmpty和StringUtils.isBlank的区别
  • 原文地址:https://www.cnblogs.com/gaoziyun11/p/7788319.html
Copyright © 2020-2023  润新知