修の論がアレしてきたりしてあまり時間が取れなかった。
1/29
https://pdos.csail.mit.edu/6.828/2017/xv6/book-rev10.pdf Appendix A を読んで x86 のレジスタなどを覚える。
memory-mapped I/O が分かった気になる。ディスクの最初のセクタは boot sector と呼ばれ BIOS がそこを読む。
real mode と protected mode はあとで読む。
アセンブラのスタックを使った関数呼び出しについて。学部のコンパイラ作る講義でやったけど結構忘れていた。
逆アセンブルで遊んでみる(6)関数内の処理を追いかけてみた - ゆずさん研究所 が分かりやすかった。
Lab 2 にある pointer.c でハマったが普通にリトルエンディアンだね…。
1/30
link address と load address がまだ分かっていない。GDB の使い方が若干分かってきた。
boot xv6 の HW は、xv6 kernel が始まる 0x10000c 時点での x/24x $esp の内容を説明せよというもの。
(gdb) x/24x $esp
0x7bcc: 0x00007da5 0x00000000 0x00000000 0x00000000
0x7bdc: 0x00010054 0x00000000 0x00000000 0x00000000
0x7bec: 0x00000000 0x00000000 0x00000000 0x00000000
0x7bfc: 0x00007c4d 0x8ec031fa 0x8ec08ed8 0xa864e4d0
0x7c0c: 0xb0fa7502 0xe464e6d1 0x7502a864 0xe6dfb0fa
0x7c1c: 0x16010f60 0x200f7c78 0xc88366c0 0xc0220f01
0x10054 がまだ追いきれていない。
1/31
“PC Assembly Language” 1.2 Computer Organization を読んで、real mode, 16-bit protected mode, 32-bit protected mode をまともに理解した。
8086, 80286, 80386 への対応。
xv6のブートプロセスめも 32bit-modeになるまで - Qiita は参考になった。
まだ HW は終わってない…