2

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

这是代码的一部分:

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

以及错误;

错误 1 ​​错误 C2400:“第二个操作数”中的内联汇编器语法错误;找到“和”

我做错了什么?

4

1 回答 1

3

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

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

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

2.如果您尝试将地址加载bufferecx

你应该试试这个:

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

这种变通方法的原因是,看起来,角色&仅保留给 AND 运算符。以下引用摘自x86 汇编语言参考手册

运营商

汇编器支持在表达式中使用以下运算符。

...

& 按位逻辑与

此后&从未在手册中提及。

于 2012-07-17T20:02:42.207 回答