有没有办法告诉MSVC编译器在短时间内不修改某个寄存器?比如,在一个小循环内,告诉它不要使用ebx寄存器(它可以使用任何其他寄存器)。在这种情况下,推送和弹出寄存器不起作用,因为MSVC会在我弹回后自动重新排列代码以修改寄存器 - 它必须在那里看到某种优化。
答案 0 :(得分:-1)
我认为你不能指示编译器不要使用ebx。但是,听起来ebx在程序中的某个地方被设置为某个值(可能是您调用的函数的函数返回值的一部分),并且您希望在程序中的某个其他位置可以使用ebx中的此值,也许在此之前你要打电话的另一个功能。那么以下可能是一种可能性:
myFuncA(...); // returns something in ebx
__asm push ebx
....
.... // C code
....
__asm pop ebx
myFuncB(); // wants something in ebx
注意:myFuncB()可能没有参数,否则编译器可以使用ebx来获取和推送参数;如果它有参数,你可能必须在asm中编写整个函数调用。