2012-06-05 142 views
0

Borland C具有伪寄存器_AX,_BX,_FLAGS等,可用于'C'代码以将寄存器保存为临时变量。MSVC中的伪寄存器

是否有任何MSVC等效?我试过@AX,@BX等,但是编译器(MSVC1.5)给出错误('40'无法识别的符号)。

我正在开发一个16位预启动应用程序,无法使用。 谢谢。

+0

如果您不知道......当使用内联汇编时,1.x版本的MSC非常古怪。如果您看到奇怪的错误,请查看编译器的汇编输出。内联汇编中的某些内容将禁用整个C/CPP文件中的代码的优化器。 – JimR

回答

1

如果您只是在寄存器和变量之间移动值,则不需要伪寄存器。例如:

int a = 4; 
int b = 999; 
__asm 
{ 
    mov eax, a; // eax equals to 4 
    mov b, eax; // b equals to eax 
} 
// b equals to 4 now 

编辑:这些标志复制到一个变量,并回到标志再次,你可以使用LAHFSAHF说明。例如:

int flags = 0; 
__asm 
{ 
    lahf; 
    mov flags, eax; 
} 
flags |= (1 << 3); 
__asm 
{ 
    mov eax, flags; 
    sahf; 
    // 4th bit of the flag is set 
} 
+0

谢谢。什么是_FLAGS的MSVC等价物? – sawdust

+0

太棒了!非常感谢。 – sawdust