fc2ブログ

インラインアセンブラ in Eclipse

Eclipseでインラインアセンブラを試し撃ちしました。
環境は、Intelのx86系CPUなので
そちら寄りになりますが。

内容は、
iを1回左シフトして
5を加算したものです。

実引数から値をコピーして表示させる関数がcopyです。

inlineAsm.png

結果
inlineAsm3.png


元はgccコンパイラなので使えますね^^

構造は、
asm(" ニーモニック  オペランド1,オペランド2 ");
定数は$を付ける。変数は%をつけること。
NASM系と違ってて、
movlならば、オペランド1をオペランド2へ格納する。
といった、反対方向に注意してくだしあ。


ただ、オフセット記述-4(%ebp)とかいうフレームポインタを使わないと
asm()関数内で意味不明な宣言をしていますと、
叱られます。

ebp-4、ebp-8・・とな順で自動変数が確保されていくんでしょう。
ちなみに、インタプリタ言語のように
上から領域の確保がされていくので注意を。

なぜ?4の倍数なのってかんじですかな
これは、整数のデータ型Intが4byteの領域を必要とするからですな~。

char型は1byte、short型は2byteです。
この概念は重要だね。


Eclipseで打つならば、

1.ライブラリcomdlg32をインクルード(一応)
2.処理系を教える

の設定が必要かな。

comdlg32については、リソーススクリプトの回で説明しました。

後は、32bit系のCPU命令を使うということを教えてあげてね!
inlineAsm2.png
※GCCでは64bitは用意されていない。64bitのOSでも下位互換で32bitは使えるはずですので
もちのろん、64bitOSで32bitシステムは動きます。

コンパイラに最適化されて文法の位置が変わることがありますが、
アセンブラとしては、変えたくないこともあります。

そんなときは

asm volatile()が使えますね!

volatile修飾子は、最適化を行わせないのです。
アドレスを受け取って、逐一調べさせるには、もってこいですな
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

ぶろぐかんりしゃ

SmartWoods
最近MoEは・・・
一休み

***** ひとこと *****

MoEの後継ともいわれる
Resonance gamez
完全スキルMMOが
気になるところ



********************


↓2016/3/26更新
My MoE









**********

NEWとらっくばっく
あーかいぶ
かてごりー
リンク
ぶろぐないけんさく
RSSふぃーど
おともだちになろ

この人とブロともになる