今天闲得没事继续想这个寄存器的事情。
不管 DOS 程序使用寄存器传参还是使用栈。在调用其它函数之前,如果不知道被调用函数是否使用寄存器,那调用者最好先把寄存器保存一下。既然是这样,那完全可以多用 fastcall 寄存器传参啊。
神奇的是为啥当年在 DOS 下 c 语言会选择那个 cdecl 调用约定。难道是只是为了实现 printf() ?
那么保存寄存器的时候,用 PUSHA 方便呢?还是一个个 PUSH 比较方便?可惜 PUSHA 是 80186 的指令,8086 不能用。
【 在 hgoldfish 的大作中提到: 】
: 每调一个函数都需要把自己使用到的寄存器保存到栈上,再调用函数。等函数返回后,还得把寄存器一个个从栈上弹出来。
: 这个开销挺大的,所以听说以前有个技巧是写超大的 main() 函数. 以减少函数的调用开销?
--
FROM 110.84.122.*