**アセンブリ言語 [#y2e7d5fc]
#contents
#br

**はじめに [#h97e9c50]
あせんぶらぶら。現在、アセンブラを使わなければならないという状況はあまりない。~
だが、最適化のためとか、Revesingのためとかカーネル作る状況ではやっぱり必要なんじゃなぁ〜い?~
ということで、まとめておく。
コマンドプロンプトでdebugと入力するとアセンブリモードになってウマー
メモリも操れる。AX最強!

ただ、一言にアセンブリ言語といっても、CPU(MPU)によって違ったり、それこそ構文のまったく違う
アセンブラがいっぱいあるので、それぞれ別に解説ページをつくることにしよう。

基本的なことについてはCPUの成り立ちとかそういう感じのページをあとで誰かが作ってくれるよ!きっと。

**アセンブリ言語一覧 [#o16ecac9]
***[[NASM>./nasm]] (Netwide Assembler) [#g0d985bf]
-x86向けのアセンブラ。16ビット,32ビットどっちも可能。
-ELFとかa.out形式だとかいろんなフォーマットで出力出きるので便利、生の機械語も出力できたりするので、OSとかの開発にも使える。
-Intel構文。ライセンスはいろいろあってLGPL

***[[MASM>./masm]] [#x993bca2]
-Microsoftがx86, Windowsのために作ったアセンブラ。
-フリーソフト
-Intel構文
-WindowsでReversingするなら必須。
-VC++でMASM:VC++2005EEなら - [[Microsoft Macro Assembler 8.0 (MASM) パッケージ (x86 用):http://www.microsoft.com/downloads/details.aspx?FamilyID=7A1C9DA0-0510-44A2-B042-7EF370530C64&displaylang=ja]] を入手。VC++2008EEでは不要
-VC++以外なら [[MASM32プロジェクト:http://www.movsd.com/]] の [[MASM32:http://www.masm32.com/]] を入手。

***[[TASM>./tasm]] [#h74ca6d4]
-Borlandが作っていたMASMと互換性の高いアセンブラ。x86向け

***[[gas>./gas]] (GNU Assembler) [#kccd4bf1]
-gccについてくる。x86向け
-GNU財団によるGNUによるGNUのためのアセンブラ。もちろんライセンスはGPL
-一部では構文がキモいとされるが、あくまでも主観的な話し。gcc -Sでの出力記法がこれなので、読めると便利。
-AT&T構文

***[[BASE-60>./base_60]] [#o2a38d0b]
-Z80用アセンブラ
-=とかが使えるちょいっと変り種

***[[Flasm>./flasm]] [#id51b6c4]
-世にも珍しいFlash(Action Script)用のアセンブラ兼逆アセンブラ。ただしこれ単体では実行ファイルが出力できないので、リソースの入ったswfを用意する必要がある。
-変数名がそのまま使われて、もれなくガベコレが付いてきたりする。
-現在のところActionScript2まで対応、3.0は3.0の中間言語が埋め込まれた状態で逆アセンブリされる。
-Intel構文

***[[NESASM>./nesasm]] [#o0368de1]
-ファミコン(6502)向けのアセンブラ。正確には、世界的に有名なNESイメージ(ファミコンエミュレータ用ROM形式)に出力するのであって、6502アセンブラではないし、そのままファミコンカートリッジに入れても動かない。
-CPUだけでなくてPPUとかAPUとか弄れて楽しい。
-Intel構文

#hr
他にもCOMPASSとかA86とかAtari Assembler Editorとかいろいろあって困りますね><

**基本的なこと [#efe6e240]

**参考リンク [#v4870e4f]
-コンピュータの基礎
--ITpro > selfup
---[[アセンブラで学ぶコンピュータ基礎のキソ:selfup:http://itpro.nikkeibp.co.jp/article/COLUMN/20070404/267378/?ST=techskill]]
---[[コンピュータの仕組み---目次:selfup:http://itpro.nikkeibp.co.jp/article/COLUMN/20061220/257441/?ST=techskill]]
//---[[コンピュータの基礎の基礎:selfup:http://itpro.nikkeibp.co.jp/article/lecture/20070419/268970/]]
---[[Part1 メモリー空間とは何か - コンピュータの基礎の基礎:selfup:http://itpro.nikkeibp.co.jp/article/lecture/20070824/280260/?ST=lecture]]
---[[CPUの基礎の基礎:selfup:http://itpro.nikkeibp.co.jp/article/lecture/20070419/268988/]]
---[[新人SEのための「プログラムが動く仕組み」---目次:selfup:http://itpro.nikkeibp.co.jp/article/COLUMN/20061208/256461/?ST=techskill]]
---[[【5分で覚えるIT基礎の基礎】ゼロから学ぶ2進数---目次:selfup:http://itpro.nikkeibp.co.jp/article/COLUMN/20061213/256852/?ST=techskill]]
---[[コンピュータにおける「データ表現」の基礎---目次:selfup:http://itpro.nikkeibp.co.jp/article/COLUMN/20061213/256817/?ST=techskill]]
--[[コンピュータ・アーキテクチャ [補足資料](CPUの高速化手法):http://laputa.cs.shinshu-u.ac.jp/~yizawa/CompArch/architecture/index.htm]] - 
信州大学工学部の講義資料。CPUの基本動作、(補足説明として)アセンブリ言語とマシン語
-[[目指せプログラマー! - x86系(8086系)アセンブラ入門:http://www5c.biglobe.ne.jp/~ecb/assembler/assembler00.html]] - アセンブラ・アセンブリ言語を初めて学ぶ方から中級者向け
-[[加速する日本人のアセンブラ離れ - スラッシュドット・ジャパン:http://slashdot.jp/developers/article.pl?sid=01/06/25/2032218]] - 2001年当時の議論
-[[Art of Assembly Language Programming and HLA by Randall Hyde:http://webster.cs.ucr.edu/AoA/Windows/index.html]] - DownLoad:AoA.chm or AoA.pdf
// MASMから移動
-[[C/C++/C#/Java/BasicプログラマのためのCASL II 入門講座:http://www.officedaytime.com/dcasl2/pguide/index.html]] - 超初心者向け
-[[東芝セミコンダクター社|東芝半導体e-learning:http://www.semicon.toshiba.co.jp/design_support/elearning/elearning/index.html]] - 超初心者向け.マイクロコンピュータの項を参照
-[[東芝セミコンダクター社|東芝半導体e-learning:http://www.semicon.toshiba.co.jp/design_support/elearning/elearning/index.html]] - 超初心者向け
-[[アセンブラでの高速化:http://hp.vector.co.jp/authors/VA003988/asm.htm]] - アセンブラを極めたい人へ
-[[Pentiumでの高速化:http://hp.vector.co.jp/authors/VA003988/asm1.htm]] - アセンブラを極めたい人へ
-[[AMD64での高速化:http://hp.vector.co.jp/authors/VA003988/asm2.htm]] - アセンブラを極めたい人へ
-[[ギコ猫でもわかるファミコンプログラミング:http://gikofami.fc2web.com/]] - NESASMというファミコンのエミュレータ用8ビットアセンブラについて解説しているサイト