- 締切済み
VC++2010expressのアセンブラについて
下記の2個のファイルを持つプログラムでインラインアセンブラのcall命令で配列変数の1部が消滅する原因を教えてください。 main.cpp int *disp; int data[2]; WinMain() { _asm mov disp,offset disp_top ・ ・ ・ メッセージループへ _asm{ disp_top: 下記move()からcallされた時、ここの時点でdata[0]の内容が消滅している。data[1]の内容は1のまま存在する。 ・ ・ ・ ret } } move.cpp extern int *disp; extern int data[2]; void move() { data[0]=1; data[1]=1; _asm{ call disp callから復帰した、ここの時点ではdata[0]の内容は1で復帰している。 } }
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
回答No.5
お礼
レジスタの保存は試しましたが効果はありませんでした。 と言うより、アセンブラーの記述が殆どで関数呼び出しはごく一部になります。 >・インライン展開の対象にしてはならない。 >・呼び出し規約を__fastcallにしてはならない。 この回答は参考になりました。 また、「実際にインラインアセンブラを使用する時には」についても情報ありがとうございました。