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

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 :

{    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/0 2/2 5/5
第二周 100/100 3/4 10/15
第三周 100/200 4/5 20/35
第四周 200/400 2/7 25/60
第五周 1000/1400 2/9 35/95
第六周 300/1700 3/12 50/135
第七周 200/1900 2/14 45/180
第八周 200/2100 1/15 55/235
第九周 300/2400 3/18 45/280
第十周 200/2600 0/18 20/300
第十一周 100/2700 2/20 45/345
第十四周 100/2800 1/24 35/445
posted on 2017-12-24 14:23  20155220吴思其  阅读(186)  评论(0编辑  收藏  举报