20135323符运锦-信息安全系统设计基础第六周学习总结
学习计时:共10小时
读书:5小时
代码:2小时
作业:2小时
博客:1小时
第四章 处理器体系结构
一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构,ISA。
第一节 Y86指令集体系结构
一、程序员可见的状态
1.Y86程序中的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态。”程序员“既可以是用汇编写代码的人,也可以是产生机器级代码的编译器。
2.Y86的处理器状态类似于IA32.
3.8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp。
4.处理器的每个程序寄存器存储一个字
5.寄存器%esp被入栈、出栈、调用和返回指令作为栈指针。在其他情况下,寄存器没有固定的含义或固定值。
6.有三个一位的条件码:ZF,SF,OF,它们保存最近的算术或洛基指令所造成英雄的有关信息。
7.
8.
二、Y86指令
1.Y86指令集基本上是IA32指令集的一个子集,只包括四字节整数操作,寻址方式比较少,操作也较少。
2.
3.movl:irmovl、rrmovl、mrmovl、rmmovl,分别 显式地指明源和目的地的格式。第一个字母表明源的类型,i(立即数)、r(寄存器)或m(存储器 ),第二个字母代表目的,可以是r(寄存器)或者m(存储器)。
4.addl,subl,andl,xorl是四个整数操作指令,Y86中只允许对寄存器数据进行操作(IA32中还允许对存储器数据进行操作),这些指令会设置条件码ZF、SF、OF。
jmp,jle,jl,je,jne,jge,jg是七个跳转指令,根据分支指令的类型和条件码的设置来选择分支。
cmovle,cmovl,cmove,cmovne,cmovge,cmovg是六个条件传送指令,这些指令的格式与寄存器-寄存器传送指令rrmovl一样,但只有当条件码满足所需要的约束 时,才会更新目的寄存器的值。
call指令将返回地址入栈,然后跳到目的地址。ret指令从这样的过程调用中返回。
pushl和popl:入栈和出栈。
halt指令停止指令的执行(IA32中的指令hlt)。IA32中应用程序不允许使用这条指令,因为它会导致整个系统暂停运行。对于Y86而言,执行halt指令会导致处理器停 止,并将状态码设置为HLT。
三、指令编码
1.每条指令需要1-6个字节不等。每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每部分4位:高4位是代码部分,低4位是功能部分。功能值只有在一组相关指令共用一个代码时才有用。
2.
3.8个程序寄存器中每个都有相应0-7的寄存器标示符,Y86与IA32的寄存器编号一致。程序寄存器存在CPU中的一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID为地址的随机访问存储器。当需要指明不应访问任何寄存器时,就用ID值0xF来表示。
附加寄存器指示符字节:指定一个或者两个寄存器。
4.有的指令需要一个附加的4字节常数字作为立即数数据或地址指示符偏移量或分支指令和调用指令的目的地址。所有整数采用小端法编码。
四、Y86异常
1.程序员可见的状态包括状态码Stat,它描述程序执行的总体状态。
2.Y86中,任何AOK以外的代码都会使处理器停止执行指令,而没有异常处理程序。
3.
五、Y86程序
1.Y86与IA32:它可能需要多条指令来执行一条IA32指令所完成的功能,Y86没有伸缩寻址模式。
第二节 逻辑设计和硬件控制语言HCL
一、逻辑门
1.逻辑门只对单个位的数进行操作,而不是整个字。逻辑门是活动的。
2.
二、组合电路和HCL布尔表达式
1.组合电路:很多逻辑门组合成一个网,构建计算块。
2.构建这些网有两条限制:两个或多个逻辑门的输出不能连接在一起,否则可能会使线上的信号矛盾,导致一个不合法的电压或电路故障;这个网必须是无环的。也就是在网中不能有路径经过一系列的门形成的一个回路。这样的回路会导致该网络计算的函数有歧义。
3.字级的组合电路和HCL整数表达式:一些位级信号代表一个整数或一些控制模式。执行字级计算的组合电路根据输入字的各个位,用逻辑门来计算输出字的各个位。
4.多路复用器:根据输入控制信号的值,从一组不同的数据信号则选出一个。多路复用函数是用情况表达式描述的。
5.字级的组合电路:HCL中,所有字级的信号都声明为int,不指定字的大小。
6.多路复用函数用情况表达式来描述,具体格式如下:
[
select1 : expr_1
select2 : expr_2
......
selectk : expr_k
]
7.算数/逻辑单元是很重要的组合电路,有三个输入,标号为A、B的两个数据输入和一个控制输入。根据控制输入的设置,电路会对数据输入执行不同的算数或逻辑操作。
三、集合关系
1.iexpr in {iexpr1,iexpr2,...,iexprk}。iexpr等都是整数表达式。
四、存储器和时钟
1.为了产生时序电路,必须引入按位存储信息的设备,存储设备由同一个时钟信号控制。
2.
3.Y86存储器会用时钟寄存器保存程序计数器PC,条件代码CC和程序状态Stat。
第三节 Y86的顺序实现
一、将处理组织成阶段
1.
2.
二、SEQ硬件结构
1.取指:将程序计数器寄存器作为地址,指令存储器读取指令的字节。PC增加器计算valP,即增加了的程序计数器。
2.译码:寄存器文件有两个读端口A和B,从这两个端口同时读寄存器的值valA和valB。
3.执行:指令类型将算数/逻辑单元(ALU)用于不同的目的。条件码寄存器有三个条件码位,ALU负责计算条件码的新值,当执行跳转指令时会根据条件码和跳转类型来计算分支信号Cnd。
4.访存:在执行此操作时,数据存储器读出或写入一个存储器字。指令和数据存储器访问的是相同的存储器位置,但用于不同的目的。
5.写回:寄存器文件有两个写端口,E用来写ALU计算出来的值,M用来写从数据存储器中读出来的值。
6.画图惯例
三、SEQ的时序
四、SEQ阶段的实现
1.
2. 取指阶段:包括指令存储器硬件单元。以PC作为第一个字节(字节0)的地址,这个单元一次从存储器读出6个字节,第一个字节被解释称指令字节,分为两个4位数。
译码和写回阶段:寄存器文件,支持同时进行两个读和两个写,每个端口有一个地址连接(寄存器ID)和一个数据连接(32根线路),既可以作为寄存器文件的输出 字,又可以作为他的输入字。寄存器文件有四个端口,支持同时进行两个读(端口A、B)和两个写(E、M),每个端口都有一个地址连接和一个数据连接。根据指令 代码icode以及寄存器指示值rA和rB,可能还会根据执行阶段计算出的Cnd条件信号。
执行阶段:算数逻辑单元(ALU),输出为valE信号。包括条件码寄存器,零,符号,溢出,产生信号set_cc。
访存阶段:读或者写程序数据,两个控制块产生存储器地址和存储器输入数据的值。另外两个块产生控制信号表明应该执行读还是写操作。当执行读操作时,数据存储 器产生valM。根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。
更新PC阶段:产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。
四、实验运行及结果
此结果与239页编译出来的结果是一致的,故实验成功。
五、参考资料
1.www.Topsage.com(深入理解计算机系统)PDF
2.实验楼实验五
3.http://group.cnblogs.com/topic/73183.html
4.YIS指导手册及群文件下载
六、学习心得
本次学习让我觉得真真正正开始上手LINUX。有了前三章的基础及大二所学,让我在学习这章并未感觉过多费劲,也希望自己在今后能更加努力,多学多问,把这门课学得越来越好