C ++内联汇编错误

时间:2012-07-17 19:36:56

标签: c++ visual-c++ assembly inline-assembly

我正在尝试使用内联汇编但我收到错误..

以下是代码的一部分:

char * buffer = new char[10];
__asm {
    mov ecx,&buffer
    mov edx,07
}

错误;

  

错误1错误C2400:第二个内联汇编语法错误   操作数“;发现'AND'

我做错了什么?

1 个答案:

答案 0 :(得分:3)

这完全取决于你想要达到的目标。

1。如果您尝试将已分配的char数组的地址加载到ecx

buffer的值已经是ecx所需的地址。它类似于0x004F5A42(仅作为示例),它是内存中char数组的地址,因此没有理由在您的asm代码中将&附加到buffer&buffer将是buffer指针本身的地址,其内存距离char数组可能是兆字节。

2。如果您尝试将buffer的地址加载到ecx

你应该试试这个:

char * buffer = new char[10];
char ** buffer_ptr = &buffer;
__asm {
    mov ecx,buffer_ptr
    mov edx,07
}

这种解决方法的原因在于,&的角色只能保留给AND运算符。以下引用取自x86 Assembly Language Reference Manual

  

<强>算

     

汇编程序支持以下运算符用于表达式。

     

...

     

&安培;按位逻辑AND

之后手册中从未提及&

相关问题