Open2
作って理解するOS x86系コンピュータを動かす理論と実装
entry:
jmp $
times 510 - ($ - $$) db 0x00
db 0x55, 0xAA
jmp $
$
は現在の命令のアドレス
times 510 - ($ - $$) db 0x00
timesはディレクティブらしいのだが、どこにそれが書かれたリファレンスがあるのかわかっていない
$
は現在の命令のアドレス
$$
はセクションの開始アドレス
($ - $$)は、現在の命令のアドレスからセクションの開始アドレスを引いた結果
で、セクション内での現在の位置(offset)を表す
510 - ($ - $$)
で、510から現在の位置を引く
db 0x00
ディレクティブで指定された回数だけ0x00を繰り返し挿入
dbのリファレンス
db 0x55, 0xAA
ブートセクタの終了を示す0x55,0xAAとブートフラグを記入
1 00000000 EBFE jmp $
2 00000002 00<rep 1FCh> times 510 - ($ - $$) db 0x00
3 000001FE 55AA db 0x55, 0xAA
出力されたリスティングファイル
jmp $が2バイトのバイトコードEBFEとして変換された
FE
が$
に対応するが、これは符号付き8ビット整数で-2を表す
つまり2バイト前にjmpすると言う意味