みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

組み込みアセンブラとは何ですか?

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

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

投稿日時 - 2009-06-14 22:59:07

QNo.5044473

困ってます

質問者が選んだベストアンサー

>私の勘違いで「組み込みアセンブラ」ではなく「組み込み関数」だったようです。
>組み込み関数とは一体なんなのでしょうか?今まで使った記憶がありません。ネットで検索しても何が組み込み関数なのかわかりませんでした。ご存知であればご教授お願いします。

この場合は、コンパイラ自体の仕様として持っている関数を指していると思います。普通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

投稿日時 - 2009-06-16 00:19:34

お礼

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

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

投稿日時 - 2009-06-16 01:48:48

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

zwi

>インラインを使ったからといって最適化されることはあるのでしょうか?
サイトを発見できませんでしたが、インライン時は最適化されるはずです。

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

投稿日時 - 2009-06-15 11:09:42

補足

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

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

投稿日時 - 2009-06-15 22:54:22

ANo.3

zwi

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

投稿日時 - 2009-06-15 00:35:00

補足

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

投稿日時 - 2009-06-15 00:50:45

ANo.2

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

投稿日時 - 2009-06-15 00:15:56

お礼

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

投稿日時 - 2009-06-15 22:36:53

ANo.1

モジュールはマシンコードになっていて、これはブラックボックスになっているのが普通です。ですからいじることはできません。ところがインラインアセンブラだとこれはアセンブラを習得していれば改変することができます。組み込みアセンブラはこれを指すものと思われます。

投稿日時 - 2009-06-14 23:09:04

補足

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

投稿日時 - 2009-06-14 23:50:40

お礼

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

投稿日時 - 2009-06-15 22:35:38

あなたにオススメの質問