【我所認知的BIOS】->反彙編BIOS之Bootblock(5)

【我所認知的BIOS->反彙編BIOSBootblock(5)

--Store CPU type to CMOS

By Lightseed

5/18/2010

一、BIOS的主流程

從這章開始,我在每章的開頭說把目前BIOS的主流程進行到了哪一步放在最前面,這樣有助於理解整個Award BIOS的流程。

到目前爲止,我們的BIOS主流程如圖1所示,

1 BIOS主流程

那這節我們就來看看BIOS中記錄CPU type的子函數。

二、Record_CPU_type_cmos

廢話還是要說一下,從下面的code中我們可以看到,在Record_CPU_type_cmos這個函數前面有其他的東西,我們先暫時不管,直接看這個函數的一些片段(因爲那是下下個章節要說的。)。

_F000:E580 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

_F000:E580

_F000:E580 Record_CPU_type_cmos:          ; CODE XREF:   _F000:E1DAj

_F000:E580       mov    es, sp

_F000:E582       assume es:nothing

_F000:E582       xchg       si, dx

_F000:E584       mov    sp, 0E58Ah

_F000:E587       jmp    locret_FF76A

_F000:E59A

_F000:E59A Wait_RTC_ready:            ; CODE XREF:   _F000:E5B0j

 

_F000:E5D3       xchg       dx, bp

_F000:E5D5       mov    si, 0E57Ah    ; From the table, we  can know there is no thing infomation in the CPU_TYPE_TABLE

_F000:E5D8

_F000:E5D8 loc_FE5D8:                 ; CODE XREF:   _F000:E5EAj

_F000:E5D8       mov    ax, cs:[si]

_F000:E5DB       cmp    dx, cs:[si+2]

_F000:E5DF       jb     loc_FE5E7

_F000:E5E1       cmp    dx, cs:[si+4]

_F000:E5E5       jbe    loc_FE5EC

_F000:E5E7

_F000:E5E7 loc_FE5E7:                 ; CODE XREF:   _F000:E5DFj

_F000:E5E7       add    si, 6

_F000:E5EA       jmp    short loc_FE5D8

_F000:E5EC ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

 

                  Call   Store_cpu_type_CMOS  ;僞代碼

 

_F000:E604 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

_F000:E604       mov    sp, es     ; Return CPU_detect

_F000:E606       retn

上面是Record_CPU_type_cmos的主函數,因爲code感覺稍微比較亂一點,我還是要簡單說明一下他的結構。

_F000:E582_F000:E58C    _F000:E58E這三行都是爲了保存DX寄存器做的動作。

Wait_RTC_ready這個loop主要是爲了測試CMOS是否是OK的。否則就會在這裏死機。

_F000:E5D3這行是恢復了CPU 上電時存在GS裏面的CPU的信息,後續的動作是用這個DX的值來在_F000:E57A CPU_type_table這個table中確定當前CPUtype的。

④經過上面的三步後,再通過調用相關操作CMOS的函數把對應的值存到CMOS裏面去。

⑤從

_F000:E579 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

_F000:E57A CPU_type_table  db  86h ; ?

_F000:E57B       db  0 ; 

_F000:E57C       db  0 ; 

_F000:E57D       db  0 ; 

_F000:E57E       db 0FFh ; 

_F000:E57F       db 0FFh ;

這個table裏面可以看到,其實實際的是沒信息的。那麼在函數執行的時候,參考這個table的時候發現是沒有對應的CPU類型的,那麼就會記錄這個CPU 類型是未知的。姑且我們現在不去追究後續有什麼用,BIOS在留下了足跡到CMOS裏。

三、小結

這個函數沒有什麼特色的地方,操作也比較簡單,沒說太多。函數的作用在文章的前面就說了。

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