程序的转换和机器级表示
3.1 程序转换概述
3.1.1 机器级指令
机器指令和汇编指令一一对应,都是机器级指令
R:寄存器内容
M:存储单元内容
3.2 IA-32 /x86-64指令系统
3.2.1 IA-32的标志寄存器
- 6个条件标志
OF、SF、ZF、CF各是什么标志(条件码)?
AF:辅助进位标志(BCD码运算时才有意义)
PF:奇偶标志 - 3个控制标志
DF(Direction Flag):方向标志(自动变址方向是增还是减)
IF(Interrupt Flag):中断允许标志 (仅对外部可屏蔽中断有用)
TF(Trap Flag):陷阱标志(是否是单步跟踪状态)
3.2.2 IA-32的寻址方式
- 寻址方式:根据指令给定信息得到操作数或操作数地址
- 操作数所在的位置
指令中:立即寻址
寄存器中:寄存器寻址
存储单元中(属于存储器操作数,按字节编址):其他寻址方式
3.3 C语言程序的机器级表示
3.3.1 过程调用的机器级表示
- 过程调用的执行步骤(P为调用者,Q为被调用者)
(1)P将入口参数(实参)放到Q能访问到的地方;
(2)P保存返回地址,然后将控制转移到Q;
(3)Q保存P的现场,并为自己的非静态局部变量分配空间;
(4)执行Q的过程体(函数体);
(5)Q恢复P的现场,释放局部变量空间;
(6)Q取出返回地址,将控制转移到P。
3.4 复杂数据类型的分配和访问
数组、指针、结构体、联合体
3.4.1 数据的对齐
为编译器指定结构体或类内部的成员变量的对齐方式。
3.5 越界访问和缓冲区溢出 、x86-64架构
缓冲区溢出定义:超越数组存储区范围的写入操作称为缓冲区溢出