【发布时间】:2015-03-01 13:53:24
【问题描述】:
由于函数的调用约定规定了保留哪些寄存器,所以可以将寄存器用作循环计数器吗?
我一开始以为ecx寄存器是用来做循环计数器的,后来发现我用过的一个stdcall函数没有保留ecx的值,我又不以为然了。
是否有保证(至少通过最常用的调用约定)保留的寄存器?
注意:使用堆栈变量作为循环计数器没有问题,我只是想确保它是唯一的方法。
【问题讨论】:
-
你可以将
ecx压入堆栈并在ret之前恢复它,或者你可以使用另一个寄存器 -
push ecx在调用之前调用stdcall和pop ecx在调用返回之后,每次都通过循环。
标签: windows assembly nasm calling-convention