20145204《信息安全系统设计基础》第6周学习总结
教材学习内容
处理器体系结构
处理器执行一系列的指令。在计算机系统中,指令被编码为由一个字节或多个字节序列组成的二进制格式。一个处理器支持的指令和指令的字节级编码成为它的指令集体系机构(ISA)。
Y86指令集体系结构
程序员可见的状态
- 8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp。
- 条件码:ZF(零)、SF(符号)、OF(有符号溢出)
- 程序计数器(PC):存放当前正在执行的指令的地址
- 存储器:很大的字节数组,保存着程序和数据。Y86系统用虚拟地址来引用存储器的位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或者物理地址。
- 状态码(stat):表明程序执行的总体状态。(异常处理)
Y86指令
- halt:终止指令的执行
- nop:占位指令,他不做任何事,后续为了实现流水线,它有一定的作用
- xxmovl:一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数.比如rrmov指令,则代表将一个寄存器的值,赋给另外一个寄存器
- opl:操作指令,比如加法,减法等等
- jxx:条件跳转指令,,根据后面的条件进行跳转
- cmovxx:条件传送指令,后面的xx代表的是条件.需要注意的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器.
- call与ret:方法的调用和返回指令.一个将返回地址入栈,并跳到目标地址.一个将返回地址入PC,并跳到返回地址.
- push和pop:入栈和出栈操作
指令编码
指令的字节级编码规则:高4位为代码部分,低四位为功能部分,功能值只有在一组相关指令共用一个代码时才有用。
8个程序寄存器当中,每个都有相应的0~7的寄存器标识符。程序寄存器存在CPU中的一个寄存器文件中,这个文件就是一个小的、以寄存器ID作为地址的随机访问存储器。
Y86异常
状态码:描述程序执行的总体状态。
值 名字 含义
1 AOK 正常操作
2 HLT 处理器执行halt指令(指令停止)
3 ADR 遇到非法地址
4 INS 遇到非法指令
Y86中,任何AOK以外的代码都会使处理器停止执行指令,而没有异常处理程序。
逻辑设计和硬件控制语言HCL
- 逻辑门
1、逻辑门产生的输出,等于它们输入位值的某个布尔函数。逻辑门只对单个位的数进行操作,而不是整个字。
2、逻辑门总是活动的,一旦一个门的输入变化,在短时间内,输出就会跟着变化。
Y86的顺序实现
- 取指:从存储器读取指令字节,地址为程序计数器PC的值
- 译码:从寄存器读入最多两个操作数,得到valA或valB
- 执行:算术/逻辑单元要么执行指令指明的操作,计算存储器引用的有效地址,要么增加或减少栈指针。得到的值为valE。
- 访存:将数据写入存储器,或从存储器中读出数据,读出的值为valM。
- 写回:最多可以写两个结果到寄存器文件
- 更新PC:将PC设为下一条指令的地址
处理器无限循环执行这些阶段,在简化的实现中,一旦出现问题,处理器就会停止。
代码调试过程中的问题以及解决过程
- y86安装过程
按照实验楼的步骤安装(在实验楼中和ubuntu中安装过程一样):
1、在终端输入sudo apt-get install bison flex
,安装bison和flex词法分析工具
2、下载sim解压:
wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar
tar -xvf sim.tar
3、
sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libtcl8.6.so /usr/lib/libtcl.so
make
4、make all
5、make asuml.yo
产生asuml.ys文件
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 30篇 | 400小时 | |
第一周 | 100/100 | 1/1 | 20/20 | |
第二周 | 200/300 | 1/2 | 30/50 | |
第三周 | 100/400 | 1/3 | 28/78 | |
第五周 | 60/460 | 1/4 | 20/98 | |
第六周 | 200/660 | 1/5 | 21/119 |