您的位置:首页 > 其它

2017-2018-1 20155220 《信息安全系统设计基础》第十四周学习总结

2017-12-24 14:23 411 查看

2017-2018-1 20155220 《信息安全系统设计基础》第十四周学习总结

学习目标

找出全书你认为学得最差的一章,深入重新学习一下,要求(期末占5分):主要学习第四章

总结新的收获

给你的结对学习搭档讲解或请教,并获取反馈

参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《信息安全系统设计基础》第十四周学习总结”,博客(随笔)要通过作业提交,截至时间本周日 23:59。

教材学习内容总结

Y86指令集体系结构

内容:定义一个指令集体系结构,包括定义各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理

程序员可见状态:

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

Y86具体包括:8个程序寄存器、3个条件码ZF\SF\OF、程序计数器(PC)。

Y86用虚拟地址引用存储器位置。 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态。

Y86指令



指令介绍:

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

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

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

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

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

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

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

push和pop:入栈和出栈操作

Y86异常

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

Y86有四种不同的状态码:AOK(正常),HTL(执行halt指令),ADR(非法地址)和INS(非法指令).

Y86程序

Y86指令和IA32代码的主要区别在于,它可能需要多条指令来执行一条IA32指令能完成的所有功能。

Y86没有伸缩寻址模式。

以“.”开头的词是汇编器命令,命令.pos0告诉汇编器应该从地址0处开始产生代码。

创建Y86代码的唯一工具是汇编器。

YIS:指令集模拟器

Y86和X86的区别在于,有的时候Y86需要两条指令来达到X86一条指令就可以达成的目的.

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

逻辑门

逻辑门是数字电路的基本计算元素,它们的输出,等于它们输入位值的某个布尔函数。

逻辑门总是活动的,一旦一个门的输入变化,在短时间内,输出就会跟着变化。。

组合电路和HCL布尔表达式

组合电路:将很多的逻辑门组合成一个网,能构建计算块。

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

构建这些网有2条限制:

(1)两个或多个逻辑门的输出不能连接在一起

(2)这个网必须是无环的。

HCL表达式和C语言中逻辑表达式的区别:

(1)组合逻辑电路的输出会持续地响应输入的变化;C表达式只有在程序执行过程中被遇到时才会求值。

(2)C的逻辑表达式允许参数是任意整数,0表示FLASE,其他任何值都表示TRUE;逻辑门只对位值0和1进行操作。

(3)C的逻辑表达式可能只被部分求值;组合逻辑没有部分求值的规则,逻辑门只是简单地响应输入的变化。

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

执行字级计算的组合电力根据输入字的各个为,用逻辑门来计算输出字的各个位。

用中等粗度的线来表示携带字的每个位的线路,用虚线来表示布尔信号结果。

在HCL中,多路复用函数用情况表达式来描述。

算术/逻辑单元是一种很重要的组合电路。

集合关系

判断集合关系的通用格式是:
iexpr in {iexpr1,iexpr2,……,iexprk}


存储器和时钟

存储设备都是由同一个时钟控制,两类存储器设备包括:

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

随机访问储存器(储存器):储存多个字,用地址选择该读/写哪个字。

硬件和机器级编程中的寄存器有细微差别,分为称为“硬件寄存器”和“程序寄存器”。

在硬件中,寄存器直接将它的输入和输出线连接到电路的其他部分;

在机器级编程中,寄存器代表的是CPU中为数不多的可寻址的字,这里的地址是寄存器ID。 Y86处理器会用时钟寄存器保存程序计数器(PC)、条件代码(CC)、程序状态(Stat)。

Y86处理器会用时钟寄存器保存程序计数器PC,条件代码CC和程序状态Stat。

处理器有一个随机访问存储器来存储程序数据。



处理器还包括另外一个只读存储器,用来读指令。

在大多数实际系统中,这两个存储器被合并为一个具有双端口的存储器:一个用来读指令,一个用来读或写数据。

