我正在尝试使用内联汇编,但我收到错误..
这是代码的一部分:
char * buffer = new char[10];
__asm {
mov ecx,&buffer
mov edx,07
}
以及错误;
错误 1 错误 C2400:“第二个操作数”中的内联汇编器语法错误;找到“和”
我做错了什么?
我正在尝试使用内联汇编,但我收到错误..
这是代码的一部分:
char * buffer = new char[10];
__asm {
mov ecx,&buffer
mov edx,07
}
以及错误;
错误 1 错误 C2400:“第二个操作数”中的内联汇编器语法错误;找到“和”
我做错了什么?
这完全取决于您要达到的目标。
1.如果您尝试将分配的char
数组的地址加载到ecx
的值buffer
已经是您需要的地址ecx
。它类似于0x004F5A42
(例如)它是char
内存中数组的地址,因此没有理由&
附加到buffer
您的 asm 代码中。&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 汇编语言参考手册
运营商
汇编器支持在表达式中使用以下运算符。
...
& 按位逻辑与
此后&
从未在手册中提及。