20145314郑凯杰《信息安全系统设计基础》第6周学习总结 part A

第4章 处理器体系结构 part 1

本部分对改章节的知识点进行总结:

一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(ISA)。

不同的出路器有不同的ISA。

ISA模型看上去应该是顺序指令执行。

通过同时处理多条指令的不同部分,处理器可以获得较高的性能。

“y86”是我们的指令集。

  对于Y86来说,它的我们可见状态就是这几种:寄存器、存储器、条件码、PC、程序状态

4.1 Y86 指令集体系结构

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

4.1.1 程序员可见的状态

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

8个寄存器和IA32的是相同的。

三个一位的条件码:ZF、SF、OF。保存着最近的算数或逻辑指令所造成影响的有关信息。

程序计数器(pc)存放当前正在执行指令的地址。

存储器相当于一个很大的字节数组,保存着程序的数据。用虚拟地址来引用存储器,硬件和操作系统联合起来把虚拟地址翻译成物理地址(实际地址)。

程序状态的最后一个部分是状态码start,它表明程序执行的总体状态。它会指示是正常运行,还是出现某种异常。

4.1.2 Y86指令

halt:这个指令将会终止指令的执行。

nop:这是一个占位指令,它不做任何事情,后续为了实现流水线,它有一定的作用。

xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器。

opl:操作指令,比如加法,减法等等。

jxx:条件跳转指令,根据后面的条件进行跳转。

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

call与ret:方法的调用和返回指令。一个将返回地址入栈,并跳到目标地址。一个将返回地址入PC,并跳到返回地址。

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

4.1.3 指令编码

第一个字节表明指令的类型。高4位是代码部分,低4位是功能部分。

程序存储器在CPU中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。

指令所占的字节数,也就是编码。一般两个寄存器占用一个字节,存储器则占用四个字节,指令的编码和功能占用一个字节。

对于寄存器的表示,是使用4个二进制位表示的,这是一个ID标识。所有的寄存器可以看做是一个寄存器文件,其中的ID标识就类似于它们的地址。对于一些只需要一个寄存器的指令来说,另一个寄存器标识位使用0xF表示。

4.1.4 Y86异常

对于Y86来说,程序猿可见的状态中就有stat状态码,它标识了程序执行的状态。Y86需要有能力根据stat去做一些处理。不过为了简单起见,这里除了正常执行之外,都将停止指令的执行。真实当中,会有专门的异常处理程序。

  Y86有四种不同的状态码,

AOK(正常)

HLT(执行halt指令)

ADR(非法地址)

INS(非法指令)

4.1.5 Y86程序

我们创建Y86代码的唯一工具是汇编器。所以只需要掌握一些简单的机制就够了。

4.1 部分小结

总的来说,Y86就是一个X86的缩减版,它的目的是以简单的结构实现一个处理器,帮助我们了解处理器的设计和实现。需要记住其中的状态码和部分指令。

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

4.2.1 逻辑门

逻辑门是数字电路的基本计算元素,也可以看做是物理结构与逻辑结构的映射,逻辑门接受信号的输入,并根据信号产生一定的输出,而输出则是输入的布尔函数,也就是说,输出只能是0或者1。下图是and门(’与’门)、or门(‘或’门)和not门(‘非’门)的标准符号,你可以看做它们代表了一组线路的组成方式

and:                or:                 not: 

4.2.2 组合电路和HCL布尔表达式

1、两个逻辑门的输出不能连接到一起,否则它们可能会使线上的信号矛盾,因此可能会得到一个不合法的电压或故障。比如1个0V和1个1V接到一起,会不会出来个0.5V,又或者类似于正负极相接,直接短路了呢。

  2、组合的电路必须是无环的。也就是说输出不能再当做输入,否则会使这个函数产生歧义。

//该部分的具体操作和分析就放在下一次的part2中。

4.2.5 储存器和时钟

组合电路是一直持续输出的,因此它无法保持一个状态不变。但我们的计算机是需要存储数据的,因此就需要能保存状态的存储设备。存储设备则是由一个时钟控制,时钟就像一个开关一样,它控制着存储设备什么时候更新设备里的值。

时钟寄存器:存储单个位或者单个字。时钟信号来控制寄存器是否要加载输入的值。

  随即访问存储器:存储多个字。用地址来选择该读、写哪个字。

寄存器文件一般有两个读端口和一个写端口。每个端口都附带一个地址来标识操作的是哪个寄存器,而对于写端口,还有一个输入数据,对于读端口,则还有一个输出数据。具体的图示如下。

  可以看到在寄存器文件的写端口处,有一个时钟(clock)控制着写的操作。当时钟变化时,输入数据的值将会更新到对应的寄存器当中。而对于读数据,则类似于组合电路,根据输入的地址值(src),寄存器文件则会输出相应的数据。

原文地址:https://www.cnblogs.com/5314zkj/p/5982604.html