您的位置:首页 > 其它

20125337——信息安全系统设计基础第五周学习笔记

2015-10-18 13:19 696 查看

第四章 处理器体系结构

知识点

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

HCL:硬件控制语言——一种描述硬件系统控制部分的简单语言。

1.Y86指令集体系结构

a.就是ISA的一个子集。

b.包括定义各种状态元素、指令集和他们的编码、一组编程规范和异常事件处理。

c.可见状态: 寄存器、存储器、条件码、PC、程序状态。

寄存器:8个,每一个寄存器可以存储一个字,也就是一个32位二进制。
条件码:一个一位二进制的寄存器,保存着最近的算术或逻辑运算所造成的影响的信息。
PC:程序计数器,记录当前正在执行的指令的地址。
存储器:很大的字节数组,保存着程序和数据,用虚拟地址来访问存储器,硬件和操作系统会将虚拟地址翻译为实际的(或物理)地址。
状态码:stat表明程序执行的总体状态(正常还是出现某种异常)。

d.指令

xxmovl:数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器。
*不允许:存储器地址直接传给存储器地址;立即数传给存储器。

opl:操作指令,只对寄存器数据进行操作,设置三个条件码zf、sf、of。

jxx:条件跳转指令,根据分支指令类型和条件码设置进行跳转。

cmovxx:条件传送指令,后面的xx代表的是条件。
*只发生在两个寄存器之间,不会将数据传送到存储器。

call:将返回地址入栈,并跳到目标地址。
ret:将返回地址入PC,并跳到返回地址。

push与pop:入栈和出栈操作。

halt:终止指令的执行。
*处理器停止,并将状态码设置成HLT。

e.指令编码

性质(无二义性):字节编码必须有唯一的解释。任意一个字节序列要么是一个唯一的指令序列的编码,要么就不是一个合法的字节序列。

每条指令的第一个字节表明指令的类型:(功能值只有在一组相关指令共用一个代码时才有用)

高4位:代码部分(例:6是整数操作)

低4位:功能部分(例:0是整数中的加法指令)

*60合起来即为add指令。

程序寄存器存在CPU中的一个寄存器文件中。这个寄存器文件就是一个小的,以寄存器ID作为地址的随机访问存储器。当需要指明不应访问任何寄存器时,就用ID值0xF表示。

当有附加的寄存器指示符字节,指定一个或者两个寄存器。这些寄存器字段为rA和rB。

根据指令类型,1.指令可指定用于数据源和目的寄存器;2.用于地址计算的基址寄存器。

call:没有寄存器操作数,就没有寄存器指示符字节。

irmovl、pushl、popl:只需一个寄存器操作数,将另一个寄存器指示符设为0xF。

当需要一个附加的4字节常数字。这个字可作为:1.irmovl的立即数;2.rmmovl、mrmovl的地址指示符偏移量;3.分支指令、调用指令的目的地址(绝对地址)。

f.异常

1.状态码stat:描述程序执行的总体状态

1:AOK,正常操作

2:HLT,处理器执行halt指令

3:ADR,遇到非法地址

4:INS,遇到非法指令

遇到异常,处理器停止执行指令。

2.Y86代码与IA32代码主要区别:
Y86需要多条指令来执行一条IA32指令完成的功能。

Y86没有伸缩寻址模式。

3.Y86汇编代码



YIS:指令集模拟器,目的是模拟Y86机器代码程序的执行。

2.逻辑设计和硬件语言HCL

数字系统三部分组成:组合逻辑、存储器元素、时钟信号。

HCL:硬件控制语言,描述不同处理器设计的控制逻辑。

a.逻辑门

1.HCL表示与、或、非:a&&b、a||b、!a。每个门产生的输出等于他输入的某个布尔函数。

2.将很多逻辑门组合成一个网,就能构建计算块,称为组合电路。

限制:1.两个及以上逻辑门的输出不能连接在一起(会产生信号矛盾)。
2.网必须是无环的,不可以有路径经一系列门而形成回路。

如:检测位相等:bool eq=(a&&b)||(!a&&!b);

3.MUX:多路复用器,根据输入控制信号的值,从一组不同的数据信号中选出一个。

如:bool out=(s&&a)||(!a&&b);(s是控制信号)

4.组合逻辑电路和C语言中逻辑表达式区别:

组合电路:逻辑门组成;输出会持续响应输入变化;只对0、1进行操作。
C语言逻辑表达式:只在程序执行过程中遇到时进行求值;允许参数是任何数;可能只被部分求值,如果第一个参数可以确定值,第二个参数就不用操作了。

5.多路复用函数用情况表达式。格式:

[
s_1:e_1
s_2:e_2
...
s_k:e_k
1:无情况,则选这。
]
*s_i:布尔表达式,指明何时该选;e_i:整数表达式,得到的值。

6.选择表达式:可任意布尔表达式,使得情况表达式能描述带复杂选择标准的、多种输入信号的块。

(关于逻辑门的知识同上学期学的EDA很类似)

7.ALU:算术/逻辑单元,一种很重要的组合电路,这个电路有三个输入:两个数据输入及一个控制输入。

b.存储器和时钟

组合电路从本质上讲,不存储任何信息。它们只是简单地响应输入信号,产生等于输入的某个函数的输出。

为了产生时序电路,也就是有状态并且在这个状态上进行计算的系统,我们必须引入按位存储信息的设备。

存储设备都是由同一个时钟控制,时钟是一个周期性信号,决定了什么时候要把新值加载到设备中。

