- ベストアンサー
組み込みアセンブラとは?
- 組み込みアセンブラは何なのか?C言語でアセンブラを使う方法との違いは?
- 組み込みアセンブラは、C言語から利用する際にインラインアセンブラよりも優れているとされています。
- 組み込みアセンブラはモジュールとして使われるものであり、アセンブラ言語モジュール(オブジェクトファイル)をCプログラムとリンクすることで利用します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>私の勘違いで「組み込みアセンブラ」ではなく「組み込み関数」だったようです。 >組み込み関数とは一体なんなのでしょうか?今まで使った記憶がありません。ネットで検索しても何が組み込み関数なのかわかりませんでした。ご存知であればご教授お願いします。 この場合は、コンパイラ自体の仕様として持っている関数を指していると思います。普通C言語の標準関数はリンク時に結合するライブラリであってC言語自身のコンパイラの仕様としては組み込まれていません。組み込み関数はC言語コンパイラ自体がコードとして関数をOBJに出力します。どう組み込まれているかは言語環境(VC++なのかgccなのか)によって違います。 VC++の組み込み関数。 http://msdn.microsoft.com/fr-fr/library/w5405h95(en-us,vs.80).aspx >あと、もう一つ気になってしまったことがアセンブル言語のひとつひとつの命令の速度です。使っているCPUによって速度は違うと思いますが、目安的に各ニーモニックの速度の比較の資料はあるのでしょうか? CPUの資料として公開はされていると思います。ただし、その命令実行サイクルはCPUの種類毎に違うのは当たり前として、命令パイプラインで多段ステージで実行されますので、同じ命令でも1クロックで終わる場合もあるし、数クロックかかる場合も出てきます。さらに命令キャッシュがあるので、キャッシュされているかどうかでも速度がかなり違います。なので正確に測るのは難しいというか意味が無いかもしれません。 [命令パイプライン] http://ja.wikipedia.org/wiki/%E5%91%BD%E4%BB%A4%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3 ここはかなり複雑なのでCPUアーキテクチャのコラムから拾い読みしてください。 http://journal.mycom.co.jp/column/architecture/index.html 最後にプロセッサの資料を添えて起きます。 [Intel® Core™2 Duoプロセッサの資料(英語)] http://www.intel.com/products/processor/manuals/index.htm 最適化を紹介してるこのマニュアルあたりだと思うんだけど英語な上に複雑すぎて挫折。 http://www.intel.com/Assets/PDF/manual/248966.pdf
その他の回答 (4)
- zwi
- ベストアンサー率56% (730/1282)
>インラインを使ったからといって最適化されることはあるのでしょうか? サイトを発見できませんでしたが、インライン時は最適化されるはずです。 補足としてx64で使う場合はインラインアセンブラ自体が使えなくなっていますので、将来を考えたらアセンブラソースで別オブジェクトとして組むしかないです。
補足
回答ありがとうございます。 x64でインラインアセンブラが使えないということは耳にしていました。これからのことを考えるとオブジェクトとして実装したほうが良いですね。 それでx64でプログラムする方法をもう一度調べたところ。「組み込み関数」という記述がありました。 私の勘違いで「組み込みアセンブラ」ではなく「組み込み関数」だったようです。 組み込み関数とは一体なんなのでしょうか?今まで使った記憶がありません。ネットで検索しても何が組み込み関数なのかわかりませんでした。 ご存知であればご教授お願いします。 あと、もう一つ気になってしまったことがアセンブル言語のひとつひとつの命令の速度です。使っているCPUによって速度は違うと思いますが、目安的に各ニーモニックの速度の比較の資料はあるのでしょうか? もし、自分で計測する場合、どの様な方法で正確に調べることができるでしょうか。 ご存知であればご教授お願いします。
- zwi
- ベストアンサー率56% (730/1282)
お求めの答えはこれかと。 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0205ij/Chdcbgdh.html 最適化とかオブジェクトの扱いとか色々差が有るようです。 上記の例はARM系CPUのコンパイラですが、x86系でこの機能を持つC言語コンパイラは残念ながら存じません。
補足
組み込みアセンブラとはオブジェトを作ってそれをCのオブジェクトと結合する方法ということなんですね。 Visual StudioでCのプログラミングする場合、自分はアセンブラは別のモジュールにして作りたいのですが、その場合インラインを使う場合とそれほど変わらないということですかね? インラインを使ったからといって最適化されることはあるのでしょうか?
- notnot
- ベストアンサー率47% (4900/10358)
組み込みアセンブラ、組み込みCとかは、パソコンやサーバーコンピュータ上でなくて、携帯電話とか、ビデオデッキとか、冷蔵庫とか、車とかに搭載されたCPU上で動くプログラムのことです。 組み込みLinuxというのもありますね。
お礼
回答ありがとうございます。 私が見たのはパソコンのことじゃなかったのかもしれませんね。
- Willyt
- ベストアンサー率25% (2858/11131)
モジュールはマシンコードになっていて、これはブラックボックスになっているのが普通です。ですからいじることはできません。ところがインラインアセンブラだとこれはアセンブラを習得していれば改変することができます。組み込みアセンブラはこれを指すものと思われます。
お礼
回答ありがとうございました!
補足
モジュールはアセンブラで書いて自分で作るので弄れますよ? インラインアセンブラで作ったとしてもコンパイルして実行ファイルを作れば逆アセンブラしない限り可変できないのではないでしょうか?
お礼
丁寧な回答ありがとうございます。 組み込み関数いろいろ用意されているんですね。余裕が出てきたら勉強しようと思います。 組み込み関数も当然最終的にはアセンブラを生成すると思うので、アセンブラの理解をしっかりしたいと思います。 とても良い資料ありがとうございます。 同じ命令でも違うということ初めて知りました。しっかり読んで最適化されたコードを書けるようになりたいです。 まだまだ先は遠いですが、がんばります。