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 |