• ベストアンサー

アセンブリ言語について

アセンブリ言語の勉強をしたいと思っています。 例えば、CやJava,などはコンパイラを使ってコンパイルをしますよねぇ。同じようにアセンブり言語にもアセンブラというものがあるのでしょうか? フリーでそのようなアセンブラ(コンパイラ?)があるのなら教えてくれないでしょうか?できれば、AT互換のアセンブリ言語の仕様書が書かれているサイトでもあれば教えてください。(できれば、日本語で・・・) それと アセンブラ言語を高水準言語と比較した場合の利点について教えてください。 色々とすいません。どうかよろしくお願いします。

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

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.8

WindowsやMacintosh,UNIX上でアセンブラを使うことはほとんど無くなりました。 少し前までは「デバイスドライバを書くならアセンブラは必須」だったのですが、現在ではデバイスドライバすら高級言語で記述できるようになっています。 また、一部のRISCではアセンブラを公開していない場合もあります。 (RISCでは最適化が必須であり、人手による最適化が不可能なほど高度な最適化が必要な場合があるから) ターゲット環境がx86系CPU+Windowsであると仮定してMicrosoftご本家のDDK(Driver Development Kit)がフリーかされているのでご紹介します、 DDKはMASMを含むパッケージで27MByteほどあります。 もうひとつの参考URLはMASMプログラミングも扱っているページです。

参考URL:
http://www.microsoft.com/JAPAN/developer/winds/Ddk/ddk.htm,http://www.geocities.co.jp/SiliconValley-PaloAlto/5989/
全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

noname#21649
noname#21649
回答No.7

個人のサイトですが.以下のサイトが参考になるでしょう。 ただ.「日本語で」は少ないと思います(MS-dos・PC9801時代ならばいくらでもありました)。 >利点について教えてください。 ハードが対応できれば不可能な事はない. ことでしょうか。その代わり高級言語に比べて開発コストが以上に高くなります。 Windowsでのアセンブラ使用ですが.「OSのきまりを守って使用する」ことができれば比較的簡単に作ります。しかし.「きまり」の内容がはっきりしていない(現時点でマイクロソフトのサイトで見つけられませんでした)ので.たとえば.1タスク異常終了時の復旧の仕方に間違いがあると.異常に暴走しやすくなります。 (本来のOSならばアセンブラがどのように操作しようともシステムに影響しないという原則が守られているはずです。しかし.Windowsでは.システムをユーザーが直接操作できる(しないと動かないのかも)ので.暴走しやすい蛍光があります)。 プログラム作成環境とプログラム実行環境はできれば分離してください。実行環境を作成環境から遠隔操作するように考えてください。又.実行環境は簡単に復旧ができるようにしてください。

参考URL:
http://www.e-net.or.jp/user/missing-link/assembler/asmboard.html
全文を見る
すると、全ての回答が全文表示されます。
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.6

最大の利点はCPUの命令を直接記述できることでしょう。 高級言語では実現できないことがありますので、 OSの記述と言ったレベルでは必須になります。 また、通常コンパイラを使ったものより、プログラムサイズ(実行ファイルの大きさ)がはるかに小さくできます。 ただ実行速度に関しては一般的には速いですが,RISC系のCPUの場合はコンパイラに勝つのは かなり大変らしいです。 AT互換のアセンブリ言語の仕様書というのは存在しないと思います。 CPUによって決まる部分は共通と思いますが, 言語そのものはアセンブラによって決まりますので。 CPUも物によって違いますが,結局は80386あたりからの互換CPUですので大差ないでしょう。 当然CPUによって使える命令に違いがありますが。 また、アセンブラで記述したからといって、それが直ぐに作法違反になるわけではありません。 コンパイラの出すコードはアセンブラで記述可能ですし, 実際にCコンパイラ等は一旦アセンブラのソースを出力してアセンブルさせる物もあります。 勉強ということなら、エミュレータを使うのがいいかと思います。 プログラミングのためには,CPU,実行マシン、OS等の知識が必要になりますから、 なるべく規模の小さい物の法が覚えやすいと思いますので。

全文を見る
すると、全ての回答が全文表示されます。
  • Pesuko
  • ベストアンサー率30% (2017/6702)
回答No.5

