2017-2018-1 20155227 《信息安全系统设计基础》第七周学习总结
教材学习内容总结
第四章
Y86指令
- 只包括四字节整数操作。
- 寻址方式比较少,操作也比较少。
- 指令编码长度从1个字节到6个字节不等,一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。
指令编码
- 每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每部分4位:高4位是代码部分,低4位是功能部分。功能值只有在一组相关指令共用一个代码时才有用。
- 有的指令没有寄存器操作数(分支指令和call指令),就没有寄存器指示符字节;只需要一个寄存器操作数的指令(irmovl、pushl、popl),将另一个寄存器指示符设为0xF。
Y86异常
-
Y86状态码
-
出现异常时Y86处理器停止运行指令,也可以调用一个异常处理程序使其更完整。
Y86程序
Y86代码与IA32代码的主要区别:
(1)Y86可能需要多条指令来执行一条IA32指令所完成的功能。
(2)Y86没有伸缩寻址模式。
以“.”开头的词是汇编命令,他们告诉汇编器调整地址,以便在那儿产生代码或插入一些数据。
要实现一个数字系统需要三个主要的组成部分:
(1)计算对位进行操作的函数的组合逻辑
(2)存储位的存储器元素
(3)控制存储器元素更新的时钟信号
逻辑门
逻辑门只对单个位的数进行操作,而不是整个字。一旦一个门的输入变化,在短时间内,输出就会跟着变化。
组合电路和HCL布尔表达式
- 组合电路:将很多的逻辑门组合成一个网,能构建计算块。
- 组合逻辑电路和c语言中逻辑表达式的区别:
组合电路的输出会持续地响应输入变化,c语言表达式只有在执行过程中被遇到才求值。
C的逻辑表达式允许参数是任意整数,0是FALSE,其他任何值0的都是TRUE,逻辑门只对位值0和1操作。
C的逻辑表达式可能被部分求值(第一个参数就能确定结果的就不会对第二个求值)。
多路复用函数
通用格式:
[
select_1(布尔表达式):expr_1(整数表达式)
select_2:expr_2
......
select_k:expr_k
]
集合关系
判断集合关系的通用格式是:iexpr in {iexpr1,iexpr2,……,iexprk}
Y86的顺序实现
- SEQ 顺序处理器:每一个时钟周期上,SEQ执行处理一条完整指令所需的所有步骤。
- 各个阶段以及各阶段内执行操作:
取指:从存储器读取指令字节,地址为程序计数器PC的值
译码:从寄存器读入最多两个操作数,得到valA或valB
执行:算术/逻辑单元要么执行指令指明的操作,计算存储器引用的有效地址,要么增加或减少栈指针。得到的值为valE。
访存:将数据写入存储器,或从存储器中读出数据,读出的值为valM。
写回:最多可以写两个结果到寄存器文件
更新PC:将PC设为下一条指令的地址
SEQ硬件结构
- 画图惯例:
浅灰色方块表示硬件单元
控制逻辑块是用灰色圆角矩形表示的
线路的名字在白色椭圆中说明
宽度为字长的数据连接用中等粗度的线表示
宽度为字节或更窄的数据连接用细线表示
单个位的连接用虚线
SEQ的时序
SEQ的实现包括组合逻辑和两种存储器设备:
时钟寄存器 程序计数器和条件码寄存器
随机访问存储器 寄存器文件、指令存储器和数据存储器
SEQ阶段的实现
- 取指阶段:以PC为第一个字节的地址,一次读6个字节
- 译码和写回阶段:都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB。
- 执行阶段: 包括算数/逻辑单元(ALU),包括条件码寄存器。
- 访存阶段:读或者写程序数据。
- 更新PC阶段:产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。
教材学习中的问题和解决过程
-
问题1:在安装Y86模拟器时,出现以下错误:
-
问题1解决:仔细看过安装教程之后发现是修改
Makefile
时错误,修改过后又出现如下错误:
按照所给提示,最终还是未解决这个问题。
- 最终解决: 再重新按照安装步骤一步一步检查,发现是自己粗心大意,在修改Makefile文件时,ltk后面少写了一个8.5!修改之后成功安装。
代码调试中的问题和解决过程
- 问题1:在进行实验楼实验时,输入命令
sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so
来构建YIS环境时无反应。 - 问题1解决:输入第二次该命令,提示
ln:无法创建符号链接"/usr/lib/libtk.so":文件已存在
可是不太理解为什么要输入两次这个命令。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 错题1
下面和代码可移植性相关的C语言属性有()
A .
#define
B .
typedef
C .
sizeof()
D .
union
正确答案: A B C
理解:#define可以定义宏使得变量可移植,typedef可以使得类型可移植,sizeof()使得不同类型长度可移植。
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
-[20155318](http://www.cnblogs.com/lxy1997/)
- 结对照片
- 结对学习内容
- 教材第四章内容
- 完成第二次实验
- ...
其他(感悟、思考等,可选)
本周学习了Y86指令集、HCL硬件描述语言和Y86的顺序实现过程。在安装Y86模拟器时遇到许多问题,其中还有一些未解决,解决后会进行进一步的学习。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 133/133 | 1/1 | 8/8 | |
第三周 | 159/292 | 1/3 | 10/18 | |
第五周 | 121/413 | 1/5 | 10/28 | |
第七周 | 835/3005 | 2/7 | 10/38 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:15小时
-
实际学习时间:10小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)