4日目はパレットを設定し、デスクトップらしき画像を描画する。
最初、全てのパレット設定が黒になってしまった。
table_rgbが指し示すアドレスが正しくないようだ。
こちらのブログ と同様にstaticを外したら、色が設定された。
tinyos.cのリスティングファイルを確認すると、staticを付けるとパレットの定義は、 dataセクションに格納されていた。
dataセクションのアドレスは boot.sで
# +20 : .dataの初期値列がファイルのどこにあるか .int 0x10c8と定義しているが、 リンカスクリプトでdataセクションのアドレスを設定し、 そのアドレスをboot.sにも設定すれば良いのだろうか。
qemuで実行した時のスクリーンショット。書籍と同じだ。
ソースが大きくなってきたのでgithubで公開する。こちらを参照。
アセンブラでC言語から呼べる関数を作るときの注意点
自由に使って良いレジスタ EAX,ECX,EDX だけ。他のレジスタは値を変更してはならない。
戻り値はEAXレジスタに設定する。
オブジェクトファイルの逆アセンブル
objdumpコマンドを使う。$ objdump -d func.o func.o: ファイル形式 elf32-i386 セクション .text の逆アセンブル: 00000000: 0: f4 hlt 1: c3 ret 00000002 : 2: 8b 4c 24 04 mov 0x4(%esp),%ecx 6: 8a 44 24 08 mov 0x8(%esp),%al a: 88 01 mov %al,(%ecx) c: c3 ret
0 件のコメント:
コメントを投稿