【 在 hgoldfish 的大作中提到: 】
: i386 的一些调用约定 (c, borland register, stdcall) 有要求函数保存 EAX, ECX, EDX. 其它的 EBX, ESI, EDI, EBP, ESP 这几个,如果被调用者要用到的话,需要自行保存。
: 个人感觉 borland register 的调用约定是比较合理的。其它的调用约定简直是丧心病狂也不知是怎么想出来的。既要求调用者保存 EAX, ECX, EDX 又不拿来传参数。这不是浪费宝贵的字节么。
: 8086 的话,也是 turbo c 比较合理,使用了 AX, DX, BX 进行传参。
: ...................
>既要求调用者保存 EAX, ECX, EDX
这是权责划分要求吧, 调用者保存, 函数内就不需要再做保存恢复的动作,减少函数书写的繁琐。
另外, 函数外面调用, 有时是不在乎这几个寄存器的数据会不会破坏,
因为也是最频繁使用的寄存器, 多用来中转或者中间计算,因此,也会常常省去保存的动作,以提高性能。
--
FROM 124.126.0.*