大多数时候,寄存器都保持在稳定状态(x),产生的输出等于它的当前状态。信号沿着寄存器前面的组合逻辑传播,这时,产生了一个新的寄存器输入(y),但只要时钟是低电位的,寄存器的输出就仍然保持不变。当时钟变成高电位的时候,输入信号才加载到寄存器中,成为下一个状态y,直至下一个时钟的上升沿。

寄存器是作为电路不同部分中的组合逻辑之间的屏障。每当每个时钟到达上升沿时,值才会从寄存器的输入传送到输出。

3.Y86顺序实现

a.各阶段及其内执行操作

取指

从存储器读取指令字节,放到指令存储器(CPU中)中,地址为程序计数器(PC)的值。

按顺序的方式计算当前指令的下一条指令的地址(即PC的值加上已取出指令的长度)

译码

从寄存器文件读入最多两个操作数。读入指令rA、rB字段指明的寄存器。

执行

根据指令的类型,将算数/逻辑单元(ALU)用于不同的目的。

计算增加或减少栈指针;
计算有效地址;
只是简单地加0,将一个输入传递到输出;
也可能设置条件码;


访存

将数据写入存储器;或从存储器读出数据。

数据存储器(CPU中)读出或写入一个存储器字。指令和数据存储器访问的是相同的存储器位置,但是用于不同的目的。

写回

最多可以写两个结果到寄存器文件。

寄存器文件有两个写端口。端口E用来写ALU计算出来的值,而端口M用来写从数据存储器中读出的值。

更新PC

将PC设置成下一条指令的地址。

b.SEQ时序

1.SEQ的实现包括:组合逻辑和两种存储器设备

时钟寄存器:程序计数器、条件码寄存器
随机访问存储器:寄存器文件、指令存储器、数据存储器

2.需要用时序进行明确控制:程序计数器、条件码寄存器、寄存器文件、数据存储器。

3.每个时钟周期,程序计数器都会装载新的指令地址。

只有在执行整数运算指令时,才会装载条件码寄存器。

只有在执行mov、push、call指令时,才会写数据存储器。

遇到问题及解决

1.我们不支持第二变址寄存器和任何寄存器值的伸缩.

解决:第一,我理解的伸缩是没有像IA32,如%eax32位,可以划分出%ax16位,还可以划分出%al,%ah。

第二,参考答疑小组[3]知道,第二变址寄存器是指这是和IA32的比较,P113页有Imm(Eb,Es,s)的通用寻址方式,Y86不支持。

2.对于如何将汇编码转换成字节编码,只看看文字依然不懂。

解决:在练习题中实践。

以练习题1为例.如irmovl $15,%ebx

irmovl:i表示立即数,r表示寄存器;即是将一立即数付给寄存器。

由ir可知:第一个字节:30

由$15可知:不访问任何寄存器,指示符字节F。

由%ebx可知:指示符字节3。

根据小端法,将15的十六进制反向写开为0f 00 00 00

因此,该句的字节编码是30f30f000000。

3.字节编码中,左边一列的地址偏移量如何确定?

解决:在练习题中实践。

以练习题2为例.如0x100:30f3fcffffff/406300080000/00(/自己划分的)分三块

第一块30f3fcffffff

30:irmovl(6字节,下一个地址偏移量是6,所以下一个地址是0x106;6字节,所以划分到4前面)

f:立即数

3:%ebx

fcffffff:(小端法)反向写为fffffffc,即是-4

第二块406300080000(分析方法同第一块)

*第三块00,即是halt停止

故,本条指令前的地址偏移量是依据上一条指令所占字节确定的。

总结:关于Y86指令,主要通过练习题4.1和4.2,学会看书上的图4-2,4-3,4-4。

4.在学习顺序实现时,参考网络上的博客,关于执行(execute),根据目的不同,其中一个目的是:只是简单地加0,将一个输入传递到输出。对于描述的这项功能不明白。

解决:看课本,做练习。

1.如课本图4-18第二列:rrmovl rA,rB

valE<——0+vlaA

*分析:不需要取第二个寄存器操作数,将第二个输入设为0,把它和第一个操作数相加,得到valE=0+valA=valA

2.如练习题4.11:irmovl $128,%esp

valE<——0+128=128

*分析:和rrmovl处理方式类似。

5.关于顺序实现中的计算课本图4-18,开始时始终不明白valP=PC值+已取指令长度。

解决:参考了网络达人的博客[2],并反复读书,联系第一节的知识。

已取指令长度:指令所占字节编码,即是字节数。

如rrmovl rA,rB

valP<——PC+2(分析:rrmovl指令长度2字节,所以+2)

总结:Y86顺序实现这节内容其实是将第一节练习题,如何做,怎么想,即做题思路进行计算机内部操作阶段的讲述。

6.不是每个阶段都会进行,一些指令会跳过中间的某些阶段。

我的理解(根据对各阶段的功能描述):

译码:从寄存器文件读入。

如irmovl指令,立即数寻址,用不到寄存器,所以不用译码阶段。

访存:写入或读出数据从存储器。

如rmmovl指令,需要将寄存器值valA写到存储器,或从存储器中读出valM,所以经历访存阶段。

其他

实验

构建YIS环境:







YIS测试:



使用vim查看asuml.yo汇编内容:



参考资料

[1]《深入理解计算机系统》

[2]http://blog.csdn.net/yang_yulei/article/details/22529437

[3]http://group.cnblogs.com/topic/73168.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: