第三周总结
寻址方式经历三代
- DOS时代的平坦模式,不用区分用户空间和内核空间,很不安全
- 8086的分段模式
- IA32的带保护模式的平坦模式
两个抽象
- 指令集体系结构(ISA):定义了指令的相关规则,且多条指令是并发执行的,结果像是顺序执行;
- 虚拟地址:存储器系统是将多个硬件存储器和操作系统组合起来的
x86-64指令:1-15字节不等
指令格式:OPEN[DEXT[,SRC]];
处理器
- 程序计数器:%rip指示将要执行的下一条指令在储存器中的地址。
- 整数寄存器:包含16个命名的位置。
- 条纹寄存器
- 浮点寄存器
生成汇编文件:使用-S参数
gcc -S mstore.c
反汇编:使用OBJDUMP
objdump -d mstore.o
数据格式
操作数指示符
- 立即数
- 寄存器
- 内存引用:Imm(Eb,Ei,s)=M[Imm+R[Eb]+R[Ei]*s]
数据传输指令
- movb 传输字节
- movw 传输字
- movl 传输双字
- movs 符号位扩展
- movz 零扩展
寻址方式
- 立即数寻址
- 寄存器寻址
- 储存器寻址
压入和弹出栈数据
- pushq
- popq
有效加载地址
- leal
条件码
- CF进位标志
- ZF零标志
- SF符号标志
- OF溢出标志
过程
- 形式:函数,方法,子例程,处理函数
- 转移控制
- 将控制从函数P转移到函数Q:call;ret;
- 数据传输
- 把数据作为参数传递,从过程不返回或返回一个或多个值
- x86-64中,可以通过寄存器最多传递6个整型参数
- 分配和释放内存
- 栈上的局部存储
- 寄存器中的局部存储空间