程序的机器级表示

1.一个IA32 CPU包含一组8个存储32位值的寄存器。这些寄存器用来存储整数数据和指针。

程序的机器级表示_第1张图片

2.操作数指示符,指示出一个操作中药引用的源数据值,以及放在结果的目标位置。源数据可以以常数形式给出,或是寄存器或存储器中读出,结果放在寄存器或存储器中。

程序的机器级表示_第2张图片

3.数据传送指令

程序的机器级表示_第3张图片

IA32 CPU限制,传送指令的两个操作数不能都指向存储器位置。

4.算术和逻辑操作

程序的机器级表示_第4张图片

5.控制操作与条件码

常用条件码:

「精」程序的机器级表示<CSAPP>

leal指令不改变任何条件码,CMP指令根据两个操作数之差来设置条件码。只设置条件码,不更新目标寄存器。

跳转指令:

程序的机器级表示_第5张图片

6.过程

一个过程调用包含将数据和控制代码的几部分传递到另一个部分。它必须在进入时为过程的局部变量分配空间,并在退出时释放这些空间。IA32只提供转移控制到过程和从过程转移出这样简单的指令。数据传输、局部变量的分配和释放通过操纵程序栈来实现。

IA32程序用程序栈来支持过程调用。为单个过程分配的那部分栈称为帧栈。寄存器%ebp为帧栈指针。

程序的机器级表示_第6张图片

假设过程P(调用者)调用过程Q(被调用者),则Q的参数放在P的帧栈中。另外当P调用Q时,P中的返回地址被压入栈中,形成P的栈帧末尾。Q的栈帧从保存P帧指针的值开始,后面是保存的其他寄存器的值。

在调用过程中,第一个参数放在相对于%ebp偏移量为8的位置处。

过程调用和返回指令:

程序的机器级表示_第7张图片

call指令的效果是:返回地址入栈,并跳转到被调用过程的起始处。返回地址是紧跟call后面的那条指令的地址。

IA32 CPU规定,寄存器%eax、%edx、%ecx被划分为调用者保存寄存器。寄存器%ebx、%esi、%edi被划分为被调用者保存寄存器。

7.数组与指针的计算列表:

程序的机器级表示_第8张图片

你可能感兴趣的:(编程基础)