概要
- Assembly language
- コンピュータの機械語命令と一対一に対応するニーモニックを規定したプログラム言語。
- Assembly
- 通常はAssembly language(アセンブリ言語)の略記表現です。
- Assembler
- Assemblyを実行可能形式にする処理系の事です。コンパイル言語に対するコンパイラに対応します。
- Assemble
- Assemblyを機械語にする事。Assembly languageで記述したソースを実行可能なバイナリ形式にする事。コンパイル言語に対するコンパイルに対応します。用例:Hand Assemble。
Webを検索するとこれらの単語をまぜて利用している人がいます。悪質なのだと翻訳文章でAssemblyという部分をアセンブラなんて訳してる人までいる始末です。。。
Assembleは動詞でこの名詞表現がAssemblyであり、Assemblyするための物がAssemblerなので、英語文献では非常に厳密にわけて利用されています(あたりまえ)。
単語の意味はできれば正確に利用した方がいいでしょう。
~erは~するための物、~を目的とする物という意味です。Battlerとだと闘うための物って意味になるように。。。
仕様文章
http://www.mot.co.jp/SPS/html/lit/pdf/MPCFPE32BJ_R0.pdf
/Developer/Documentation/DeveloperTools/Assembler
学習用ツール
通常は
gcc -S test.c
で吐き出されるコードを読むのがよい。ただし、これはgas形式となります。
Code Warrior-style を好むなら以下で出力されます。
gcc -fasm-blocks -S test.c
入門Assembly
あくまでもCを知っている前提です。とりあえずCからAssemblyを学ぶ方が得策だと判断しました。
初めてのAssembly
#include <stdio.h> int main(void) { printf("Hello World!\n"); return 0; }
これをhello.cの名前で保存する。
Terminalより
cc hello.c ./a.out
で動作を確認
cc -S hello.c
するとhello.sというファイルが作成される。
最近のコンパイラは小手先の最適化なぞほとんど無意味だというのが結構わかったりします。
読みやすく、ISO/ANSIの規約正確な記述のほうがよりよいでしょう。またISO/ANSIの規約に正確なほうが最適化率が高かったりします。ちゃんと検証してから物事をやりましょう。
さてhello.sから実行可能ファイルを作成するには以下の方法でよい。
cc hello.s
ldも実行されて実行ファイルが作成される。
ldされていない物を必要とするならばccにフラグをたてるかasを利用すればよい。
文法の理解
/Developer/Documentation/DeveloperTools/Assembler/Assembler.pdf
を読めば理解は可能です。
モトローラ
モトローラ・半導体セクター : PowerPC(R) 開発支援サイト
Master Selection Guide 2003 (MPC60x/7xx/74xx/824x)
IBM
参考サイト
http://www.lightsoft.co.uk/Fantasm/Beginners/begin1.html
http://www.lightsoft.co.uk/Fantasm/fant.html
http://www.mactech.com/articles/mactech/Vol.10/10.09/PowerPCAssembly/
RISC系解説サイト
PowerPCもRISC。RISCの解説としてはARM系の解説サイトが結構存在する。
x86系解説サイト
アセンプリとしてはPPC系はすくないのでx86系を参照して知識の補足をする事があります。。。それほど訳にたたない場合も多いですが、、
Art of Assembly Language Programming and HLA by Randall Hyde
Introduction to UNIX assembly programming
アセンブラ入門:古い感じ