20145217《信息安全系统设计基础》第6周学习总结(1)

20145217《信息安全系统设计基础》第5周学习总结(1)

教材学习内容总结

ISA

指令集体系统结构:一个处理器支持的指令和指令的字节级编码。

不同的处理器家族有不同的ISA。

4.1Y86

本章定义的一个简单的指令集。包括各种状态元素、指令和它们的编码、一组编程规范和异常事件处理。

Y86处理器

以顺序指令执行为基础,设计了一个流水化的处理器。将每条指令分成5步,每个步骤都由一个独立的硬件部分或者阶段来处理。每个时钟周期有新的指令进入流水线,即说该处理器可以同时执行5条指令的不同阶段。(重点在于如何处理冒险冲突的情况。数电,EDA中的概念)

4.1.1 程序员可见状态

即:Y86程序中每条指令都会读取或者修改处理器状态的某些部分的状态。

帮助理解 程序员:用汇编代码写程序的人,产生机器代码的编译器。

具体内容 8个程序寄存器(与IA32 一样),3个条件码(ZF,SF,OF)。PC程序计数器存放当前正在执行指令的地址。存储器,很大的字节组,保存着程序和数据。状态码Stat,表明程序的总体状态。(见p232图4—1)

4.1.2 Y86指令

背景知识:一条指令含有一个单字节的指令指示符。可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。字段fn说明是 某个整数操作opl,数据移动条件comvXX,分支条件Jxx。

movl指令:

     irmovl , rrmovl , mrmovl , rmmovl .

i:立即数r:寄存器m:存储器。

第一个字母代表源操作数,第二个字符代表目的操作数。

注意:有存储器寻址参与的两种movl指令,采用基址和偏移量形式。不支持第二变址寄存器和任何寄存器值得伸缩。

(p233页有以下详情)

4个整数操作指令:addl,subl,andl,xorl.

7个跳转指令。

6个条件传送指令。

Call指令返回地址入栈,人后跳回目的地址。 Ret指令从这样的调用中返回。

Pushl popl入、出栈。

Hatl将处理器停止,并将状态码设定为HLT。

4.1.3指令编码

每条指令的第一个字节:

高四位0~B表示,是代码部分。手工对指令编码时参照p232页的表格。注意rrmovl和cmovXX取值一样。

低四位是功能部分。除了opl,jXX,cmovXX以外全为0.这三者的指令对应的值,参照p233页的图。

附加部分:

寄存器指示符:参照p234页的表格,对应的寄存器的编号。

4字节的常数字(这个部分采用小端法):

irmovl中的立即数数据
mmovl,mrmovl中存储器m地址指示符的偏移量
分支指令jXX的目的地址(绝对地址)
调用指令call的目的地址(绝对地址)

根本前提:字节编码和指令序列是一一对应的。

4.1.4Y86异常

使用状态码stat描述。一共有四种取值。(见p237)在Y86中除了等于1以外的其他情况,都会使处理器停止(在IA32或者更完整设计的ISA中,都会调用一个异常处理程序但这个是简化版咯。)

4.1.5Y86完整的程序

和IA32的汇编程序一样,包括代码段数据段和代码。“.”开头的词语是汇编器命令。

理解见p238.239.240的程序。基本和汇编程序是一样的。

4.2逻辑设计

这部分与以前学习过的电子电路,数字电路,EDA关联性非常大。

前提知识点:

*逻辑1是用1V左右的高电压表示的。

*逻辑0使用0V左右的低电压表示的。

*实现一个数字系统:计算对位进行操作的函数的组合逻辑、存储位的存储器元件、控制存储器元件更新的时钟信号。

4.2.1逻辑门:

只对单个位的数进行操作,而不是整个字。

与:&& 或: || 非: !

4.2.2组合电路:

很多逻辑门组合成一个网构建的计算块。(注意两个或多个输出不能连接在一起,并且无环。)

HCL表达式与C语言中的表达式的区别:

*HCL中输出会持续随着输入变化而变化。而C语言中只有在程序执行到的时候才进行求值。

*HCL只对0和1操作。C语言中,0是FLASE,除了0以外的所有整数都是TRUE

*C中&&和||这两种,是优先求值,(&和|并不是)第一个值就能确定结果的话,它不会去计算第二个值。但是HCL中并没有这样的规则。

4.2.3字级的组合电路和HCL整数表达式

例如:bool eq=(A==B);

在HCL硬件描述语言中,每个字都可以声明为特定的位数。允许描述自是否相等。输出eq表示AB是否相等。

画字级电路的时候,实线表示携带字的每个位的线路,虚线表示布尔信号的结果。

多路复用函数使用情况表达式描述:

[

         Select:expr

]

Select代表什么时候选择这种情况

Expr表示该种情况得到的数值

注意:顺序执行,第一个求值为1 的情况会被选中。一般最后一个表达式是 1:expr。表示的意思是前面所有情况都没有选中,就执行最后这个。

例如:

Int out=[

         S&&q :a

         S&&w:b

         1    :c

]

算术逻辑单元:

两部分组成:数据输入,控制输入。

控制输入代表不同的算术或逻辑操作。

0:+

1:-

2:&

3:^

4.2.4集合关系

书上的引入例子是数据选择器,是EDA 中学习的七个基本集合电路中的一个。

4.2.5存储器和时钟

时钟寄存器:(硬件寄存器)存储单个位或字。时钟信号控制寄存器加载输入值。

随机访问存储器(存储器)存储字,用地址来选择该读或该写那个字。

4.3Y86的顺序实现

处理指令阶段化:

取值、译码(从寄存器读入最多两个操作数)、执行、访存(写入,读出存储器)、写回(写最多两个结果到寄存器)、更新PC(设置为下一条指令的地址)。

取值:valC四字节常数字valP下一条指令的地址。

译码:从寄存器读入的数valA,valB.

执行:计算出的值valE.

访存:从存储器读出的值valM.

写回:写入寄存器的结果。

更新PC

SEQ硬件结构:

计算中不一样的地方:

     四个寄存器的ID信号:srcA,valA的源;srcB,valB的源;dstE,写入valE的寄存器;dstM,写入valM的寄存器。

SEQ的时序:

需要时序控制的控制的四个硬件:程序计数器、条件码寄存器、数据寄存器、寄存器文件。

它们的值要等时钟信号(上升沿或者下降沿来临时才改变)。

SEQ阶段的实现:

取值:第一个字节Split:由icode和ifun组成。Align:一字节的寄存器指示符和四字节的常数字。

译码和回写:读、写端口都有一个地址连接(寄存器ID)和数据连接(寄存器文件的输出、入字)。

执行阶段

访存阶段更新PC

参考资料

原文地址:https://www.cnblogs.com/jokebright/p/5982224.html