我正在尝试使用内联汇编但我收到错误..
以下是代码的一部分:
char * buffer = new char[10];
__asm {
mov ecx,&buffer
mov edx,07
}
错误;
错误1错误C2400:第二个内联汇编语法错误 操作数“;发现'AND'
我做错了什么?
答案 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
之后手册中从未提及&
。