zoukankan      html  css  js  c++  java
  • 20145317《信息安全系统设计基础》第六周学习总结2

    20145317《信息安全系统设计基础》第六周学习总结2

    教材学习内容总结

    4.1Y86指令集体系结构

    • Y86:包括定义各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理。

    • 程序员可见状态

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

    注意:条件码只与整数操作指令有关

    • 指令编码

        高4位是代码部分,低4位是功能部分,功能之只有在一组相关指令共用一个代码时才有用。
        
        当需要指明不应访问任何寄存器时,就用ID值0xF来表示。
         
        指令集的一个重要性质:字节编码必须有唯一的解释。
    • Y86异常

      状态码Stat:描述程序执行的总体状态
      
      代码值1:名字为AOK,表示程序执行正常
      
      代码值2:名字为HLT,表示处理处执行一条halt指令
      
      代码值3:名字为ADR,表示处理器试图从一个非法存储器地址读或者向一个非法存储器地址写,可能是当取指令的时候,也可能是当读或者写数据的时候。 
      
      代码值4:名字为INS,表示遇到了非法的指令代码。
    • Y86程序

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

      pushl指令会把栈指针减4,并且将一个寄存器值写入存储器中。
      
      因为要入栈的寄存器会被同一条指令修改,通常有两种约定:
      (1)压入%esp的原始值 (2)压入减去4的%esp的值。

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

    • 逻辑门

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

    • 组合电路和HCL布尔表达式

      组合电路:将很多的逻辑门组合成一个网,能构建计算块。
      
      构建这些网有2条限制:
      (1)两个或多个逻辑门的输出不能连接在一起
      (2)这个网必须是无环的。
    • HCL表达式和C语言中逻辑表达式的区别:

      1)组合逻辑电路的输出会持续地响应输入的变化;C表达式只有在程序执行过程中被遇到时才会求值。
      (2)C的逻辑表达式允许参数是任意整数,0表示FLASE,其他任何值都表示TRUE;逻辑门只对位值0和1进行操作。 
      (3)C的逻辑表达式可能只被部分求值;组合逻辑没有部分求值的规则,逻辑门只是简单地响应输入的变化。
    • 集合关系

    判断集合关系的通用格式是:

    iexpr in {iexpr1,iexpr2,……,iexprk}

    • 存储器和时钟

      存储设备都是由同一个时钟控制,两类存储器设备包括:
      
      时钟寄存器(寄存器):存储单个位或字,时钟信号控制寄存器加载输入值 
      随机访问存储器(存储器):存储多个字,用地址来选择该读或该写哪个字
      
      随机访问存储器的例子包括:
      (1)处理器的虚拟存储器系统
      (2)寄存器文件
    • “寄存器”在硬件和机器级编程中的区别:

    在硬件中,寄存器直接将它的输入和输出线连接到电路的其他部分;
    在机器级编程中,寄存器代表的是CPU中为数不多的可寻址的字,这里的地址是寄存器ID。 Y86处理器会用时钟寄存器保存程序计数器(PC)、条件代码(CC)、程序状态(Stat)。

    4.3 Y86的顺序实现

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

    • 将处理组织成阶段

      取址:valP:PC的值加上已取出指令的长度。
      译码:读入指令rA和rB字段指明的寄存器。
      执行:ALU执行指令指明的操作,计算存储器引用的有效地址,要么增加或者减少栈指针,得到的值为valE;对跳转指令来说,这个阶段会检验条件码和分支条件。
      访存:可以将数据写入存储器,或者从存储器读出数据。置为valM。
      写回:最多可以写两个结果到寄存器文件。
      更新:将PC设置成下一条指令的地址。
    • 执行一条指令需要的处理过程

      执行指令所表明的操作、计算地址、更新栈指针、确定下一条指令的地址。
      对于三种控制转移指令的处理:需要注意位信号Cnd。 
      在更新PC阶段,检查这个标志,如果这个标志为1,将PC设为valC(跳转目标),如果为0,就设为valP(下一条指令的地址)。
    • SEQ硬件结构

      实现所有Y86指令所需要的计算可以组织成6个阶段:取值、译码、执行、访存、写回和更新PC。 在SEQ中,所有硬件单元的处理都在一个时钟周期内完成。
    • SEQ的时序

      SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器(程序计数器和条件码寄存器),随机访问存储器(寄存器文件、指令存储器和数据存储器)。 
      
      每个时钟周期,程序计数器都会装在新的指令地址;只有在执行整数运算指令时,才会装载条件码寄存器;只有在执行rmmovl、pushl或call指令时,才会写数据存储器;寄存器文件的两个写端口允许每个时钟周期更新两个程序寄存器。
      
      处理器的原则:
      处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。
    • SEQ阶段的实现

      nop指令:除了将PC加1,不进行任何处理; 
      halt指令:将处理器状态设置为HLT,导致处理器停止运行。

    实验楼学习内容总结

    安装过程

    运行make指令后

    查看目录下内容,可以看到只有.ys文件

    用make all命令编译后

    编译后查看目录下内容,可以看到已经有编译后的.yo文件,用vim进入后可以查看

    课本第239页图4-7上的代码,在系统中叫做asum.yo,把它的内容打印在屏幕上:

    其余代码测试结果相同

    本周代码托管截图



    托管网址:http://git.oschina.net/717py/py-20145317/tree/master

    学习进度条

     代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
    目标 5000行 30篇 400小时  
    第一周 200/200 1/1 20/20  
    第二周 300/500 1/2 18/38  
    第三周 500/1000 1/3 22/60  
    第四周 150/1150 1/4 30/90  
    第五周 150/1300 1/5 30/120  

    参考资料

  • 相关阅读:
    ARM学习笔记10——GNU ARM命令行工具
    ARM学习笔记9——ARM汇编汇编语言中的伪指令
    ARM学习笔记8——通用寄存器和存储器内容交换指令和软中断指令
    ARM学习笔记7——乘法指令
    ARM学习笔记6——程序状态寄存器访问指令
    ARM学习笔记5——程序状态寄存器
    ARM学习笔记4——加载存储指令
    ARM学习笔记3——数据处理指令
    ARM学习笔记2——分支跳转指令
    ARM学习笔记1——Arm寄存器与模式的关系
  • 原文地址:https://www.cnblogs.com/5317p/p/5991083.html
Copyright © 2011-2022 走看看