bios是加電完成後執行的指令,boot是BIOS執行完成後的指令(算是操作系統內部指令)
即BIOS 加電到 選擇系統, boot是選擇系統之後(裝了多個系統的師傅應該瞭解,開機到一半有個選擇操作系統)
想去了解系統加電過程,於是安裝了一個qemu進行調試
不能單步執行,n,s都不行
系統停在了0xFFFF FFF0 //可以通過斷點知道
通過dump 內存 0x0000 0000 - 0x000F FFFF
和 0xFFF0 0000 - 0xFFFF FFFF 發現大部分是一致的
0x0000 0000 – 0x000D FFFF 全0 //boot 在0x7c00 目前是全0
0xFFF0 0000 – 0xFFFD EF8F 全0
0xFFFD EF90 – 0xFFFD FFFF 未知數據
先看初值
然後看第一條指令
0xfffffff0: ljmp $0xf000,$0xe05b
inter 手冊
To insure that the base address in the CS register remains unchanged until the EPROM based software-initialization code is completed, the code must not contain a far jump or far call or allow an interrupt to occur (which would cause the CS selector value to be changed).
bios連在南橋上,將bios映射到內存上
然後看芯片手冊 EPROM應該是在加電後已經加載完畢了,所以才能進行ljmp
然後ljmp修改了cs:base值 0xFFFF 0000 -> 0x000F 0000
跳轉到了0x000F E05B //BIOS正式函數 //估摸着bios 是要在最後寫ljmp $0xf000,$0xe05b
然後bios執行硬件檢查 ,並且把boot加載到0x7c00
然後執行boot指令,開啓系統
總結:系統加電 芯片組至reset 等待CPU加電並穩定頻率(HZ) 這時候BIOS(ROM) 芯片組(主板芯片組映射表)也完成
cs:base + EIP = 0xFFFF FFF0 長跳轉至0x000F e05b執行bios程序
bios硬件檢查,並將boot移動到0x0000 7c00
然後跳轉至0x0000 7c00 操作系統開始