2018-2019-1 20165202 《信息安全系统设计基础》第四周学习总结
2018-2019-1 20165202 《信息安全系统设计基础》第四周学习总结
教材学习内容总结
一、处理器体系结构
-
Y86-64指令集体系结构
-
ISA(Instruction-Set Architecture)指令集体系结构:一个处理器支持的指令和指令的字节集编码。
-
内存的理解:一个很大的字节数组,保存着程序和数据。Y86-64用虚拟地址来引用内存位置。硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址,指明数据实际存在内存中哪个地方。虚拟内存系统向Y86-64程序提供了一个单一的字节数组映像。
-
异常:遇到异常时,处理器停止执行指令;异常处理程序可以被配置成不同的结果。
-
Y86-8需要将常数加载到寄存器,算术指令中不能使用立即数。
-
-
逻辑设计和硬件控制语言HCL
-
实现一个数字系统的三个主要的组成部分:计算对位进行操作的函数的组合逻辑、存储位的存储器单元,以及控制存储器单元更新的时钟信号。
-
AND
用&&
表示,OR
用||
表示,NOT
用!
表示。不要与%
、|
、~
混淆,逻辑门只对单个位的数进行操作,而不是整个字。 -
情况表达式示例:选择表达式顺序求值,第一个求值为1的情况会被选中。
int Out=[ s: A; //s为1时Out=A,s为0时,顺序求下一表达式值。 1: B; //s为0时,Out=B。一种指定默认情况的方法。几乎所有情况表达式以此结尾。 ]
- 为了产生时序电路(有状态并且在这个状态上进行计算的系统),引入按位存储信息的设备。时钟寄存器:存储单个位或字,时钟信号控制寄存器加载输入值。随机访问存储器:存储多个字,用地址来选择该读或该写哪个字,包括处理器的虚拟存储器系统,寄存器文件比如%eax等。
-
-
Y86的顺序实现
1.取指:取指阶段从存储器读取指令字节,地址为程序计数器(PC)的值。译码:译码阶段从寄存器文件读入最多两个操作数,得到值valA和/或valB。(有些指令读寄存器%esp)。执行:算数/逻辑单元(ALU)要么执行指令指明的操作(依据ifun),计算存储器引用的有效地址,要么增加或减少栈指针,得到valE。访存:将数据写入存储器,或者从存储器读出数据,读出的值为valM。写回:(最多)写两个结果到寄存器文件。更新PC:将PC设置成下一条指令的地址。
2.- SEQ抽象视图
教材学习中的问题和解决过程
-
问题1:写出xor(异或)信号的HCL表达式,输入为a和b。
-
问题1解决方案:当a和b全为0或者1时,
(a || b)
和(!a || !b)
中必有一个为0,xor
的值必为0;当a和b一个为0,一个为1时,(a || b)
和(!a || !b)
的值均为1,xor
为1。表达式:bool xor=(a || b) && (!a || !b)
。 -
问题2:如何理解irmovl指令的处理情况?
-
问题2解决方案:(对比跟踪subl指令的执行)
-
问题3:如何理解Y86—64指令?
-
问题3解决方案:
- 立即数(i)、寄存器(r)、内存(m)
【指令 修改】
- 立即数(i)、寄存器(r)、内存(m)
练习确定下列指令序列的字节编码:
.pos 0x100
irmovl $15,%ebx
rrmovl %ebx,%ecx
loop:
rmmovl %ecx,-3(%ebx)
addl %ebx,%ecx
jmp loop
贴出两个示例,一个是irmovl v,rB;另一个是jmp Dest
0x100:30f30f00000000000000//f:00 00 00 00 00 00 00 0f->0f 00 00 00 00 00 00 00
0x10a:2031//0x100->0x10a是因为上一条指令共10字节
0x10c:
0x10c:4013fdffffffffffffff//十进制的-3补码转换16进制fffffffffffffffd
0x116:6031
0x118:700c01000000000000//0x10c->0c 10 00 00 00 00 00 00
代码调试中的问题和解决过程
- 问题1:如何搭建Y86编译环境?
- 问题1解决方法:由于没有使用Ubuntu,我在实验楼中完成本次试验。
cd ~/Code/shiyanlou_cs413
wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar
tar -xvf sim.tar
cd sim
sudo apt-get install bison flex tk
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
cd y86-code
make asuml.yo
make clean
make all
cat asuml.yo
代码托管
本周y86模拟均在实验楼环境进行
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 195/195 | 1/1 | 10/10 | |
第三周 | 314/706 | 1/2 | 15/25 | |
第五周 | 254/960 | 1/3 | 10/35 | |
第七周 | 24/1759 | 1/4 | 15/50 |
-
计划学习时间:12小时
-
实际学习时间:15小时