掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
インラインアセンブラでの変数アドレス取得 (ID:61189)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
自分で勉強されるとの事ですが、蛇足など。 とりあえず VC++ (with ix86 clones) に話を限定。 とにかくコンパイラにリストファイルを作らせて読んでみるといいです。 コンパイラが何をどう取り扱っているのか、全てそこにあります。 ・自動変数は(レジスタ変数に最適化されない場合)スタックに取られる ・スタックに取られる=ESP 相対 (または EBP 相対) でアクセスする必要がある つまり [ESP+nn] や [EBP+mm] でアクセスする必要がある ・先の nn や mm が具体的にいくつかはコンパイル時に確定している ・実際に当該関数が呼ばれないと ESP や EBP の値はわからない ことから、自動変数 a のアドレスは LEA EBX, [ESP+16] のように求めます。 コンパイラの最適化によって ESP を使うか EBP を使うかがが変わり 自動変数の量や定義順などによって +16 などの数値が変わることから LEA EBX, [a] とだけ書いておけば、コンパイラが勝手に [a] の部分を [ESP+16] や [EBP-24] のように直してくれます。 この辺を判りやすく(正確さを欠いても)説明した文書ってなかなかないなぁ。 64bit 文書なら http://msdn2.microsoft.com/ja-jp/library/ew5tede7(VS.80).aspx 68000 系でもよければ http://hata.cc/docs/software-guide/2-5-2.html
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.