プロが教えるわが家の防犯対策術!

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
}
}

A 回答 (1件)

空のプロジェクトにこの 2つのソースを突っ込んで動かしてみたけど, 手元では「pointer1とpointer2が異なる」というこ

とはないなぁ.
    • good
    • 0
この回答へのお礼

いつも回答ありがとうございます。
提示のソースは、不具合がこのような状況下で発生していると言う処理の流れ的なものに過ぎません。この程度のコードでは不具合は発生しないようです。
インラインアセンブラーを起用した大々的なプロジェクトで質問のような不具合を体験された方が居られましたら、解決策をご指導頂きたく質問をさせて頂きました。
また、一般的にこの不具合はこの点がかかわっているのではないかと言うポイントも期待しております。
VS2010は歴史も浅く、インラインアセンブラー起用の開発事例も少ないのでは無いかと思いますので、今後の情報に注意を払って参ります。
今後ともよろしくお願いします。

お礼日時:2011/05/23 16:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!