アセンブラはCPUを直接操作しますから、WINDOWSのアプリとしてそのようなプログラムを作り、実行するとめちゃくちゃ御作法違反のプログラムになります(システムダウンする可能性大)。 またAT互換のアセンブラ、これもターゲットCPUが限定できないので無理だと思います。 アセンブラが流行っていたのはDOSの時代で、DOSのAPIが遅いので直接CPUを制御していました。 安いものではZ80(なつかしいなあ)用のZ-VISION等どうですか? 今でも、OSがほとんど無いシステムの組み込み用としては使われています。 http://www.systemload.com/

参考URL:
http://www.systemload.com/
全文を見る
すると、全ての回答が全文表示されます。
  • k_eba
  • ベストアンサー率39% (813/2055)
回答No.4

>フリーのコンパイラ http://computers.yahoo.co.jp/ で フリーソフト&シェアウェア の下に『アセンブラ』で検索すると 沢山出てきます。 参考になれば幸いです

全文を見る
すると、全ての回答が全文表示されます。
  • g_dori
  • ベストアンサー率47% (330/699)
回答No.3

あまりプログラミングは深く関わっていないので、参考にならないかもしれませんが・・・ とりあえず、一番簡単なのはVC++のインラインアセンブラじゃないでしょうか? VC++をお持ちでしたら、asm__{}で括るだけです。 他はVC++で作れますので、ソースがなくてもすぐ始められると思います。 利点は・・・パソコンの仕組みが理解できる、高水準言語の無駄に気が付くようになる、とかじゃないですかね・・? 最近の高速マシンでは高速化もヘチマも無いような気もしますが、やって損はないと思いますよ。 メモリの遅さに愕然とすると思います。 こんなんで参考になりますでしょうか・・?

全文を見る
すると、全ての回答が全文表示されます。
  • mod2000
  • ベストアンサー率23% (16/68)
回答No.2

現在のアセンブリ言語の勉強方法は知りません。 情報処理試験上のアセンブラは今でもあると思いますが 定かでは有りません。 すいません。何せアセンブリを組んだのは20年前なんで・・・ アセンブリ言語は機械語(マシン語)とほぼ1対1に対応する命令部(ADDやLOADなど)と、アドレスやデータ・数値を組み合わせた構成になっています。 アセンブリ言語を実行可能な機械語に変換すのがアセンブラーです。 アセンブリ言語の利点は、他の言語に比べプログラムサイズを小さく出来る点と実行速度が比較的速いと言う点です。 以前、人工衛星の追尾システムを手掛けた友人もアセンブラを使っていました。 今はどうだか? 当時、なんでアセンブラと聞くと マシンスペックを限界近くまで出したいからと言ってました。 すいませんです。決定的な事を書けなくて・・・ 概念だけでも参考にして下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • hazenoki
  • ベストアンサー率33% (21/62)
回答No.1

