アセンブリ言語†
はじめに†
あせんぶらぶら。現在、アセンブラを使わなければならないという状況はあまりない。
だが、最適化のためとか、Revesingのためとかカーネル作る状況ではやっぱり必要なんじゃなぁ〜い?
ということで、まとめておく。
ただ、一言にアセンブリ言語といっても、CPU(MPU)によって違ったり、それこそ構文のまったく違う
アセンブラがいっぱいあるので、それぞれ別に解説ページをつくることにしよう。
基本的なことについてはCPUの成り立ちとかそういう感じのページをあとで誰かが作ってくれるよ!きっと。
アセンブリ言語一覧†
NASM (Netwide Assembler)†
- x86向けのアセンブラ。16ビット,32ビットどっちも可能。
- ELFとかa.out形式だとかいろんなフォーマットで出力出きるので便利、生の機械語も出力できたりするので、OSとかの開発にも使える。
- Intel構文
MASM†
- Microsoftがx86, Windowsのために作ったアセンブラ
- Intel構文
TASM†
- Borlandが作っていたMASMと互換性の高いアセンブラ。x86向け
gas (GNU Assembler)†
- gccについてくる。x86向け
- GNU財団によるGNUによるGNUのためのアセンブラ。一部では構文がキモいとされるが、あくまでも主観的な話し。gcc -Sでの出力記法がこれなので、読めると便利。
- AT&T構文
Flasm†
- 世にも珍しいFlash(Action Script)用のアセンブラ兼逆アセンブラ。ただしこれ単体では実行ファイルが出力できないので、リソースの入ったswfを用意する必要がある。
- 変数名がそのまま使われて、もれなくガベコレが付いてきたりする。
- 現在のところActionScript2まで対応、3.0は3.0の中間言語が埋め込まれた状態で逆アセンブリされる。
- Intel構文
NESASM†
- ファミコン(6502)向けのアセンブラ。正確には、世界的に有名なNESイメージ(ファミコンエミュレータ用ROM形式)に出力するのであって、6502アセンブラではないし、そのままファミコンカートリッジに入れても動かない。
- CPUだけでなくてPPUとかAPUとか弄れて楽しい。
- Intel構文
BASE-60†