MSVC中的伪寄存器

时间:2012-06-05 04:28:43

标签: c visual-c++

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

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

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

1 个答案:

答案 0 :(得分: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
}