2017-2018-1 20155304 《信息安全系统设计基础》第七周学习总结
2017-2018-1 20155304 《信息安全系统设计基础》第七周学习总结
教材学习内容总结
4.1:Y86指令集体系结构
-
程序员可见的状态:每条指令都会读取或修改处理器状态的某些部分
-
Y86包括:8个程序寄存器、3个条件码ZF\SF\OF、程序计数器(PC)
-
Y86用虚拟地址引用存储器位置,程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态
-
Y86指令:
movl分为irmovl rrmovl mrmovl rmmovl
整数指令:addl subl andl xorl
跳转指令:jmp jle jl je jne jge jg
6个条件传送指令:cmovle cmovl cmove cmovne cmovge cmovg
call:将返回地址入栈,然后跳到目的地址
ret:过程调用中返回
pushl:入栈
popl:出栈
halt指令停止指令的执行:,执行此指令会导致处理器停止,并将状态码设置为HLT
-
指令的字节级编码:每条指令需要1-6个字节不等,每条指令的第一个字节表明指令的类型
-
第一个字节:分为两个部分,每个部分4位:
高四位:代码部分,值域为0~0xB
低四位:功能部分,功能值只有在一组相关指令共用一个代码时才有用
-
额外的字节
附加的寄存器指示符字节:指定一个或两个寄存器,例如rA或者rB
附加的4字节常数字
-
Y86指令和IA32代码的主要区别在于:它可能需要多条指令来执行一条IA32指令能完成的所有功能
4.2:逻辑设计和硬件控制语言HCL
-
逻辑门符号:
AND:&&
OR:
NOT:!
-
组合电路:将很多的逻辑门组合成一个网,能构建计算块。
-
限制:
1.两个或多个逻辑门的输出不能连接在一起
2.这个网必须是无环的。
-
组合逻辑电路和c语言中逻辑表达式的区别
组合电路的输出会持续响应输入变化,c语言表达式只有在执行过程中被遇到才求值
逻辑门只对0和1操作,c语言表达式中参数可以是任意整 数,0是FALSE,不是0的都是TRUE
c的逻辑表达式可能被部分求值
-
存储设备都是由同一个时钟控制,包括:
时钟寄存器(寄存器):存储单个位或字,时钟信号控制寄存器加载输入值
随机访问存储器(存储器):存储多个字,用地址来选择该读或该写哪个字
4.3:Y86的顺序实现
-
将处理组织成阶段:
取指:从存储器读取指令字节,地址为程序计数器PC的值,icod指令代码、ifun指令功能、valc四字节常数、valp下一条指令的地址=PC值+已取出指令长度
译码:从寄存器文件读入最多两个操作数
执行:算数/逻辑单元要么执行指令指明的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针,得到的值称为valE
访存:将数据写入存储器或从存储器读出数据,值为valM
写回:最多可以写两个结果到寄存器文件
更新PC:将PC设置成下一条指令地址
-
SEQ硬件结构:
取指:将程序计数器寄存器作为地址,指令存储器读取指令的字节
译码:两个读端口,读寄存器valA和valB
执行:根据指令的类型,将算数/逻辑单元用于不同的目的
访存:数据存储器读出或写入一个存储器字
-
SEQ的实现包括组合逻辑和两种存储器设备:
时钟寄存器:程序计数器和条件码寄存器
随机访问存储器:寄存器文件、指令存储器和数据存储器
代码调试中的问题和解决过程
- 打开虚拟机时提示挂载失败,但安装YIS的安装包在Windows系统上,需使用共享文件夹中的安装包。
- 解决过程:重新手动挂载,再执行安装过程。
其他(感悟、思考等,可选)
本周的知识点的学习重点在于4.3,对于Y86的顺序实现过程中,用了很多的时间去学习的,很多知识点都是建立于栈帧的知识点上的。之前的基本功不扎实,学起来就会比较困难。但是关于HCL的知识,因为之气学过verilog与HDL设计课程的基础,理解起来就会容易许多
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 47/100 | 1/1 | 10/10 | |
第二周 | 180/200 | 1/1 | 10/10 | |
第三周 | 200/300 | 1/1 | 10/10 | |
第五周 | 190/300 | 1/1 | 10/10 | |
第六周 | 220/300 | 2/2 | 10/10 | |
第七周 | 320/500 | 2/2 | 10/10 |