- ベストアンサー
アセンブリ言語について
アセンブリ言語の勉強をしたいと思っています。 例えば、CやJava,などはコンパイラを使ってコンパイルをしますよねぇ。同じようにアセンブり言語にもアセンブラというものがあるのでしょうか? フリーでそのようなアセンブラ(コンパイラ?)があるのなら教えてくれないでしょうか?できれば、AT互換のアセンブリ言語の仕様書が書かれているサイトでもあれば教えてください。(できれば、日本語で・・・) それと アセンブラ言語を高水準言語と比較した場合の利点について教えてください。 色々とすいません。どうかよろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
WindowsやMacintosh,UNIX上でアセンブラを使うことはほとんど無くなりました。 少し前までは「デバイスドライバを書くならアセンブラは必須」だったのですが、現在ではデバイスドライバすら高級言語で記述できるようになっています。 また、一部のRISCではアセンブラを公開していない場合もあります。 (RISCでは最適化が必須であり、人手による最適化が不可能なほど高度な最適化が必要な場合があるから) ターゲット環境がx86系CPU+Windowsであると仮定してMicrosoftご本家のDDK(Driver Development Kit)がフリーかされているのでご紹介します、 DDKはMASMを含むパッケージで27MByteほどあります。 もうひとつの参考URLはMASMプログラミングも扱っているページです。
その他の回答 (7)
個人のサイトですが.以下のサイトが参考になるでしょう。 ただ.「日本語で」は少ないと思います(MS-dos・PC9801時代ならばいくらでもありました)。 >利点について教えてください。 ハードが対応できれば不可能な事はない. ことでしょうか。その代わり高級言語に比べて開発コストが以上に高くなります。 Windowsでのアセンブラ使用ですが.「OSのきまりを守って使用する」ことができれば比較的簡単に作ります。しかし.「きまり」の内容がはっきりしていない(現時点でマイクロソフトのサイトで見つけられませんでした)ので.たとえば.1タスク異常終了時の復旧の仕方に間違いがあると.異常に暴走しやすくなります。 (本来のOSならばアセンブラがどのように操作しようともシステムに影響しないという原則が守られているはずです。しかし.Windowsでは.システムをユーザーが直接操作できる(しないと動かないのかも)ので.暴走しやすい蛍光があります)。 プログラム作成環境とプログラム実行環境はできれば分離してください。実行環境を作成環境から遠隔操作するように考えてください。又.実行環境は簡単に復旧ができるようにしてください。
- terra5
- ベストアンサー率34% (574/1662)
最大の利点はCPUの命令を直接記述できることでしょう。 高級言語では実現できないことがありますので、 OSの記述と言ったレベルでは必須になります。 また、通常コンパイラを使ったものより、プログラムサイズ(実行ファイルの大きさ)がはるかに小さくできます。 ただ実行速度に関しては一般的には速いですが,RISC系のCPUの場合はコンパイラに勝つのは かなり大変らしいです。 AT互換のアセンブリ言語の仕様書というのは存在しないと思います。 CPUによって決まる部分は共通と思いますが, 言語そのものはアセンブラによって決まりますので。 CPUも物によって違いますが,結局は80386あたりからの互換CPUですので大差ないでしょう。 当然CPUによって使える命令に違いがありますが。 また、アセンブラで記述したからといって、それが直ぐに作法違反になるわけではありません。 コンパイラの出すコードはアセンブラで記述可能ですし, 実際にCコンパイラ等は一旦アセンブラのソースを出力してアセンブルさせる物もあります。 勉強ということなら、エミュレータを使うのがいいかと思います。 プログラミングのためには,CPU,実行マシン、OS等の知識が必要になりますから、 なるべく規模の小さい物の法が覚えやすいと思いますので。
- Pesuko
- ベストアンサー率30% (2017/6702)
アセンブラは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)
>フリーのコンパイラ http://computers.yahoo.co.jp/ で フリーソフト&シェアウェア の下に『アセンブラ』で検索すると 沢山出てきます。 参考になれば幸いです
- g_dori
- ベストアンサー率47% (330/699)
あまりプログラミングは深く関わっていないので、参考にならないかもしれませんが・・・ とりあえず、一番簡単なのはVC++のインラインアセンブラじゃないでしょうか? VC++をお持ちでしたら、asm__{}で括るだけです。 他はVC++で作れますので、ソースがなくてもすぐ始められると思います。 利点は・・・パソコンの仕組みが理解できる、高水準言語の無駄に気が付くようになる、とかじゃないですかね・・? 最近の高速マシンでは高速化もヘチマも無いような気もしますが、やって損はないと思いますよ。 メモリの遅さに愕然とすると思います。 こんなんで参考になりますでしょうか・・?
- mod2000
- ベストアンサー率23% (16/68)
現在のアセンブリ言語の勉強方法は知りません。 情報処理試験上のアセンブラは今でもあると思いますが 定かでは有りません。 すいません。何せアセンブリを組んだのは20年前なんで・・・ アセンブリ言語は機械語(マシン語)とほぼ1対1に対応する命令部(ADDやLOADなど)と、アドレスやデータ・数値を組み合わせた構成になっています。 アセンブリ言語を実行可能な機械語に変換すのがアセンブラーです。 アセンブリ言語の利点は、他の言語に比べプログラムサイズを小さく出来る点と実行速度が比較的速いと言う点です。 以前、人工衛星の追尾システムを手掛けた友人もアセンブラを使っていました。 今はどうだか? 当時、なんでアセンブラと聞くと マシンスペックを限界近くまで出したいからと言ってました。 すいませんです。決定的な事を書けなくて・・・ 概念だけでも参考にして下さい。
- hazenoki
- ベストアンサー率33% (21/62)
私もアセンブリ言語については、ぜんぜん、くわしくないのですが、 google でちょっと検索したら、以下のようなページがでてきました。 http://www.geocities.co.jp/SiliconValley/9979/asmhead.html NASM というフリーのアセンブラーの説明もありました。 参考にして下さい。