20145238-荆玉茗 《信息安全系统设计基础》第6周学习总结

20145238《信息安全系统设计基础》第6周学习总结

教材学习内容总结

4.1 Y86指令集体系结构

  • Y86处理器状态类似于IA32,有8个程序寄存器:%eax、%ecx、%edx、%ebx、%esi、%edi、%esp、%ebp。处理器的每个程序寄存器存储一个字。%esp被入栈、出栈、调用和返回指令作为栈指针。

  • ZF、SF、OF,它们保存最近的算术或逻辑指令所造成影响的有关信息。程序计数器PC存放当前正在执行指令的地址。

  • 程序状态的最后一个部分是状态码stat,它表明程序执行的总体状态

  • IA32的movl指令:irmovl、rrmovl、mrmovl、rmmovl。指令名字第一个字母代表源的类型。源可以是立即数(i)、寄存器(r)、存储器(m),目的可以是寄存器(r)、存储器(m)

  • 两个存储器传送指令中的存储器引用方式是基址和偏移量形式:4个整数操作指令:addl、subl、andl、xorl;7个跳转指令:jmp、jle、jl、je、jne、jge、jg;6个条件传送指令:cmovle、cmovl、cmove、cmovne、cmovge、cmovg;Halt指令停止指令的执行

  • Y86异常:以“.”开头的词是汇编器命令,它们告诉汇编器调整地址,以便在那里产生代码或插入一些数据

4.2 逻辑设计和硬件控制语言HCL

  • 逻辑门是数字电路的基本计算元素。逻辑门总是活动的,一旦一个门的输入变化了,在很短的时间内,输出就会相应地变化。
  • 将很多的逻辑门组合成一个网,就能构建计算块,称为组合电路。限制:1.两个或者多个逻辑门的输出不能连接在一起;2.这个网必须无环
  • 多路复用电路(MUX):根据输入控制信号的值,从一组不同的数据信号中选出一个。
  • HCL:1.HCL中所有字级的信号都声明为int;2.在画字级电路的时候,用中等粗度的线表示携带字的每个位的线路,用虚线来表示布尔信号的结果;3.在HCL中,表示默认情况(即所有条件都没有被选中的情况)一般用1
  • 时钟寄存器&随机访问存储器:1.时钟寄存器存储单个位或者字。时钟信号控制寄存器加载输入值 2.随机访问存储器存储多个字,用地址来选择该读入或者该写哪个字

4.3 Y86的顺序实现

  • 将处理组织成阶段

    ①取指:取指阶段从存储器读取指令字节,地址为程序计数器PC的值

    ②译码:译码阶段从寄存器文件读入最多两个操作数

    ③执行:在执行阶段,算数/逻辑单元要么根据ifun的值执行指令指明的操作,计算机存储器引用的有效地址,要么增加或减少栈指针

    ④访存:访存阶段可以将数据写入存储器,或从存储器读出数据

    ⑤写回:写回阶段最多可以写两个结果到寄存器文件

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

irmovl指令的处理与rrmovl类似,但是因为是长指令格式,所以程序计数器要加6
指令call和ret与之前的popl和pushl类似。对于指令call,我们要将valP也就是call之后的那条指令的地址压入栈中在更新PC阶段,将PC设置为valC,也就是调用目的地

  • SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器、随机访问存储器

  • SEQ阶段的实现
    ①取指阶段:包括指令存储器单元。一次从存储器中读出6个字节。第一个字节分为ocode,ifun。根据icode的值,计算:instrvalid(发现不合法指令),needregids,need_valC。instrvalid和imemerror在访存阶段被用来产生状态码。
    ②S译码和写回阶段:都需要访问寄存器文件。寄存器文件有四个端口,它支持同时进行两个读和两个写;每个端口都一个地址连接和数据连接。如果某个地址端口上的值为特殊标识符0xf,则表明不需要访问寄存器。
    ③执行阶段:包括算术/逻辑单元(ALU)。这个单元革命家alufun信号的设置,对输入aluA和aluB执行ADD,SUB,AND,XOR运算。ALU的输出就是valE信号。还包括条件码寄存器。每次运行时,ALU都会产生三个与条件码相关的信号——零,符号,溢出。用set_cc来控制是否应该更新条件码寄存器。
    ④访存阶段:两个控制块产生存储器地址和存储器输入数据的值;另外两个块产生控制信号表明应该执行读操作还是写操作。当执行读操作时数据存储器产生值valM。
    ⑤更新PC阶段:SEQ中最后一个阶段会产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM、valP

实验楼学习

  • 根据老师提供的信息构建YID环境:

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

用make all指令编译

可以看到编译后的.yo文件

查看教材p239页的代码

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

-根据张晓涵同学的博客安装了Y86

同时也更改了makefile

但一直无法编译.yo文件

只好用实验楼来完成内容

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

我仔细回想了以下好像第一步安装bison和flex词法分析工具好像并没有成功,我就删了解压的文件重新来了一遍确实是没有安装

之后强行用了> sudo apt-get -f install bison flex 还是不行。。。
之后百度了解决方法> apt-get --fix-broken install

之后就成功啦~~~

进入y86-code文件夹,可以找到asuml.yo:

make clean Y86-code文件夹,可以看到只有.ys文件了
之后再> make all 可以汇编运行所有代码。

本周代码托管

代码托管链接

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

本周大多数都是验证类的题目,需要认真思考和理解,感觉把更多的时间抽出来真正的理解课本内容更为重要。
本周还进行了家庭作业整理工作,其实觉得很枯燥(但可以加分。。。),就在翻看学姐的博客是我发现了闫佳昕学姐的第一周博客,上面详细的分析了每一条汇编指令执行的过程,寄存器的指向变化以及出栈如栈的情况,每周在读汇编代码的时候都非常难理解,但今天有了非常具体的认识,然而这是学姐第一周的博客·····早就听说学姐是超级无敌大学霸,其实何为学霸,并不是她们生来就比我们的大脑发达,只是人家在遇到问题时就及时的去解决了问题,我从第二周遇到的问题在第六周才解答,,,这就是比不上别人的原因,从以后开始要认真反思自己,不要再为了写博客而写博客,要切实的!去解决!自己遇到的问题!!!
学姐的参考博客

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第五周 300/1300 2/9 30/90
第六周 100/1400 2/9 30/90

参考资料

posted @ 2016-10-22 21:21  20145238荆玉茗  阅读(249)  评论(2编辑  收藏  举报