gpt4 book ai didi

C++ 内联汇编错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:08 25 4
gpt4 key购买 nike

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

部分代码如下:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com