#pragma section-numbers off [[TableOfContents]] = 概要 = 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 DeveloperToolsの文書 {{{ /Developer/Documentation/DeveloperTools/Assembler }}} = 学習用ツール = 通常は {{{ gcc -S test.c }}} で吐き出されるコードを読むのがよい。 [http://www.gnu.org/software/lightning/lightning.html GNU lightning] = 入門Assembly = あくまでもCを知っている前提です。とりあえずCからAssemblyを学ぶ方が得策だと判断しました。 == 初めてのAssembly == {{{ #include int main(void) { printf("Hello World!\n"); return 0; } }}} これをhello.cの名前で保存する。 Terminalより {{{ cc hello.c ./a.out }}} で動作を確認 {{{ cc -S hello.c }}} するとhello.sというファイルが作成される。 余談だが {{{ #include main() { printf("Hello World!\n"); } }}} などとしてもはかれるソースに違いはない。最近のコンパイラは小手先の最適化なぞ完全に無意味です。 読みやすく、ISO/ANSIの規約正確な記述のほうがよりよいでしょう。またISO/ANSIの規約に正確なほうが最適化率が高い場合が多いです。 さてhello.sから実行可能ファイルを作成するには以下の方法でよい。 {{{ cc hello.s }}} ldも実行されて実行ファイルが作成される。 ldされていない物を必要とするならばccにフラグをたてるかasを利用すればよい。 == 文法の理解 == {{{ /Developer/Documentation/DeveloperTools/Assembler/Assembler.pdf }}} を読めば理解は可能です。 = 参考サイト = 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 [http://www.sra.co.jp/wingnut/gcc/gcc-j.html#RTL GCCの使い方RTL表現] [http://www.cqpub.co.jp/interface/column/freesoft/ フリーソフトウェア徹底活用講座] = RISC系解説サイト = RISC系は意外と近いので参考になる事が多い。ARM系の解説サイトが結構存在する。 [http://www.nk.rim.or.jp/~jun/slasm/arm00.html Linux Zaurusでアセンブリプログラミング] = x86系解説サイト = アセンプリとしてはPPC系はすくないのでx86系を参照して知識の補足をする事があります。。。実際は直接にはあまり訳にはたちませんが、、 http://webster.cs.ucr.edu/ [http://www.daemonnews.org/200006/assembly-intro.html Introduction to UNIX assembly programming] [http://hp.vector.co.jp/authors/VA015412/ マシン語大研究] ---- CategoryPrograming CategoryMac CategoryProgramLanguage