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

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

教材学习内容总结

4.1 Y8指令集体系结构

·Y86指令集只包括四字节整数操作,寻址方式较少,操作也较少;
·Y86指令指令不允许从一个存储器地址传送到另一个存储器地址,也不允许将立即数传送到存储器;
·同IA32一样,Y86所有整数采用小端法编码;
·Y86中pushl指令会把栈指针减4,并将一个寄存器的值写入存储器中。因此,当执行pushl %esp指令时,处理器的行为是不确定的,通常都有以下两种约定:
1)压入%esp的原始值;
2)压入减去4的%esp的值;

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

·在当前的技术中,逻辑1是用1.0伏特左右的高电压表示,而逻辑0是用0.0伏特左右的低电压表示的;
·要实现一个数字系统需要三个主要的组成部分:
1)计算对位进行操作的函数的组合逻辑;
2)存储位的存储器元素;
3)控制存储器元素更新的时钟信号;
·逻辑门只对单个位的数进行操作;
·逻辑门总是活动的。一旦一个门的输入发生了变化,在很短时间内,输出就会相应地变化;
·构建组合电路有以下两条限制:
1)两个或者多个逻辑门的输出不能连接到一起;
2)这个电路网必须是无环的;
·两类存储设备:
1)时钟寄存器
2)随机访问存储器
·寄存器是作为电路不同部分中的组合逻辑之间的屏障。每当每个时钟到达上升沿时,值才会从寄存器的输入传送到输出;

4.3 Y86的顺序实现

·处理一条指令的多个阶段:
1)取址
2)译码
3)执行
4)访存
5)写回
6)更新PC
·降低硬件复杂度的一种方法是让不同的指令共享尽可能多的硬件;
·irmovl指令的处理与rrmovl类似,但是因为是长指令格式,所以程序计数器要加6
·指令call和ret与之前的popl和pushl类似。对于指令call,我们要将valP也就是call之后的那条指令的地址压入栈中在更新PC阶段,将PC设置为valC,也就是调用目的地
·SEQ阶段的实现
1)取指阶段:包括指令存储器单元。一次从存储器中读出6个字节。第一个字节分为ocode,ifun。根据icode的值,计算:instrvalid(发现不合法指令),needregids,need_valC。instrvalid和imemerror在访存阶段被用来产生状态码。
2)S译码和写回阶段:都需要访问寄存器文件。寄存器文件有四个端口,它支持同时进行两个读和两个写;每个端口都一个地址连接和数据连接。如果某个地址端口上的值为特殊标识符0xf,则表明不需要访问寄存器。
3)执行阶段:包括算术/逻辑单元(ALU)。这个单元革命家alufun信号的设置,对输入aluA和aluB执行ADD,SUB,AND,XOR运算。ALU的输出就是valE信号。还包括条件码寄存器。每次运行时,ALU都会产生三个与条件码相关的信号——零,符号,溢出。用set_cc来控制是否应该更新条件码寄存器。
4)访存阶段:两个控制块产生存储器地址和存储器输入数据的值;另外两个块产生控制信号表明应该执行读操作还是写操作。当执行读操作时数据存储器产生值valM。
5)更新PC阶段:SEQ中最后一个阶段会产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM、valP

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

本周的学习需要用到一个压缩包,我从QQ群里下载到了Windows里。虽说我已经安装了虚拟机增强功能,能够与Windows系统共享剪切板,但它也只能共享剪切板中的文本而不支持复制粘贴文件。要想Windows和Ubuntu共享文件就得创建一个它们之间的一个共享文件夹。

在Ubuntu中创建与Windows的共享文件夹

本周代码托管截图

https://git.oschina.net/Kevin_s/Linux_C.git

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目 标 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

参考资料

原文地址:https://www.cnblogs.com/20145224kevs/p/5989182.html