码迷,mamicode.com
首页 > 其他好文 > 详细

信息安全系统设计基础第五周学习总结

时间:2015-10-18 11:13:12      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

Y86指令集体系结构

(1)内容

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

(2)程序员可见状态

  • 概念:Y86程序中的每条指令都会读取或修改处理器状态的某些部分,称之为处理器可见状态。
  • Y86处理器状态类似于I32。可以访问和修改程序寄存器、条件码、程序计数器和存储器,状态码指明程序是否运行正常。

    RF:程序寄存器	%eax,%ecx,%edx,%ebx,%esi,%edi,%esp(出栈、入栈、调用和返回指令作为栈指针),%ebp
    CC:条件码		ZF、SF、OF(都是一位条件码,用来保存最近的算术或逻辑指令所造成影响的有关信息。)
    PC:程序计数器	存放当前正在执行的指令
    DMEM:存储器	很大的字节数组,保存着程序和数据。Y86程序用虚拟地址来引用存储器位置。
    Stat:程序状态码	它表明程序执行的总体状态。它会指示是正常运行还是出现了某种异常。

(3)Y86指令

  • IA32指令集的一个子集,只包括四字节整数操作。寻址方式比较少,操作也比较少。
  • 指令编码长度从1个字节到6个字节不等,一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。字段fn指明是某个整数操作(OPL)、数据移动条件(cmovXX)或是分支条件(jXX)。所有数值都用十六进制表示

技术分享

- IA32的movl指令分成了4个不同的指令:irmovl、rrmovl、mrmovl和rmmovl。分别显示地指明源和目的的格式。(源可以是立即数i,寄存器r,或存储器m;目的可以使寄存器r和存储器m。)两个存储器传送指令中的存储器引用方式是简单的基址和偏移量形式。在地址计算中,不支持第二变址寄存器和任何寄存器值的伸缩。同IA32一样,不允许从一个存储器地址直接传送到另一个存储器地址。也不允许将立即数传送到存储器。
- 4个整数操作指令。addl、subl、andl和xorl。
- 7个跳转指令(jXX)。jmp、jle、jl、je、jne、jge和jg。
- 有6个条件传送指令(cmovXX)。cmovle、cmovl、cmove、cmovne、cmovge和cmovg。只有当条件码满足所需要的约束时,才会更新目的寄存器的值。
- call指令将返回地址入栈,然后跳到目的地址。ret指令从这样的过程调用中返回。
- pushl和popl指令实现了入栈和出栈。
- halt指令停止指令的执行。对于Y86来说,执行halt指令会导致处理器停止,并将状态码设置为HLT。

(4)指令编码

  • 每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每部分4位:高4位是代码部分,低4位是功能部分。功能值只有在一组相关指令共用一个代码时才有用。
  • 8个程序寄存器中每个都有相应的0~7的寄存器标识符。
  • 程序寄存器存在一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。当需要指明不应访问任何寄存器时,用ID值0xF表示。

技术分享

  • 有的指令只有一个字节长,有的有附加的寄存器指示符字节,指定一个或两个寄存器。那些只需要一个寄存器操作数的指令(irmovl、pushl、popl)将另一个寄存器指示符设为0xF。
  • 有的指令需要一个附加的4字节常数字,可作为irmovl的立即数数据,rmmovl和mrmovl的地址指示符偏移量,分支指令和调用指令的目的地址。
  • 注意:分支指令和调用指令的目的地址是一个相对地址,而不是相对寻址方式。
  • 所有整数采用小端法编码。当指令按反汇编格式书写时这些字节就以相反的顺序出现。
  • 指令集的一个重要性质就是字节编码必须有唯一的解释。这个性质保证了处理器可以无二义性地执行目标代码程序。即使代码嵌入在程序的其他字节中,只要从序列的第一个字节开始处理,我们仍然可以很容易地确定指令序列。反过来说,如果不知道一段代码序列的起始位置,我们就不能准确地确定怎样将序列划分成单独的指令。

信息安全系统设计基础第五周学习总结

标签:

原文地址:http://www.cnblogs.com/sunxiaobo/p/4889112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!