由于操作系统中的共享性质,所以,寄存器也就成为了各个进程或者过程共享资源的一种。那么发生过程 调用的时候,如果调用者要用到一个寄存器里面的值,但是这个寄存器的内容很可能在被调用者运行过程中修改,那么我们就要在被调用过程执行之前,对该寄存器里面的内容进行保护,以至于不会出错,寄存器的保护规则也是因为程序的不可再现性而存在的。
在IA32上,实行了一个统一的寄存器保护规则。首先,我们要看一下,计算机中有多少个比较重要的寄存器
(偷偷懒我就不写寄存器前面的百分号了O(∩_∩)O)
eax 这个寄存器属于调用者保存寄存器,通常用来存储一些函数的返回值
edx ecx这两个也是属于调用者保存寄存器,并且 属于通用寄存器,可以随意保存数据,没有 什么特定的 限制。
ebx edi esi这三个寄存器属于被调用者保存寄存器。通常来说edi 和 esi可能会保存一些被调用函数的参数。
这里要说明一下一个概念,就是我很疑惑的,什么叫做调用者保存寄存器,什么叫做被调用者保存寄存器。
两者的区别,我觉得可以用下面的图示来说明一下。