IAA32过程调用寄存器的保护规则

IA32架构中,寄存器在过程调用时需遵循保护规则,以防止数据错误。eax、edx和ecx为调用者保存寄存器,调用者负责保存其内容;ebx、edi和esi为被调用者保存寄存器,被调用者可能覆盖其内容,调用者需在调用前保存。esp和ebp分别作为栈顶和基址指针寄存器,也在过程调用中扮演关键角色。
摘要由CSDN通过智能技术生成

由于操作系统中的共享性质,所以,寄存器也就成为了各个进程或者过程共享资源的一种。那么发生过程 调用的时候,如果调用者要用到一个寄存器里面的值,但是这个寄存器的内容很可能在被调用者运行过程中修改,那么我们就要在被调用过程执行之前,对该寄存器里面的内容进行保护,以至于不会出错,寄存器的保护规则也是因为程序的不可再现性而存在的。


在IA32上,实行了一个统一的寄存器保护规则。首先,我们要看一下,计算机中有多少个比较重要的寄存器

(偷偷懒我就不写寄存器前面的百分号了O(∩_∩)O)

eax 这个寄存器属于调用者保存寄存器,通常用来存储一些函数的返回值

edx ecx这两个也是属于调用者保存寄存器,并且 属于通用寄存器,可以随意保存数据,没有 什么特定的 限制。

ebx edi esi这三个寄存器属于被调用者保存寄存器。通常来说edi 和 esi可能会保存一些被调用函数的参数。

这里要说明一下一个概念,就是我很疑惑的,什么叫做调用者保存寄存器,什么叫做被调用者保存寄存器。

两者的区别,我觉得可以用下面的图示来说明一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值