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

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

处理器体系结构

Y86指令集体系结构

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

程序员可见状态:

  • Y86程序中的每条指令都会读取或修改处理器状态的某些部分。
  • Y86具体包括:8个程序寄存器、3个条件码ZF\SF\OF、程序计数器(PC)。
  • Y86用虚拟地址引用存储器位置。 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态。
    Y86指令

Y86指令

  • 指令介绍:
    • halt:这个指令将会终止指令的执行
    • nop:这是一个占位指令,他不做任何事,后续为了实现流水线,它有一定的作用
    • xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数.比如rrmov指令,则代表将一个寄存器的值,赋给另外一个寄存器
    • opl:操作指令,比如加法,减法等等
    • jxx:条件跳转指令,根据后面的条件进行跳转
    • cmovxx:条件传送指令,后面的xx代表的是条件.特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器.
    • call与ret:方法的调用和返回指令.一个将返回地址入栈,并跳到目标地址.一个将返回地址入PC,并跳到返回地址.
    • push和pop:入栈和出栈操作

指令编码

  • 在上图的右边,是指令所占的字节数或者说编码.一般两个寄存器占用一个字节,存储器则占用四个字街,指令的编码和功能占用一个字节.因此可以看到,比如rrmovl指令,它的字长长度是2,其中第一个字节代表了指令rrmovl,第二个字节代表了两个寄存器.
  • 对于opl,jxx,cmovxx指令来说,都有一个fn标致,占用4个二进制位(半个字节).这个便是指令的功能部分,这个是由于他们的指令编码一样,但功能有所不同所造成的.比如对于opl,就有加,减,与,异或等操作,那么它们的指令编码第一个字节就分别为十六进制的60,61,62,63.
  • 对于寄存器的表示,是使用4个二进制位表示的,这是一个ID标志.所有的寄存器可以看做是一个寄存器文件,其中的ID标志就类似于它们的地址.对于一些只需要一个寄存器的指令来说,另一个寄存器标志位使用0xF表示.
  • 还有的指令需要一个字的常数,比如irmovl指令,call指令等等.这种指令,将会把常数放在最后的四个字节当中,顺序按照大端法或小端法表示(与机器和OS有关).对于call指令来说,这四个字节就是一个地址,这个地址就是绝对地址,指向了存储器当中的某一个位置,这个位置存储着代码.采用绝对地址是为了描述简单,真实当中,时采取的基于PC的相对地址.

Y86异常

  • 对Y86来说,程序员可见的状态中就有stat状态码,它标志了程序执行的状态.Y86需要有能力根据stat去做一些处理.捕获为了简单起见,这里除了正常执行之外,都将停止指令的执行.真实当中,会有专门的异常处理程序.
  • Y86有四种不同的状态码:AOK(正常),HTL(执行halt指令),ADR(非法地址)和INS(非法指令).

Y86程序

  • Y86指令和IA32代码的主要区别在于,它可能需要多条指令来执行一条IA32指令能完成的所有功能。
  • Y86没有伸缩寻址模式。
  • 以“.”开头的词是汇编器命令,命令.pos0告诉汇编器应该从地址0处开始产生代码。
  • 创建Y86代码的唯一工具是汇编器。
  • YIS:指令集模拟器
  • Y86和X86的区别在于,有的时候Y86需要两条指令来达到X86一条指令就可以达成的目的.
    • 比如对于X86指令中的addl $4,%ecx这样的指令,由于Y86当中的addl指令不包含立即数,所以Y86需要先将立即数存如寄存器,即使用irmovl指令,然后再使用addl来处理加法运算.
    • 总的来说,Y86就是X86的一个缩减版,他的目的就是以简单的结构来实现一个处理器,帮助我们了解处理器的设计和实现.

一些Y86指令的详情

  • 大多数Y86指令是以一种直接的方式修改程序状态的。
  • 执行pushl和popl指令时,处理器的行为是不确定的,因为要入栈的寄存器会被同一条指令修改。通常有两种约定:
    • 压入/弹出%esp的原始值
    • 压入/弹出%esp-/+4后的值

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

逻辑门

  • 逻辑门是数字电路的基本计算元素,它们的输出,等于它们输入位值的某个布尔函数。
  • 逻辑门总是活动的,一旦一个门的输入变化,在短时间内,输出就会跟着变化。。

组合电路和HCL布尔表达式

  • 组合电路:将很多的逻辑门组合成一个网,能构建计算块。
  • 多路复用:根据输入控制信号的值,从一组不同的数据信号中选出一个。
  • 构建这些网有2条限制:
    • (1)两个或多个逻辑门的输出不能连接在一起
    • (2)这个网必须是无环的。
  • HCL表达式和C语言中逻辑表达式的区别:
    • (1)组合逻辑电路的输出会持续地响应输入的变化;C表达式只有在程序执行过程中被遇到时才会求值。
    • (2)C的逻辑表达式允许参数是任意整数,0表示FLASE,其他任何值都表示TRUE;逻辑门只对位值0和1进行操作。
    • (3)C的逻辑表达式可能只被部分求值;组合逻辑没有部分求值的规则,逻辑门只是简单地响应输入的变化。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 20篇 400小时
第一周 61/61 1/1 10/10 了解vim,gcc,gdb基本操作
第二周 0/61 1/2 10/20 了解信息的表示和处理
第三周 21/81 1/3 10/30 更深层次了解信息处理
第四周 29/100 2/5 10/40 Y86处理器
posted @ 2018-10-21 21:42  好好学习JAVA  阅读(137)  评论(0编辑  收藏  举报