2017-2018-1 20155201 《信息安全系统设计基础》第七周学习总结

2017-2018-1 20155201 《信息安全系统设计基础》第七周学习总结

教材学习内容总结

一、处理器体系结构

  1. Y86-64指令集体系结构

    1. ISA(Instruction-Set Architecture)指令集体系结构:一个处理器支持的指令和指令的字节集编码。

    2. 内存的理解:一个很大的字节数组,保存着程序和数据。Y86-64用虚拟地址来引用内存位置。硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址,指明数据实际存在内存中哪个地方。虚拟内存系统向Y86-64程序提供了一个单一的字节数组映像。

    3. 异常:遇到异常时,处理器停止执行指令;异常处理程序可以被配置成不同的结果。

    4. Y86-8需要将常数加载到寄存器,算术指令中不能使用立即数。

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

    1. 实现一个数字系统的三个主要的组成部分:计算对位进行操作的函数的组合逻辑、存储位的存储器单元,以及控制存储器单元更新的时钟信号。

    2. AND&&表示,OR||表示,NOT!表示。不要与%|~混淆,逻辑门只对单个位的数进行操作,而不是整个字。

    3. 情况表达式示例:选择表达式顺序求值,第一个求值为1的情况会被选中。

    int Out=[
        s: A;    //s为1时Out=A,s为0时,顺序求下一表达式值。
        1: B;    //s为0时,Out=B。一种指定默认情况的方法。几乎所有情况表达式以此结尾。
    ]
    
    1. 为了产生时序电路(有状态并且在这个状态上进行计算的系统),引入按位存储信息的设备。时钟寄存器:存储单个位或字,时钟信号控制寄存器加载输入值。随机访问存储器:存储多个字,用地址来选择该读或该写哪个字,包括处理器的虚拟存储器系统,寄存器文件比如%eax等。
  3. Y86的顺序实现
    1.取指:取指阶段从存储器读取指令字节,地址为程序计数器(PC)的值。译码:译码阶段从寄存器文件读入最多两个操作数,得到值valA和/或valB。(有些指令读寄存器%esp)。执行:算数/逻辑单元(ALU)要么执行指令指明的操作(依据ifun),计算存储器引用的有效地址,要么增加或减少栈指针,得到valE。访存:将数据写入存储器,或者从存储器读出数据,读出的值为valM。写回:(最多)写两个结果到寄存器文件。更新PC:将PC设置成下一条指令的地址。
    2.

    1. 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)
      【指令 修改】

练习确定下列指令序列的字节编码:

.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小时

参考资料

原文地址:https://www.cnblogs.com/zhuohua/p/7788274.html