インライン アセンブリを使用しようとしていますが、エラーが発生します。
コードの一部を次に示します。
char * buffer = new char[10];
__asm {
mov ecx,&buffer
mov edx,07
}
そしてエラー。
エラー 1 エラー C2400: '2 番目のオペランド' にインライン アセンブラー構文エラーがあります。「AND」が見つかりました
私が間違っていることは何ですか?
インライン アセンブリを使用しようとしていますが、エラーが発生します。
コードの一部を次に示します。
char * buffer = new char[10];
__asm {
mov ecx,&buffer
mov edx,07
}
そしてエラー。
エラー 1 エラー C2400: '2 番目のオペランド' にインライン アセンブラー構文エラーがあります。「AND」が見つかりました
私が間違っていることは何ですか?
それはすべてあなたが達成しようとしていることに依存します。
1.割り当てられたchar
アレイのアドレスをにロードしようとしている場合ecx
の値buffer
は、に必要なアドレスですecx
。0x004F5A42
これは(たとえば)メモリ内の配列のアドレスのようなものなので、asmコードにアタッチするchar
理由はありません。ポインタ自体のアドレスであり、メモリ内では配列からメガバイト離れている可能性があります。&
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アセンブリ言語リファレンスマニュアルから引用したものです。
演算子
アセンブラは、式で使用するために次の演算子をサポートしています。
..。
&ビットごとの論理積
その後&
、マニュアルに記載されることはありません。