- 締切済み
C++とインラインアセンブラでのポインタ値が違う
C言語で取得した配列変数の先頭ポインターとインラインアセンブラで取得したポインターが異なる現象が起きました。 2個のソースファイルを持つ下記プログラムで、pointer1とpointer2が異なる原因を教えてください。 ただし、提示のソースはあくまで、見本で実際には多くの変数やコードを記述しています。 開発環境はWin7(64bit)、VC++2010無償版です。 main.cpp #include <windows.h> int *disp; int *pointer1; int *pointer2; int data[8]; void disp_sub(); int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) { _asm{ mov disp,offset disp_top call disp_sub jmp pgm_end disp_top: lea eax,data mov pointer1,eax } pointer2=&data[0]; if(pointer1 != pointer2)Beep(3000,1000); _asm ret pgm_end: return 0; } sub.cpp extern int *disp; void disp_sub() { _asm{ call disp } }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
お礼
いつも回答ありがとうございます。 提示のソースは、不具合がこのような状況下で発生していると言う処理の流れ的なものに過ぎません。この程度のコードでは不具合は発生しないようです。 インラインアセンブラーを起用した大々的なプロジェクトで質問のような不具合を体験された方が居られましたら、解決策をご指導頂きたく質問をさせて頂きました。 また、一般的にこの不具合はこの点がかかわっているのではないかと言うポイントも期待しております。 VS2010は歴史も浅く、インラインアセンブラー起用の開発事例も少ないのでは無いかと思いますので、今後の情報に注意を払って参ります。 今後ともよろしくお願いします。