2018-2019-1 20165206 《信息安全系统设计基础》第4周学习总结

- 2018-2019-1 20165206 《信息安全系统设计基础》第4周学习总结

- 教材学习内容总结

  • 程序员可见的状态:Y86-64程序中的每条指令都会读取或修改处理器状态的某些部分,这称为程序员可见状态。包括:程序寄存器、条件码、程序状态、程序计数器和内存。

  • Y86-64指令:Y86-64指令是x86-84指令集的一个子集。它只包括8字节整数操作。有4个整数操作指令:addq、subq、andq和xorq。有7个跳转指令:jmp、jle、jl、je、jne、jge和jg。有6个条件传送指令:cmovle、cmovl、cmove、cmovne、cmovge和cmovg。

  • 汇编机器码间的转换。

  • Y86-64状态码:
    代码值1,命名为AOK,表示正常操作;
    代码值2,命名为HLT,表示遇到器执行halt指令;
    代码值3,命名为ADR,表示遇到非法地址;
    代码值4,命名为INS,表示遇到非法指令。

  • Y86-64指令集:

  • Y86-64程序寄存器标识符:

  • Y86-64指令集的功能码:

  • Y86-64实例:
    教材上实例代码:

gcc汇编及objdump反汇编后得到的x86-64代码:

教材中给出了Y86-64的汇编代码

  • x86-64代码和Y86-64的异同点。

  • YIS环境的构建与测试:

  • 逻辑门:逻辑门是数字电路的基本计算单元。它们产生的输出,等于它们输入位值的某个布尔函数。包括:与(AND)、或(OR)和非(NOT)。

  • 组合电路:将狠多的逻辑门组合成一个网,就能构建计算块。

  • 组合电路和HCL布尔表达式

  • 字级的组合电路和HCL整数表达式

  • 实现所有Y86-64指令所需要的计算可以被组织成6个基本阶段。包括:取指、译码、执行、访存、写回合更新PC。

取指:取指阶段从内存读取指令字节,地址为程序计数器的值。

译码:译码阶段从寄存器文件读入最多两个操作数,得到相应的值,并读入指令指明的寄存器。

执行:执行阶段,ALU要么执行指令指明的操作,计算内存引用的有效地址,要么增加或减少栈指针。

访存:访存阶段可以将数据写入内存,或者从内存读出数据。

写回:写回阶段最多可以写两个结果到寄存器文件。

更新PC:将PC设置成下一条指令的地址。

  • SEQ的时序:
    SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器和随机访问存储器。

组织计算原则:从不回读。处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。

- 上周考试错题总结

- 错题1:

x86-64 Linux中,%rbp的值为0x108, pushq %eax后,%rbp的值为()

A .
0x100
B .
0x108
C .
0x110
D .
0x118

  • 答案:B
  • 解析:push不影响%rbp的值。

- 错题2:

x86-64中,(%rsp)寄存器用来保存运行时栈的结束位置(栈顶)。

- 错题3:

Linux汇编中,销毁栈帧的语句是( )

A .
movq %rbp, %rsp
popq %rbp
B .
leave
C .
enter
D .
pushq %rbp
movq %rsp, %rbp

  • 答案:A B
  • 解析:
    leave等价于:
    movq %rbp, %rsp
    popq %rbp

猜你喜欢

转载自www.cnblogs.com/brs666/p/9822432.html