Y86的顺序实现

SEQ处理器:每一个时钟周期上,SEQ执行处理一条完整指令所需的所有步骤。

将处理组织成阶段

取址:valP:PC的值加上已取出指令的长度。

译码:读入指令rA和rB字段指明的寄存器。

执行:ALU执行指令指明的操作,计算存储器引用的有效地址,要么增加或者减少栈指针,得到的值为valE;

跳转指令来说,这个阶段会检验条件码和分支条件。

访存:可以将数据写入存储器,或者从存储器读出数据。置为valM。

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

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

SEQ的时序

SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器(程序计数器和条件码寄存器),随机访问存储器(寄存器文件、指令存储器和数据存储器)。

每个时钟周期,程序计数器都会装在新的指令地址;只有在执行整数运算指令时,才会装载条件码寄存器;只有在执行rmmovl、pushl或call指令时,才会写数据存储器;寄存器文件的两个写端口允许每个时钟周期更新两个程序寄存器。

SEQ阶段的实现

在控制逻辑中必须被显式引用的常数:



1.取指阶段

以PC为第一个字节的地址,一次读6个字节。

icode:控制逻辑块计算指令

ifun:功能码

三个一位的信号(根据icode值计算):

instr_valid:发现不合法的指令;

need_regids:包含寄存器指示符字节码;

need_valC:包括常数字码

后五个字节是寄存器指示符字节和常数字的组合编码。

2.译码和写回阶段

都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB。

寄存器文件,支持同时进行两个读和两个写,每个端口有一个地址连接(寄存器ID)和一个数据连接(32根线路),既可以作为寄存器文件的输出字,又可以作为他的输入字。

3.执行阶段

包括算数/逻辑单元(ALU),输出为valE信号。ALU通常作为加法器使用

包括条件码寄存器

每次运行产生:零、符号、溢出、产生信号set_cc

4.访存阶段

读或者写程序数据。

两个数据块产生存储器地址和存储器输入证据的值,两个产生控制信号表明应该是读还是写。当执行读操作时,数据存储器产生valM。

根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。

5.更新PC阶段

产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。

课后作业及实现

确定下面的Y86指令序列的字节编码。".pos 0x100”那一行表明这段目标代码的起始地址应该是Ox100。



答案:这段编码有以下特性值得注意:

十进制的15(第2行)的十六进制表示为0x0000000f。以反向顺序来写就是0f 00 00 00。

十进制-3(第5行)的十六进制表示为0xfffffffd。以反向顺序来写就fd ff ff ff。

代码从地址0x100开始。第一条指令需要6个字节,而第二条需要2个字节。因此,循环的目标地址为0x00000108。以反向顺序来写就是08 01 00 00。

确定下列每个字节序列所编码的Y86指令序列。如果序列中有不合法的字节,指出指令序列中不合法值出现的位置。每个序列都先给出了起始地址,冒号,然后是字节序列。



答案:



根据下面的C代码,用Y86代码来实现一个递归求和函数rSumint :

rSum(int *Start, int Count) {    if  (Count <=0)         return 0;       return *Start+rSum(Start+1,Count-1) }


答案:



填写下表的右边一栏,这个表描述的是图4-17中目标代码第7行上的popl指令的处理情况:



答案:我们可以看到指令位于地址。0x01c,由两个字节组成,值分别为0xb0和0x08。pushl指令(第6行)将寄存器%esp设为了124,并且将9存放在了这个存储器位置。



代码托管

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周0/02/25/5
第二周100/1003/410/15
第三周100/2004/520/35
第四周200/4002/725/60
第五周1000/14002/935/95
第六周300/17003/1250/135
第七周200/19002/1445/180
第八周200/21001/1555/235
第九周300/24003/1845/280
第十周200/26000/1820/300
第十一周100/27002/2045/345
第十四周100/28001/2435/445
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: