郝博雅

导航

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小时

  • 改进情况:

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

参考资料

posted on 2017-09-30 09:48  郝博雅  阅读(261)  评论(3编辑  收藏  举报