20165217第四周学习总结
教材学习内容总结
- 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程序中的每条指令都会读取或修改处理器状态的某些部分,这称为程序员可见状态。包括:程序寄存器、条件码、程序状态、程序计数器和内存。
程序寄存器(RF):
%rax,%rsp,%r8,%r12,%rcx,%rbp,%r9,%r13,%rdr,%rsi,%r10,%r14,%rbr,%rdi,%r11;
条件码:ZF\SF\OF;
- 结果为0,ZF = 1;
- 结果最高位即SF;
- 无符号运算无意义,发生溢出,OF = 1;
Y86-64指令集:
Y86-64程序寄存器标识符:
Y86-64指令集的功能码:
上周考试错题总结
错题1:
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
错题2:
x86-64中,(%rsp)寄存器用来保存运行时栈的结束位置(栈顶)。