boot bios傻傻分不清

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 操作系統開始

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章