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小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)