2

インライン アセンブリを使用しようとしていますが、エラーが発生します。

コードの一部を次に示します。

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

そしてエラー。

エラー 1 エラー C2400: '2 番目のオペランド' にインライン アセンブラー構文エラーがあります。「AND」が見つかりました

私が間違っていることは何ですか?

4

1 に答える 1

3

それはすべてあなたが達成しようとしていることに依存します。

1.割り当てられたcharアレイのアドレスをにロードしようとしている場合ecx

の値bufferは、に必要なアドレスですecx0x004F5A42これは(たとえば)メモリ内の配列のアドレスのようなものなので、asmコードにアタッチするchar理由はありません。ポインタ自体のアドレスであり、メモリ内では配列からメガバイト離れている可能性があります。&buffer&bufferbufferchar

2.アドレスをにロードしようとしているbuffer場合ecx

あなたはおそらくこれを試してみるべきです:

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 に答える