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

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

一 教材内容总结

Y86指令集体系结构

  • 内容:定义一个指令集体系结构,包括定义各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理
  • Y86程序中的每条指令都会读取或修改处理器状态的某些部分,这叫做程序员可见状态
  • Y86和IA32有类似,均为8个程序寄存器、3个条件码ZFSFOF、程序计数器PC
  • Y86指令集基本上是IA32指令集的一个子集,只有四字节整数操作,寻址方式比较少,操作比较少
  • movl指令分为四条:irmovl,rrmovl,mrmovl,rmmovl
  • 四个整数操作指令:addl,subl,andl,xorl
  • 7个跳转指令:jmp,jle,jl,je,jne,jge,jg
  • call指令将返回地址入栈,然后跳到目的地址。ret指令从这样的过程调用中返回
  • pushl和popl指令实现了入栈和出栈
  • halt指令停止指令的执行,对于Y86来说,执行halt指令会导致处理器停止,并将状态码设置为HLT
  • 指令编码:每条指令的第一个字节代表指令的类型,且该字节高四位为代码部分,低四位为功能部分
  • Y86异常:

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

  • 要实现一个数字系统需要三个主要的组成部分:

    • 计算对位进行操作的函数的组合逻辑
    • 存储位的存储器元素
    • 控制存储器元素更新的时钟信号
  • 组合电路和HCL布尔表达式:

    • 两个或者多个逻辑门的输出不能连接到一起,否则会使线上的信号矛盾,导致电路故障
    • 网必须是无环的
  • HCL和C之间逻辑表达式计算的区别:

    • 组合电路的输出会持续的响应输入的变化,c只会在程序执行的过程中遇到时才进行求值
    • C的逻辑表达式允许参数是任意整数,逻辑门只对应0,1
    • C的逻辑表达式可能只被部分求值,例如(a&&!a) && func(b,c)在C语言中,func不会被调用,因为前者值为0,式子的值已确定
  • 存储器和时钟:

    • 时钟寄存器(寄存器):储存单个位或字,用时钟信号控制寄存器加载输入值
    • 随机访问储存器(储存器):储存多个字,用地址选择该读/写哪个字
    • 硬件寄存器:寄存器直接将他的输入输出线连接到电路的其他部分
    • 程序寄存器:在机器级编程中,寄存器代表的是CPU中为数不多的可寻址的字

Y86的顺序实现

  • 每一个时钟周期上,SEQ执行处理一条完整指令所需的所有步骤
  • 将处理组织成阶段:
    • 取指:从存储器读取指令字节,地址为程序计数器PC的值
    • 译码:从寄存器读入最多两个操作数,得到valA或valB
    • 执行:算术/逻辑单元要么执行指令指明的操作,计算存储器引用的有效地址,要么增加或减少栈指针。得到的值为valE
    • 访存:将数据写入存储器,或从存储器中读出数据,读出的值为valM
    • 写回:最多可以写两个结果到寄存器文件
    • 更新PC:将PC设为下一条指令的地址
  • SEQ的时序:
    • SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器(程序计数器和条件码寄存器),随机访问存储器(寄存器文件、指令存储器和数据存储器)
  • SEQ阶段的实现:依旧按照取指,译码,执行,访存,写回,更新PC来分阶段实现
  • SEQ唯一的问题就是它太慢了,时钟必须非常慢,才能使得信号能在一个周期内传播所有阶段

二 课后练习

  • y86安装按照博客园上的步骤进行即可

  • 查看asuml.yo

三 代码托管

这周并没有什么代码上传

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 20/20 学习常用linux命令
第二周 100/100 1/2 20/40 学习vim,gdb等用法
第三周 100/200 1/3 15/55
第四周 0/300 0/3 10/65
第五周 100/400 1/4 15/80 重温了汇编相关知识
第六周 0/400 1/5 15/95 学习了Y86
原文地址:https://www.cnblogs.com/20145319zk/p/5991287.html