zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155205 《信息安全系统设计基础》第三周学习总结

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

    教材学习内容总结

    1.Y86指令集及其应用

    下图列出了Y86指令集中包含的所有指令,以及每个指令的编码。

    可以看到,各个指令的长度从1字节到6字节不等,这样编码可以减少程序代码占用的空间。第1个字节的高4位作为指令编码,用来区分不同的指令,低4位要么是0,要么是fn。fn称为功能代码,用来区分不同的操作。如下图所示,不同的功能码在不同的指令中有不同的含义。在运算指令中,分别代表加、减、与和异或;在分支跳转指令中,分别代表不同的跳转条件;在条件转移指令中,分别代表不同的转移条件。

    第2个字节,对于大部分指令来说存放的是寄存器标识符,请看下图:

    2.指令的分阶段执行

    在Y86架构中,我们将每个指令的执行分为6个阶段。

    取指:从PC中取出当前要执行的指令,并按照指令编码对其分解,得到icode、ifun、rA、rB、valC等值。

    译码:根据rA、rB取出对应寄存器的值valA、valB。

    执行:ALU在不同指令下执行不同的操作,包括简单运算、地址加减等等,运算结果为valE,运算时会对条件码产生影响。

    访存:从存储器读取数据或向存储器写入数据。读出的值为valM。

    写回:将前面生成的结果写回寄存器文件。

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

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

    • 问题1:对于4.11习题中的 irmovl $128,%esp指令取指阶段行情况不理解,不知道为啥是答案里那样写。

    • 问题1解决方案:

      A、取指阶段从存储器读取指令字节,地址为程序计数器(PC) 的值。从指令中抽取出指令指示符字节的两个四位部分,称为icode(指令代码)和ifun(指令功能)。

      irmovl rA,rB
      指令,它的字节编码是3 0 rA rB,那么icode:ifun就是3:0。

      B、它可能取出一个寄存器指示符字符,指明一个或两个寄存器操作数指示符rA和rB,这里的rA和rB与上面例子中的rA、rB位置相同。

      题中$128是立即数,所以那么 rA表示为f;%esp为4。

      C、它还可能取出一个四字节常数字valC。 这个valC就是128

      D、还有计算当前指令的下一指令的地址 valP,valP等于PC的值加上已取出指令的长度。(PC值在执行上一条指令后为0x00e)

      这样一来,我就清楚取指阶段该怎么写了:

      icode:ifun←M1[0x00e] =3:0
      rA:rB←M1[0x00f] =f:4
      valC←M4[0x010] =128
      valP←0x00e+6=0x014 
      

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

    • 问题1:如何使用y86模拟器汇编并查看代码?

    • 问题1解决方案:

      1.课程QQ群中,或官网下载Y86模拟器,验证教材上不少于三个HCL代码

      2.构建YIS环境:

      cd ~/Code/shiyanlou_cs413
      wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar
      tar -xvf sim.tar
      cd sim
      sudo apt-get install bison flex 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/libtcl8.6.so /usr/lib/libtcl.so
      make
      

      3.YIS手册下载

      4.YIS测试:

      cd y86-code
      
      make asuml.yo
      

      进行汇编,asuml.yo就是汇编后的结果。

      make all
      

      可以汇编运行所有代码结果。

      结果:

    代码托管

    上周考试错题总结

    • 错题结果暂未出,今晚过后才能看到错题和解析。

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • 详细地记录了学习过程

    本周结对学习情况

    - [20155218](http://www.cnblogs.com/xzh1996/p/7668839.html)
    

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

    这周学习了ISA中一个例子Y86,在学习时我们总结,一个ISA包含以下这些部分:

    • 指令集
    • 指令集编码
    • 基本数据类型
    • 一组编程规范
    • 寄存器
    • 寻址模式
    • 存储体系
    • 异常事件处理
    • 中断
    • 外部I/O
      今后若学习其他的指令集,也要掌握这些部分。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 65/65 1/1 10/10
    第三周 120/185 2/3 15/15
    第五周 375/560 3/6 14/29
    第六周 287/847 1/7 14/43
    七六周 575/1422 2/8 13/56

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程估计方法

    • 计划学习时间:13小时

    • 实际学习时间:13小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    我容易么?
    意译和音译
    请教博客园高手:msn老是掉线的问题
    超市里最安全的食品
    两类人
    只要牵了手,就请不要轻易的说分手
    Palm Treo 650 .VS. Dopod P800
    强烈推荐一健康食品:紫红薯
    年底三篇
    奶奶,走好!
  • 原文地址:https://www.cnblogs.com/haoliberale/p/7613748.html
Copyright © 2011-2022 走看看