アプリ版:「スタンプのみでお礼する」機能のリリースについて

私はx86でアセンブラを勉強中ですが、ネットでアセンブラ関係のことを検索していて組み込みアセンブラという記述をを見ました。
C言語から利用する場合インラインアセンブラより良いとかなんとか。
組み込みアセンブラという名前も怪しく合っているかわかりません。
掲示板のようなところで組み込みアセンブラの方が良い、早いと書いてありました。いろいろ検索して見かけたのでどこの掲示板かもわかりません。後から探したのですが見つけることができませんでした。

そこで質問なのですがそのその組み込みアセンブラとは何なんでしょうか?
C言語からアセンブラを利用する場合、今読んでいる本「やさしいアセンブラ入門」にはインラインアセンブラとアセブラ言語モジュール(オブジェクトファイル)をCプログラムでリンクする方法の2種類が書いてありますが。組み込みアセンブラはモジュールで使うということでしょうか?
違うとすればどのような方法でアセンブラを利用することでしょうか?
わかる方教えてください。ヨロシクお願いします。

A 回答 (5件)

>私の勘違いで「組み込みアセンブラ」ではなく「組み込み関数」だったようです。


>組み込み関数とは一体なんなのでしょうか?今まで使った記憶がありません。ネットで検索しても何が組み込み関数なのかわかりませんでした。ご存知であればご教授お願いします。

この場合は、コンパイラ自体の仕様として持っている関数を指していると思います。普通C言語の標準関数はリンク時に結合するライブラリであってC言語自身のコンパイラの仕様としては組み込まれていません。組み込み関数はC言語コンパイラ自体がコードとして関数をOBJに出力します。どう組み込まれているかは言語環境(VC++なのかgccなのか)によって違います。
VC++の組み込み関数。
http://msdn.microsoft.com/fr-fr/library/w5405h95 …

>あと、もう一つ気になってしまったことがアセンブル言語のひとつひとつの命令の速度です。使っているCPUによって速度は違うと思いますが、目安的に各ニーモニックの速度の比較の資料はあるのでしょうか?

CPUの資料として公開はされていると思います。ただし、その命令実行サイクルはCPUの種類毎に違うのは当たり前として、命令パイプラインで多段ステージで実行されますので、同じ命令でも1クロックで終わる場合もあるし、数クロックかかる場合も出てきます。さらに命令キャッシュがあるので、キャッシュされているかどうかでも速度がかなり違います。なので正確に測るのは難しいというか意味が無いかもしれません。

[命令パイプライン]
http://ja.wikipedia.org/wiki/%E5%91%BD%E4%BB%A4% …
ここはかなり複雑なのでCPUアーキテクチャのコラムから拾い読みしてください。
http://journal.mycom.co.jp/column/architecture/i …

最後にプロセッサの資料を添えて起きます。
[Intel? Core?2 Duoプロセッサの資料(英語)]
http://www.intel.com/products/processor/manuals/ …
最適化を紹介してるこのマニュアルあたりだと思うんだけど英語な上に複雑すぎて挫折。
http://www.intel.com/Assets/PDF/manual/248966.pdf
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。
組み込み関数いろいろ用意されているんですね。余裕が出てきたら勉強しようと思います。
組み込み関数も当然最終的にはアセンブラを生成すると思うので、アセンブラの理解をしっかりしたいと思います。

とても良い資料ありがとうございます。
同じ命令でも違うということ初めて知りました。しっかり読んで最適化されたコードを書けるようになりたいです。
まだまだ先は遠いですが、がんばります。

お礼日時:2009/06/16 01:48

>インラインを使ったからといって最適化されることはあるのでしょうか?


サイトを発見できませんでしたが、インライン時は最適化されるはずです。

補足としてx64で使う場合はインラインアセンブラ自体が使えなくなっていますので、将来を考えたらアセンブラソースで別オブジェクトとして組むしかないです。

この回答への補足

回答ありがとうございます。
x64でインラインアセンブラが使えないということは耳にしていました。これからのことを考えるとオブジェクトとして実装したほうが良いですね。
それでx64でプログラムする方法をもう一度調べたところ。「組み込み関数」という記述がありました。
私の勘違いで「組み込みアセンブラ」ではなく「組み込み関数」だったようです。
組み込み関数とは一体なんなのでしょうか?今まで使った記憶がありません。ネットで検索しても何が組み込み関数なのかわかりませんでした。
ご存知であればご教授お願いします。

あと、もう一つ気になってしまったことがアセンブル言語のひとつひとつの命令の速度です。使っているCPUによって速度は違うと思いますが、目安的に各ニーモニックの速度の比較の資料はあるのでしょうか?
もし、自分で計測する場合、どの様な方法で正確に調べることができるでしょうか。
ご存知であればご教授お願いします。

補足日時:2009/06/15 22:54
    • good
    • 0

お求めの答えはこれかと。


http://infocenter.arm.com/help/index.jsp?topic=/ …
最適化とかオブジェクトの扱いとか色々差が有るようです。
上記の例はARM系CPUのコンパイラですが、x86系でこの機能を持つC言語コンパイラは残念ながら存じません。

この回答への補足

組み込みアセンブラとはオブジェトを作ってそれをCのオブジェクトと結合する方法ということなんですね。
Visual StudioでCのプログラミングする場合、自分はアセンブラは別のモジュールにして作りたいのですが、その場合インラインを使う場合とそれほど変わらないということですかね?
インラインを使ったからといって最適化されることはあるのでしょうか?

補足日時:2009/06/15 00:50
    • good
    • 0

組み込みアセンブラ、組み込みCとかは、パソコンやサーバーコンピュータ上でなくて、携帯電話とか、ビデオデッキとか、冷蔵庫とか、車とかに搭載されたCPU上で動くプログラムのことです。


組み込みLinuxというのもありますね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
私が見たのはパソコンのことじゃなかったのかもしれませんね。

お礼日時:2009/06/15 22:36

モジュールはマシンコードになっていて、これはブラックボックスになっているのが普通です。

ですからいじることはできません。ところがインラインアセンブラだとこれはアセンブラを習得していれば改変することができます。組み込みアセンブラはこれを指すものと思われます。

この回答への補足

モジュールはアセンブラで書いて自分で作るので弄れますよ?
インラインアセンブラで作ったとしてもコンパイルして実行ファイルを作れば逆アセンブラしない限り可変できないのではないでしょうか?

補足日時:2009/06/14 23:50
    • good
    • 0
この回答へのお礼

回答ありがとうございました!

お礼日時:2009/06/15 22:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!