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

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

  • 改进情况:

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

参考资料

posted @ 2017-11-01 22:26  20155227辜彦霖  阅读(287)  评论(0编辑  收藏  举报