概要
- 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
で吐き出されるコードを読むのがよい。
CodeWarrior-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というファイルが作成される。
余談だが
#include <stdio.h> main() { printf("Hello World!\n"); }
などとしてもはかれるソースに違いはない。最近のコンパイラは小手先の最適化なぞ完全に無意味です。
読みやすく、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/
http://www-6.ibm.com/jp/developerworks/linux/021004/j_l-ppc.html
RISC系解説サイト
RISC系は意外と近いので参考になる事が多い。ARM系の解説サイトが結構存在する。
x86系解説サイト
アセンプリとしてはPPC系はすくないのでx86系を参照して知識の補足をする事があります。。。実際は直接にはあまり訳にはたちませんが、、
Introduction to UNIX assembly programming