【CSAPP】三、程序的机器级表示

本章基于两种相关的机器语言:Intel IA32和x86-64,前者注重32位,后者注重64位。

本章脉络:c汇编机器码之间的关系,数据的表示,控制结构如何实现。运行栈,局部变量的存储,数据结构。

【一】程序编码

-O1表示1级optimize,一般第二级优化比较好。

1、机器级代码

两种抽象尤为重要:1、机器级程序的格式和行为 --指令集体系结构。2、储存器地址是虚拟的,字节数组。

机器级代码可控部分:

程序计数器(pc, %eip)

整数寄存器文件:8个命名的位置,分别存储32位的值,可以是数据,也可以是地址。

条件码寄存器 

【二】数据格式

字:16位 w

双字:32位 dw

四字:64位 qw

汇编后缀:b:1, w:2, l:4, 浮点数 s:4, l:8 不会引起歧义,浮点数舒勇不同的指令和寄存器

【三】访问信息

1、操作数指示符

除了立即数和寄存器,都要有寻址的操作。

立即数$0x108, 寄存器%eax

寄存器寻址直接加括号(%eax),前面加数就是偏移量,Imm(Ep, Ei, s) 即为 M[Imm + R[Ep] + R[Ei] * s]

2、数据传送指令

MOV S, D

后缀有MOVS MOVZ,分别是符号扩展和零扩展

PUSH %eax (栈指针是规定好的, %esp)

3、算术和逻辑操作

leal S, D 将寄存器S中地址的数加载到寄存器D中

加一、减一、取负、取补

加、减、乘、异或、或、与

左移、算术右移、逻辑右移

4、控制

原文地址:https://www.cnblogs.com/yesuuu/p/6938102.html