・cross環境説明(binutils,gccのインストール先など) ・ARMのアセンブラサンプルを軽く説明(cross/sample) ・/usr/local/cross/bin/arm-elf-gcc を使って,hello world を プログラムをコンパイルしてみる → リンクエラー → 当然! ・コンパイルパラメータまわりを合わせる.(cross/execを参考に) ・main()から返るだけのプログラムをコンパイルしてみる 逆アセンブルして解析してみる ・gdbでステップ実行してみる → 関数呼び出しでダウン → デバッガで動作をアセンブラ単位で追ってみる.nopを先頭に入れたりしてみる → スタックポインタの設定が必要 ・スタックポインタを設定する → これで,実行がひととおりできるようになる. 関数定義して関数呼び出しとかやってみる. レジスタの値とかを見てみて確認 ・文字列出力をやりたい. → gdbのシミュレータを見てみる.write で検索.armos.cにそれっぽいところあり. ・よく読む.swiという命令実行でwriteが呼ばれるみたい. レジスタの扱いとかを見る ・swi命令を使ったwriteを実装してみる.linux/arm互換のシステムコールか? testsuite も参考にできる ・puts()を実装してみる. ・newlibについて考察する.printf()からwrite()の呼び出しまでやってくれるのが newlib.サンプルのソースコード上ではputs()に相当. startupやwriteの実装は libgloss.かるくnewlibの中身を見てみる ・open/write/closeの一連の動作を実装してみる openの実装を見る.パラメータ変換している ・thumbで実行してみる.これは流し読みでよい. 命令長が16バイト,アドレスが奇数になっている,などざっくり紹介する程度.