私もアセンブリ言語については、ぜんぜん、くわしくないのですが、 google でちょっと検索したら、以下のようなページがでてきました。 http://www.geocities.co.jp/SiliconValley/9979/asmhead.html NASM というフリーのアセンブラーの説明もありました。 参考にして下さい。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アセンブリ言語は原始プログラムですか?

    質問(1) アセンブリ言語というのは、 add $S1, $S2 みたいなやつですよね? wikipediaで「ソースコード(ソースプログラム、原始プログラム)」の注釈1,2を読むと、 注1:【機械語の命令に記述するアセンブリ言語(アセンブラ)が存在するが、このアセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通である。】 注2:【アセンブリ言語で書かれたプログラムはソースコードと呼ばれない】 と書かれてあります。 でも、 他の教材では アセンブリ言語で書かれたプログラム(原始プログラム) と書かれています。 どっちが正しいのでしょうか? 質問(2) 目的プログラム(オブジェクトプログラム)とは、 IT用語辞典によると 【オブジェクトプログラムとは、ソースプログラム(人間が認識できるプログラム言語で高水準言語など?)をコンパイラで機械語に翻訳したプログラムのことである】 とありますが、 ソースプログラムをコンパイラで翻訳するとアセンブリ言語になるんではないのですか? そのアセンブリ言語をアセンブラで翻訳して機械語になるのではないのでしょうか? どなたかご教授ください。 お願いします。

  • アセンブリ言語についてと言語の違いについて。

    高水準と低水準言語の違いは、まず、マシン語の2進数の羅列では分からないからアセンブリ言語が生まれ、 アセンブリ言語よりさらに人間が理解できる言語が、C言語やBASICなどでしょうか?教えていただけないでしょうか?合っていますでしょうか?

  • プログラム言語って何があるの?

    私、プログラム言語について調べています。 ウィキペディアをみてもたくさんあって、そこからまたリンクがたくさんあってどこでどのように区切っていいのか分かりません。そこで皆さんに質問したいのですが、プログラム言語はどのようなものがありますか? 大まかにプログラム言語の総称があってその次に (1)機械語(マシン語) (2)アセンブラ言語 高水準言語これの中に (3)インタプリタ言語 (4)コンパイラ言語がありますが、 (1)~(4)のそれぞれの詳細を教えてください。例:BASIC、C等 またこの枠に入らないプログラム言語がありましたら教えてください。 とってもマイナーなものでも構いません。出来ればURL欲しいです。 お願いします。m(_ _)m

  • 8080用のクロスコンパイラは、ないでしょうか。

    8080用のクロスコンパイラは、ないでしょうか。 TK-80シミュレーターにて、プログラム開発をしたいのですが、さすがにアセンブラはきついので、Cコンパイラを探しています。 フリーのソフトで、MS-WindowsかLinuxで動作するクロスコンパイラはないでしょうか。 (8080アセンブラを出力するCコンパイラ) 以前探したときは、(確か)C言語をZ80にコンパイルして、それをさらに8080用アセンブラに変換するのを見つけましたが、うまく動きませんでした。 何か情報をもらえるとありがたいです。 よろしくお願いします。

  • C言語をCPUに読み込ませるためには、 C言語か

    C言語をCPUに読み込ませるためには、 C言語からアセンブリ言語にコンパイルして、 アセンブリ言語からアセンブルして機械語2進数にしてCPUに読み込ませるという 2段階をしないといけないんですか? 下記の画像のように説明している動画がありました

  • アセンブリ言語について。

    >2進数の羅列では人間にはあまりに読み書きしにくいからです。 >それを命令単位に区切って、英単語を元にした名前を与えたのが、 >アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。 簡潔に要点がまとまっている、すばらしい説明ですね。その通りです。 これで理解できないなら、追加の説明のしようがありません。 (なお、このように、他人の発言は引用符を付けて引用すると、わかりやすくなります。是非そうしてください。) まあ具体例を挙げるならこんな感じ。 (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret 人間がCPUを直接動かすプログラムを書こうとするとき、アセンブリ言語を使って書きます(右側の部分)。 mov $0x616b6157,%eax push %ebx push %eax mov $0x4,%edx mov $0x1,%ebx mov $0x4,%eax mov %esp,%ecx int $0x80 pop %eax xor %eax,%eax pop %ebx ret そしてこれをアセンブルすると、1対1対応した機械語のデータ列が出来ます。 それが b8 57 61 6b 61 53 50 ba 04 00 00 00 bb 01 00 00 00 b8 04 00 00 00 89 e1 cd 80 58 31 c0 5b c3 この部分。 機械語には改行なんてありませんから、実際は一連の b8 57 61 6b 61 53 50 ba 04 00 00 00 bb 01 00 00 00 b8 04 00 00 00 89 e1 cd 80 58 31 c0 5b c3 と言うデータ列になります。 これをCPUが実行していきます。 相当熟練した人で無ければ、このデータ列を見るだけでプログラム構造を理解する、というわけに行きません。 なので、人間が機械語レベルでプログラミングする際には、アセンブリ言語を使います。 ※この回答のプログラムはこちらから引用しました。 >31バイトでつくるアセンブラプログラミング アセンブラ短歌の世界 >https://book.mynavi.jp/support/pc/4946/c01_assembra.pdf で、機械語データは、なぜ、0と 1だけではないのでしょうか?教えていただけないでしょうか?すみません。

  • コンパイル言語とインタープリター言語の違いについて

    コンパイルするプログラミング言語とインタープリターする プログラミング言語の違いについて教えてください。 特に、開発上および運営上の利点・欠点についてお願いします。 また、CGIでは、PHPやPERLなどのインタープリター言語が 主流ですが、その理由とC言語などで組むのと比較して、 どのような利点があるのか教えてください。

  • 組込みプログラム言語の容量・速さの比較

    組込みプログラム言語の容量・速さの比較 組込みプログラムで使用する言語には ・C(++) ・アセンブリ言語 ・JAVA ・(組込み用JAVAのJ2ME) ・(組込み用JAVAのKVM) がありますが、ターゲットデバイス(マイコンなど)へロードする ロードモジュールの状態でのサイズ(容量)は同じなのでしょうか。 違うのであればどれくらいの差があるのでしょうか。 私の予想では  アセンブリ言語 < C(++) < JAVA ですが、どれくらいの差があるのか想像がつきません。 また処理の速さは  アセンブリ言語 > C(++) > JAVA になるのでしょうか。

  • プログラミングについて。

    コンピュータは電圧の高い(H)と低い(L)を2進数としてCPUがクロック信号の入力を受けて処理します。 2進数はそのままだと扱いづらいので、数値的に親和性のある2のn乗進数を使います。 一般にコンピュータは1オクテットを1バイト、1ワードとしています。 その時16進数2桁で1バイトとなることから16進数表記が使われています。 なので、極論で言えば16進数2桁ではなく256進数1桁でも良かったという事です。 実は、大抵のアセンブリ言語は2進数表記を扱えます(8進数も使えるかも)。 アセンブラは16進数でも2進数でもそのまま対応するマシン語に置き換えていくものです。 アセンブリ言語とマシン語は一体一で対応しているので、実行ファイルがあれば、逆アセンブルで完全なアセンブリコードを復元出来ます。 マクロアセンブラの場合はマクロ命令までは再現されませんが、ここでは関係無いので割愛します。 つまり、マシン語とアセンブリ言語は本質的に全く同じものです。 単に、人間に読みやすく見せているものアセンブリ言語です。 マシン語もアセンブリ言語も低水準言語です。 高水準言語とは、C言語などのコンパイルを必要とするものや、BASICやJavaScriptのようにインタープリタを必要とするもののことです。 こちらは、CPUが直接解釈できるマシン語とは全く違う人間の都合に合わせた表現でコーディングし、後からマシン語に変換する仕組みのものです。 人間に読みやいコードをマシン語に変換するので、関係は一体一ではありません。 つまりコンパイルやインタープリットすると元の情報(ソースコード)は失われます。 で、① インタープリタとインタープリットとは何でしょうか?教えていただけないでしょうか?すみません。 ② マクロアセンブラの場合はなぜマクロ命令が再現されないのでしょうか?教えていただけないでしょうか?すみません。 ③ 実行ファイルがあれば、逆アセンブルで完全なアセンブリコードを復元出来ます。とはどういう事でしょうか?つまり、実行ファイルというのは、プログラマーが書いたソースコードのことでしょうか?教えていただけないでしょうか?すみません。 教えていただけないでしょうか?すみません。

  • C言語のコンパイラ設定について教えてください。

    猫でもわかるC言語のBorlandコンパイラをインストールしたのですが、参考書に載ってるとおりにソースを書いて実行したのですが、パスが設定されてないとかファイルが見つからないってでちゃうのです。つまりはコンパイルできないし、設定がちょっとわからないのです。 Borland社のコンパイラを使用したことがあり同じ経験を過去にお持ちの方いらっしゃいましたらアドバイスお願いします。また、JAVAの様な総合開発?できるみたいなフリーソフトがCでありましたらぜひぜひ教えてください。プロフェッショナルで、しかもこの様な質問も笑って答えていただけるようなすごい人、どうかよろしくお願いいたします。

女性のあの匂いは体臭?香水?
このQ&Aのポイント
  • 女性とすれ違った時に感じるあの匂いは一体何なのでしょうか?汗臭いような匂いはどうして男性にはないのでしょうか?ホルモンや月経の関係なのか、それとも香水などの要素が関係しているのか、気になります。
  • 女性が汗をかいた時に感じる特有な匂いについて知りたいです。男性にはない匂いなので、ホルモンや香水の影響なのか、それとも体調や月経の関係なのか気になります。
  • コンビニやエレベーターで女性とすれ違った時に感じるあの匂いは何なのでしょうか?ワキガとは違う匂いで、何日もお風呂に入っていない時の汗がこもったような匂いがします。ホルモンや香水、体調などが関係しているのか、興味があります。
回答を見る