0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「手探りでCUI OS作成に挑む」連載

この記事は「手探りでCUI OS作成に挑む」連載の一部です。
全体の目次は「手探りでCUI OS作成に挑む」連載目次を御覧下さい。

実験

BIOSの入口を見つけることが目的です。
CPUは電源が入れられた直後FFFF:0にある命令を実行します。
その後F000:0xFFF0にあるBIOSの入口へ跳びます。
初めFFFF:0の位置にJMP 0xF000:0xFFF0があり直接BIOSの入口へ跳ぶものと思っていました。
しかし8086で見てみるとFC00:205Bへ跳んでいることがわかりました。
そこでブートローダからそれらのアドレスへ跳び、ブートローダへ戻って来られるか(戻ってくるということはそこにあるデータは何かしらの初期化処理であるということ)を検証することにしました。

FFFF:0のコード

アドレスFFFF:0にあるの命令を確認するとJMP FC00:205Bとなっていました。
このFC00:205Bから実行していくのだと思われますが、念の為8086実機で実験を行いました。

微信图片_2025-06-04_182348_154.png

ブートローダから0xFC00:0x205Bへ跳ぶプログラムを書いたところ再起動を無限に繰り返していたため、0xFC00:0x205Bから一行ずつ実行していけばいつかは7c00へ辿り着くことが証明できました。

boot.asm
[org 0x7C00]
bits 16

start:
    jmp 0xFC00:0x205B

times 510-($-$$) db 0
dw 0xAA55

一般的なBIOS入口

一般的なBIOSの入口であるF000:0xFFF0へ跳ぶプログラムも書いて試してみたが結果は全く同じで再起動を繰り返しました。
よって0xFC00:0x205Bから実行していき、F000:0xFFF0も通過するということでしょう。

[org 0x7C00]
bits 16

start:
    jmp 0xF000:0xFFF0

times 510-($-$$) db 0
dw 0xAA55

動作結果を載せたかったのですが、GIFを何度貼っても失敗するので諦めます。

仮説

0xFC00:0x205Bから実行していき、どこかで0xF000:0xFFF0へ跳び、最終的にブートローダ7c00へ辿り着くのだと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?