我正在尝试使用内联汇编,但收到错误..
这是部分代码:
char * buffer = new char[10];
__asm {
mov ecx,&buffer
mov edx,07
}
以及错误;
Error 1 error C2400: inline assembler syntax error in 'second operand'; found 'AND'
我做错了什么?
最佳答案
这完全取决于您想要实现的目标。
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 Assembly Language Reference Manual
Operators
The assembler supports the following operators for use in expressions.
...
& Bitwise logical AND
此后手册中从未提及&
。
关于C++ 内联汇编错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11529659/