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

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

    教材学习内容总结

    4.1 Y86指令集体系结构

    • Y86处理器状态类似于IA32,有8个程序寄存器:%eax、%ecx、%edx、%ebx、%esi、%edi、%esp、%ebp。处理器的每个程序寄存器存储一个字。%esp被入栈、出栈、调用和返回指令作为栈指针。

    • ZF、SF、OF,它们保存最近的算术或逻辑指令所造成影响的有关信息。程序计数器PC存放当前正在执行指令的地址。

    • 程序状态的最后一个部分是状态码stat,它表明程序执行的总体状态

    • IA32的movl指令:irmovl、rrmovl、mrmovl、rmmovl。指令名字第一个字母代表源的类型。源可以是立即数(i)、寄存器(r)、存储器(m),目的可以是寄存器(r)、存储器(m)

    • 两个存储器传送指令中的存储器引用方式是基址和偏移量形式:4个整数操作指令:addl、subl、andl、xorl;7个跳转指令:jmp、jle、jl、je、jne、jge、jg;6个条件传送指令:cmovle、cmovl、cmove、cmovne、cmovge、cmovg;Halt指令停止指令的执行

    • Y86异常:以“.”开头的词是汇编器命令,它们告诉汇编器调整地址,以便在那里产生代码或插入一些数据

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

    • 逻辑门是数字电路的基本计算元素。逻辑门总是活动的,一旦一个门的输入变化了,在很短的时间内,输出就会相应地变化。
    • 将很多的逻辑门组合成一个网,就能构建计算块,称为组合电路。限制:1.两个或者多个逻辑门的输出不能连接在一起;2.这个网必须无环
    • 多路复用电路(MUX):根据输入控制信号的值,从一组不同的数据信号中选出一个。
    • HCL:1.HCL中所有字级的信号都声明为int;2.在画字级电路的时候,用中等粗度的线表示携带字的每个位的线路,用虚线来表示布尔信号的结果;3.在HCL中,表示默认情况(即所有条件都没有被选中的情况)一般用1
    • 时钟寄存器&随机访问存储器:1.时钟寄存器存储单个位或者字。时钟信号控制寄存器加载输入值 2.随机访问存储器存储多个字,用地址来选择该读入或者该写哪个字

    4.3 Y86的顺序实现

    • 将处理组织成阶段

        ①取指:取指阶段从存储器读取指令字节,地址为程序计数器PC的值

        ②译码:译码阶段从寄存器文件读入最多两个操作数

        ③执行:在执行阶段,算数/逻辑单元要么根据ifun的值执行指令指明的操作,计算机存储器引用的有效地址,要么增加或减少栈指针

        ④访存:访存阶段可以将数据写入存储器,或从存储器读出数据

        ⑤写回:写回阶段最多可以写两个结果到寄存器文件

        ⑥更新PC:将PC设置成下一条指令的地址

    irmovl指令的处理与rrmovl类似,但是因为是长指令格式,所以程序计数器要加6
    指令call和ret与之前的popl和pushl类似。对于指令call,我们要将valP也就是call之后的那条指令的地址压入栈中在更新PC阶段,将PC设置为valC,也就是调用目的地

    • SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器、随机访问存储器

    • SEQ阶段的实现
      ①取指阶段:包括指令存储器单元。一次从存储器中读出6个字节。第一个字节分为ocode,ifun。根据icode的值,计算:instrvalid(发现不合法指令),needregids,need_valC。instrvalid和imemerror在访存阶段被用来产生状态码。
      ②S译码和写回阶段:都需要访问寄存器文件。寄存器文件有四个端口,它支持同时进行两个读和两个写;每个端口都一个地址连接和数据连接。如果某个地址端口上的值为特殊标识符0xf,则表明不需要访问寄存器。
      ③执行阶段:包括算术/逻辑单元(ALU)。这个单元革命家alufun信号的设置,对输入aluA和aluB执行ADD,SUB,AND,XOR运算。ALU的输出就是valE信号。还包括条件码寄存器。每次运行时,ALU都会产生三个与条件码相关的信号——零,符号,溢出。用set_cc来控制是否应该更新条件码寄存器。
      ④访存阶段:两个控制块产生存储器地址和存储器输入数据的值;另外两个块产生控制信号表明应该执行读操作还是写操作。当执行读操作时数据存储器产生值valM。
      ⑤更新PC阶段:SEQ中最后一个阶段会产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM、valP

    实验楼学习

    • 根据老师提供的信息构建YID环境:

    cd ~/Code/shiyanlou_cs413
    wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar
    tar -xvf sim.tar
    cd sim
    sudo apt-get install tk
    sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so
    sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so
    make

    用make all指令编译

    可以看到编译后的.yo文件

    查看教材p239页的代码

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

    -根据张晓涵同学的博客安装了Y86

    同时也更改了makefile

    但一直无法编译.yo文件

    只好用实验楼来完成内容

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

    我仔细回想了以下好像第一步安装bison和flex词法分析工具好像并没有成功,我就删了解压的文件重新来了一遍确实是没有安装

    之后强行用了> sudo apt-get -f install bison flex 还是不行。。。
    之后百度了解决方法> apt-get --fix-broken install

    之后就成功啦~~~

    进入y86-code文件夹,可以找到asuml.yo:

    make clean Y86-code文件夹,可以看到只有.ys文件了
    之后再> make all 可以汇编运行所有代码。

    本周代码托管

    代码托管链接

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

    本周大多数都是验证类的题目,需要认真思考和理解,感觉把更多的时间抽出来真正的理解课本内容更为重要。
    本周还进行了家庭作业整理工作,其实觉得很枯燥(但可以加分。。。),就在翻看学姐的博客是我发现了闫佳昕学姐的第一周博客,上面详细的分析了每一条汇编指令执行的过程,寄存器的指向变化以及出栈如栈的情况,每周在读汇编代码的时候都非常难理解,但今天有了非常具体的认识,然而这是学姐第一周的博客·····早就听说学姐是超级无敌大学霸,其实何为学霸,并不是她们生来就比我们的大脑发达,只是人家在遇到问题时就及时的去解决了问题,我从第二周遇到的问题在第六周才解答,,,这就是比不上别人的原因,从以后开始要认真反思自己,不要再为了写博客而写博客,要切实的!去解决!自己遇到的问题!!!
    学姐的参考博客

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 300/500 2/4 18/38
    第三周 500/1000 3/7 22/60
    第五周 300/1300 2/9 30/90
    第六周 100/1400 2/9 30/90

    参考资料

  • 相关阅读:
    Express之托管静态文件
    Express与NodeJs创建服务器的两种方法
    NodeJs相关系列文章
    CentOS安装SVN
    图片上传之FileAPI与NodeJs
    Git的基本操作
    页面图片懒加载原理
    JavaScript原生的节点操作
    NodeJs之调试
    CentOS下使用NVM
  • 原文地址:https://www.cnblogs.com/20145238jym/p/5988376.html
Copyright © 2011-2022 走看看