程序的机器级表示<CSAPP>

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

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

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

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

3.数据传送指令

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

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

4.算术和逻辑操作

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

5.控制操作与条件码

常用条件码:

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

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

跳转指令:

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

6.过程

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

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

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

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

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

过程调用和返回指令:

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值