VC++のインラインアセンブラとgccのインラインアセンブラとではかなり違うので大変でした
なお、私はアセンブリはよくわかりません。
- 私の環境
- WinXPSP3
- CeleronM
- VC++2010
- MinGW 20101030のやつ
- VC++
-
__asm add esp,n
- インテル記法
- Cの変数をそのままかける
- gcc
-
__asm__("addl _n,%esp");
- AT&T記法
- インテル記法と順番が逆
- レジスタの前に%
- 命令でb,w,lのようにサイズを指定
- グローバル変数なら_を付けて使える
- 自動変数は-4(%ebp)みたいに参照できるらしいんだけど私の環境ではできなかった
- 関数を呼び出すときに*が必要なときがある
スタックに値を積んだ後Cのほうで関数を呼ぶとスタックが消えるっぽい
これのグローバル変数や自動変数のサンプルがなぜか使えませんでした。
自動変数の参照は拡張機能でやることにしました。