討論區快速選單
知識庫快速選單
網路投保旅行平安險 軟體開發過程中有哪些資安漏洞? 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
追蹤BIOS Code的進入點?
更改我的閱讀文章字型大小
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/9/8 下午 05:48:54
當BIOS有安裝BootBlock時 :

1.BIOS Entry Point 是指 JMP F000:E05B 嗎?

2.CPU RESET後去FFFFFFF0抓取第一個指令是JMP到BootBlock還是BIOS Entry Point ?

3.如果2的問題是跳到BootBlock,那麼Cold Boot 跟Warm boot抓到的第一個JMP指令是不是不一樣?
   JMP BootBlock <--CPU RESET, 4G的地方抓第一個JMP指令
   JMP F000:E05B <--Warm Boot, 1M的地方抓第一個JMP指令
   ↑↑ ↑↑↑↑↑
    這樣說有錯嗎?
4.如果2的問題是跳到F000:E05B,那BootBlock不就沒有被執行到?

5.如果上述成立,我要追蹤BIOS Code 我必須從BootBlock開始追,對嗎?
作者 : antonov_lin(喜馬拉雅弦月)
[ 貼文 14 | 人氣 1151 | 評價 20 | 評價/貼文 1.43 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/9/8 下午 06:24:48
CPU reset 後, 會預設跳躍至 0xfffffff0 位址去執行, 這個位址是現行 BIOS ROM 影射的位址, 一般的做法是把 bootblock 的 code 放在這個區塊, 但是並不表示這個位址的 code 一定是 bootblock.
warm reboot ? 這個我並不清楚, 不過, 我知道的是, 現在的 BIOS 做法, 假如發現是 warm reboot, 都會加發一個 pci reset, 使系統轉換成 cold reboot.
作者 : liaoo(liaoo) Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 507 | 人氣 27127 | 評價 1140 | 評價/貼文 2.25 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/9/9 下午 03:41:51
bootblock的 "定義" 是什麼 ? 是 "minimum BIOS + crisis " 還是 "沒有 DRAM 可以用的時的 code " ?

一般而言,若有包 bootblock,則先跑 bootblock ; 之後才跳到 BIOS entry point ; 若沒包則直接跳到 BIOS entry point ( 記得 1st instruction 都是 cli ) !

Power on時 CPU 第一個 code read 一定是 FFFFFFF0 ; 在那邊有放一個 jmp 指令 (因為 FFFFFFF0~FFFFFFFFh 只有 16-byte空間,無法放很多 code), CPU會再 "轉跳" 到其他的地方 ( 固定的 !!! ); 若這 "固定的" 地方放的是 bootblock code,則先跑 bootblock,若否則是進入 BIOS entry point ( cli 處...)

在 compile前就得決定包或不包 bootblock 了...

若要 trace BIOS entry, 從 bootblock or entry point 都可以...
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/9/11 上午 08:28:59
>warm reboot ? 這個我並不清楚, 不過, 我知道的是, 現在的 BIOS 做法, 假如發現是 warm reboot, 都會加發一個 pci reset, 使系統轉換成 cold reboot.
warm reboot一般指的是 利用 8042 下reset command. 一般來說, 這個命令只會產生 CPU reset(有些南橋可以設定當收到KB reset時,直接發PCI reset), 也就是說, 除了CPU被 reset外, 其實所有的 chip(NB , SB ....)仍舊是保持原來的設定狀況. 目前的BIOS設計, 是會在code裡面重發PCI reset, 來reset MB上所有chip. 會這樣做是有目的的. 不過不在這次討論範圍內. 先略過不提. 至於對BIOS POST來說會做warm boot or cold boot關鍵是BDA裡面那個 boot flag值.

PS.對HW而言 cold reset 指的是 power on reset. warm reset指的是PCI reset. 兩者的差別在於 power on sequence的不同.這跟BIOS認知的warm & cold reset是不一樣的


作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/9/11 上午 08:39:50
>當BIOS有安裝BootBlock時 :
boot block 是配合EEPROM的架構出現的產物. PC用的 EEPROM 在 top block有個獨立控制的 write protect 功能. BIOS vandor利用這種架構, 規劃 boot block區域. 可以利用這個硬體保護機制, 來做一些應用.

>
>1.BIOS Entry Point 是指 JMP F000:E05B 嗎?
可以這麼說, 不過這個指令幾乎都是放在FFFFFFF0h會被解碼到ROM的位址上.
所以對於你的問題2, 3 因為CPU被reset,所以不管 warm boot or cold boot, 都是在同一個地方. 關鍵是 F000:E05B這裡的指令, warm reset & cold reset抓到的區域會有所不同(除非SB有特殊設計)

>
>2.CPU RESET後去FFFFFFF0抓取第一個指令是JMP到BootBlock還是BIOS Entry Point ?
>
>3.如果2的問題是跳到BootBlock,那麼Cold Boot 跟Warm boot抓到的第一個JMP指令是不是不一樣?
> JMP BootBlock <--CPU RESET, 4G的地方抓第一個JMP指令
> JMP F000:E05B <--Warm Boot, 1M的地方抓第一個JMP指令
> ↑↑ ↑↑↑↑↑
> 這樣說有錯嗎?
>4.如果2的問題是跳到F000:E05B,那BootBlock不就沒有被執行到?
>
>5.如果上述成立,我要追蹤BIOS Code 我必須從BootBlock開始追,對嗎?
>
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/9/11 上午 11:11:43
謝謝各位的回答,我了解了,下面是我對自己理解的做整理,如有誤請指正!

1.Power On 時CPU 被Reset,所以硬體解碼到FFFFFFF0的位址抓取第一個指令,而FFFFFFF0是剛好映射到BIOS Flash Part,而這個BIOS Flash Part的第一個指令是JMP xxx,而這個xxx 可能是BootBlock 的程式碼,也可能是BIOS Entry Point.

2.書上說為了相容以前的 PC架構所以會把Compact Segment shadow到1M位址,所以FFFF:FFF0的第一個指令一定是JMP E05B ,所以我才覺得很奇怪,因為CPU RESET 是到FFFFFFF0 抓JMP xxx(xxx指的是有安裝BootBlock),但是書上說當重新開機時是去FFFF:FFF0抓第一個JMP指令,而這個JMP指令一定是跳到 E05B (用Debug dump出來一定是E05B),所以我被這裡搞混了!

   所我才想說可能是跟Cold/warm boot有關,但是看了各位的回答,對HW而言 cold reset 指的是 power on reset. warm reset指的是PCI reset,但兩者都會對CPU Reset,所以每次都會執行bootblock後才JMP E05B.

p.s 我說的 bootblock的 "是指 "minimum BIOS + crisis"

 Memory addr BIOS Flash Part
---------------- ----------------
|JMP XXX | FFFFFFF0 <--4G,CPU Reset ---> | BootBlock |---
| ... | | | |
| ... | | | |
| | | | |
| JMP E05B | FFF:FFF0 <--Shadow 1M --> | Compact Seg| |
| | | | |
| | | EntryPoint |<--
     | |
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/9/11 上午 11:15:23
更正 1M 應該是F000:FFF0
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/9/12 下午 01:27:53
> 所我才想說可能是跟Cold/warm boot有關,但是看了各位的回答,對HW而言 cold reset 指的是 power on reset. warm reset指的是PCI reset,但兩者都會對CPU Reset,所以每次都會執行bootblock後才JMP E05B.
我想你的混亂在於shadow RAM的存在與否.
以PC 架構而言, 相容於386 AT架構, 一直是PC沉重的包袱. 在晶片組的現在, 一個PC架構相容的晶片一定要確保的硬體設計就是. 1. Top of 4G mapping to ROM 2. Top of 1M mapping to ROM. 也就是說 一開電啟動 硬體初始值要把0xFFFFFFF0 和 0x000FFFF0 要mapping到同一個地方. 而當完成啟動的時候, BIOS要會存在於 0x000E0000 ~ 0x000FFFFF的shadow RAM中, 且存取屬性為唯讀. 對於軟體的 warm reset而言, 目前的作法是透過 KBC來reset. 基本上這個reset 的設計只會 reset CPU(INIT pin). 所以在0xFFFFFFF0 這裡一定會存在一個 far jump.
由於只有CPU被reset. 所以chipset會保持原來的設定. 所以這個far jump 的結果. 會執行到 shadow RAM裡面的程式, 而不是一開始開電狀態 ROM 裡面的程式.
作者 : liaoo(liaoo) Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 507 | 人氣 27127 | 評價 1140 | 評價/貼文 2.25 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人harrison註記此篇回應為很有道理 2006/9/13 下午 03:44:10
再說的更白話一點就是 : 當 Power On後, 跑完 system power-on sequence後, CPU會被 reset ( reset 指的是 CPU 的 內容會回到 "初始值" ); 而 CPU內部的 EIP (32-bit )的初值是 FFFFFFF0h, 所以, CPU的 第一個 code read 就是到 FFFFFFF0h fetch code...

這個 memory cycle 從 CPU發出, 先會經過 North bridge ; 此時, north bridge會說 "這不是我的"...然後,往 south bridge 丟 ; south bridge 會說, "這是我的",收下後丟給 ROM ! 所以, FFFFFFF0h 會被 ROM 接走 !!! ( 所以 前人才說 "硬體初始值要把0xFFFFFFF0 和 0x000FFFF0 要mapping到同一個地方", 這個地方就是.....ROM的資料所在... )

之後, CPU所發的 cycle 都會照上述的方式一路抵達 ROM...由 CPU循著 fetch, decode, execute, store的順序作事情...

但到某一個階段前, BIOS的 code 會指示 " 要將 BIOS data 從 ROM 搬到 DRAM" ! 而在此階段之後, BIOS會設定 north bridge 暫存器, 告訴 north bridge "之後 CPU所發的 cycle 不可以不收而傳到 south bridge"....

自此之後, CPU 所發的 cycle 全部轉到 DRAM 中,由 CPU循著 fetch, decode, execute, store的順序作事情...( 這塊 DRAM area 就是 shadow RAM ; 在 DRAM中 access比 ROM access 快 ; 也就是前人說 : "BIOS要會存在於 0x000E0000 ~ 0x000FFFFF的shadow RAM中, 且存取屬性為唯讀"...<--- 當然不能被破壞...)

總而言之, BIOS 一開始是在 ROM 執行 ; 之後會在 DRAM執行...
作者 : angola(安哥拉羊) 人氣指數超過10000點
[ 貼文 73 | 人氣 21509 | 評價 30 | 評價/貼文 0.41 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/4/27 下午 01:55:24
>2.書上說為了相容以前的 PC架構所以會把Compact Segment shadow到1M位址,所以>FFFFFFF0 抓JMP xxx(xxx指的是有安裝BootBlock),但是書上說當重新開機時是去>FFFF:FFF0抓第一個JMP指令,而這個JMP指令一定是跳到 E05B (用Debug dump出來一定>是E05B),所以我被這裡搞混了!

請問一下,"用Debug dump出來一定是E05B"是要怎麼去dump啊?
是透過print port然後去trace目前code跑到哪嗎?
還是可以在程式開發端直接一步一步的執行?(ex:在VC 一次執行一行)
可以麻煩解釋一下嗎~><"
謝謝

(ACPI剛看完,現在想要偷偷run 一下code的流程...只是不知道怎麼下手)
作者 : liaoo(liaoo) Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 507 | 人氣 27127 | 評價 1140 | 評價/貼文 2.25 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/4/29 下午 04:31:14
用 debug dump指的是: (以 256KB ROM為例)
1. type "debug xxx.rom" in dos prompt(xxx.rom is BIOS image)
2. "-"出現後, type "l 4000:0" ,then <Enter> (l means "load", 4000:0表示 xxx.rom要被載入到memory address 4000:0處,因此,在 memory address 40000~7FFFFh處為 xxx.rom的所有內容,256KB = 64K+64K+64K+64K)
3. "-"出現後,type "d 7000:fff0", press <Enter>

此時,會 出現 7000:FFF0處的資料(ROM內容),應該會看到 "E9 xx xx"的東西 !

若ROM size > 256KB,則使用 ultraedit 來看 ROM content ! ( HEX view )
Ex. 512KB ROM, 則看 Hex VIEW後的 address 7FFF0 處的資訊即可 !

若要在 BIOS 執行期間隨時看 CS:IP以及相關的 information,用 H/W ICE應該是最清楚的吧 !

僅供參考...
作者 : angola(安哥拉羊) 人氣指數超過10000點
[ 貼文 73 | 人氣 21509 | 評價 30 | 評價/貼文 0.41 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/4/30 上午 10:25:53

>用 debug dump指的是: (以 256KB ROM為例)
>1. type 'debug xxx.rom' in dos prompt(xxx.rom is BIOS image)
>2. '-'出現後, type 'l 4000:0' ,then <Enter> (l means 'load', 4000:0表示 >xxx.rom要被載入到memory address 4000:0處,因此,在 memory address >40000~7FFFFh處為 xxx.rom的所有內容,256KB = 64K+64K+64K+64K)
>3. '-'出現後,type 'd 7000:fff0', press <Enter>
>
>此時,會 出現 7000:FFF0處的資料(ROM內容),應該會看到 'E9 xx xx'的東西 !
>
>若ROM size > 256KB,則使用 ultraedit 來看 ROM content ! ( HEX view )
>Ex. 512KB ROM, 則看 Hex VIEW後的 address 7FFF0 處的資訊即可 !

先謝 L 大,又學到新東西了~^^
我有照你的方式試了一下
1.只是我的 xxx.rom有1027kb 所以 L大的第一個方法試了就出現 "Insufficient memory"

2.我看了一下手邊的code有掛bootblock的部份
   所以就像先前幾位大大說的一樣,基本上entry point 應該是在bootblock的部份
   而不是 EA E0 5B (shadow ram -> 應該是這個,雖然我目前還不知道這是什麼~><")

因此我目前的作法是在bootblock的code裡隨便加了一些我能辨試的東西
ex: DB 0AAh
     DB 0EEh
     DB 0CCh
     DB 0AAh
     DB 0AAh

我再用 L大說的方式去build出來的xxx.rom中去找出這個部份 (出現 AA EE CC AA AA)
我會用這種笨方法是因為我不知道 L大說的7FFF0是怎麼算出來的~><" (請大家講解一下,是固定在這個地方嗎?因為我用我的笨方法找出來是別的地方)

000fa900h: EA 0A A9 00 F0 EA 5B E0 00 F0 AA EE CC AA AA E9
     ^^^^^^^^^^ ^^ -> F000:A90A(bootblock entry)
000fa910h: 00 00 E9 47 .....

上面這個是我追出來 bootblock的所在位置,請問一下 L大所指的7FFF0是什麼啊??
還有大家所指的 entry point 就是指這裡的 F000:A90A嗎? 謝謝

作者 : liaoo(liaoo) Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 507 | 人氣 27127 | 評價 1140 | 評價/貼文 2.25 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/1 上午 09:14:41
假如 ROM size is 256KB => address space 4G以下有 256KB 會保留給 ROM使用;此時,當 FFFFFFF0h 的 cycle打出來時,就會抓到 ROM content 3FFF0的位置 !
同理, ROM size is 512KB -> address space 4G以下有 512KB 會保留給 ROM使用;此時,當 FFFFFFF0h 的 cycle打出來時,就會抓到 ROM content 7FFF0的位置 !

你的 ROM size is 1MB => 當 FFFFFFF0h 的 cycle打出來時,就會抓到 ROM content FFFF0的位置 ! 所以,你可以用 ultraedit去看 ROM content address FFFF0處的 binary,得知第一道被 cpu read的 machine code !

利用 debug 無法得知,我猜是: debug tool本身或是其他的程式有佔用了 1M以下的 memory,所以,instruction "l(load)"會失敗 !

你可以在BB的進入點(以P公司為例,找 bbposttbl.xxx 的第一個執行的routine),自行加入"已知 machine code的指令",待 image build完後,用 ultraedit去 search即可 !
作者 : angola(安哥拉羊) 人氣指數超過10000點
[ 貼文 73 | 人氣 21509 | 評價 30 | 評價/貼文 0.41 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/2 上午 09:43:47
>你的 ROM size is 1MB => 當 FFFFFFF0h 的 cycle打出來時,就會抓到 ROM >content FFFF0的位置 ! 所以,你可以用 ultraedit去看 ROM content address FFFF0處 >的 binary,得知第一道被 cpu read的 machine code !

L大不好意思再請問一下
因為是我看到"IBM PCs/相容/EISA 系統BIOS"這本書中有提到
FFFF0的位置是擺放 「JMP至電源開啟的進入點」
再加上版上先前的討論說CPU第一個執行的指令是固定去 FFFF0的位置抓指令來做
所以我在看ROM的時候也就是照著這樣去找 FFFF0這個位置
找出 E9 FB A8這一個要執行的指令

我一直以為不論ROM的大小為何
CPU就是都到 FFFF0去抓第一個指令來做~><"
但是照 L大的說法是乎並非如此?


>你可以在BB的進入點(以P公司為例,找 bbposttbl.xxx 的第一個執行的routine),自行加 >入'已知 machine code的指令',待 image build完後,用 ultraedit去 search即可 !

只是我有一個問題
我在ROM 中看到的指令是 EA 5B E0 00 F0
因為 FE05B是 「JMP 到POST 的進入點」
只是我去看ROM 中 FE05B的位置時
看到的卻是 BE D2 F9 (mov si, xx ?)
而不是 P code中 posttbl.asm裡 postSegment SEGMENT的
PUBLIC postShutdownZeroTable之類的
或是 POST_TASK xxx, xxx, xxx

麻煩大家講解一下
謝謝
作者 : sansango(11111)
[ 貼文 12 | 人氣 2763 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/2 下午 03:54:12
安兄.. acpi的spec你看完了? 我之前看了一陣子 覺得不太好吸收... 請問你也是spec抓來一頁一頁看的嗎...
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/2 下午 05:59:08
請看我另一篇的討論....CPU第一條指令的問題~~~ ^^Y
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/2 下午 06:15:13
忘記說,一開機的時候CPU是去ROM裡面讀第一條指令,也就是位址線FFFF_FFF0(4G那邊)
你進入OS後看的是 F000:FFF0 (000F_FFF0是RAM) 並不是ROM的FFFF_FFF0而是被Shadow 後的資料,而且這個資料一定會JMP E05B....,所以你要用工具去看FFFF_FFF0 而不是000F_FFF0...

作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/2 下午 06:18:40
P.S 而E05B還會再跳到POST 的Dispatcher (P廠商那邊的第一行source code是CLI...)....印象中是這樣....

作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/2 下午 06:28:30
範例:
F000:FFF0 EA 5B E0 00 F0 ..... -->跳到F000:E05B
F000:E05B E9 FB A8 .... -->跳到實際的POST Entry point....
A8FB+E05E=8959 (進位1 去掉)
F000:8959 FA xx xx -->FA=CLI
作者 : liaoo(liaoo) Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 507 | 人氣 27127 | 評價 1140 | 評價/貼文 2.25 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/2 下午 11:46:31

>我一直以為不論ROM的大小為何
>CPU就是都到 FFFF0去抓第一個指令來做~><'
>但是照 L大的說法是乎並非如此?
=>我說的並沒有與書上衝突 ^_^ CPU的確都會發 address FFFFFFF0 ! 對 256KB/512KB/1024KB ROM都一樣 !

我所講的 3FFF0/7FFF0/FFFF0 指得是: "ROM image裡的 address" ! 跟 CPU 可以看到的不一樣 ! 但不管如何, 這些 地方 3FFF0/7FFF0/FFFF0 都會被 FFFFFFF0所 reference到 !
* 3FFF0/7FFF0/FFFF0 是相對於 ROM image 的起始位置的 !!!! 別搞混...
* 講 3FFF0/7FFF0/FFFF0 是想讓你找到 1st JMP xxx而已
    
>只是我有一個問題
>我在ROM 中看到的指令是 EA 5B E0 00 F0
>因為 FE05B是 「JMP 到POST 的進入點」
>只是我去看ROM 中 FE05B的位置時
>看到的卻是 BE D2 F9 (mov si, xx ?)
>而不是 P code中 posttbl.asm裡 postSegment SEGMENT的
>PUBLIC postShutdownZeroTable之類的
>或是 POST_TASK xxx, xxx, xxx
>
>麻煩大家講解一下
>謝謝

=> p家的 code 要跳到 postShutdownZeroTable之前,還有執行 BB & bioreset.asm !不是一開始就 jmp 到 postShutdownZeroTable的 !
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/3 上午 09:37:41
討論了這麼多篇,我給你一些建議吧,我當初也研究了2個多星期,看了一堆的Spec,才把一些歷史搞清楚:

   因為你看的書的資料是"舊的",你跟我一樣當初被誤導了...
   先去把8088/8086/80286 跟80386 這兩個階段的CPU 行為模式搞懂
    a.這兩個階段的CPU 在重置的時候是去哪邊讀第一條指令的? 提示:FFFF0跟FFFFFFF0
   b.何謂MMIO? 何謂位址空間? 提示:4G位址空間不是指4GB,MOV指令存取BIOS 資料?
   c. 這兩個階段的位址空間的分配有什麼不一樣? 提示: address bus 不同,定義也不同
     (1) 何時開始把BIOS 放在1M頂端,何時在4G頂端的位址空間?
     (2) BIOS存放資料的時候有Top 跟Bottom 方式,有什麼不同?
     (3) 何時開始保留PCIE Config space/DMI/BIOS....位址空間?
     (4) 為什麼(3)會影響DRAM大小? 例如插了4G DRAM只看到3.xG

   d.BootBlock是幹麻的? 比較一下沒有BootBlock的BIOS ROM做法?
   e.上面說的這兩個階段BIOS作法都不一樣,那為什麼BIOS可以向下相容? 提示: Shadow

   f. 假設BIOS ROM size=1M,為什麼可以完全映射到 4G~4G-1M ,但卻沒辦法映射到0~1M ? 且0~640K是給DRAM使用? 提示: Overlap area ,MCH control。

大致上就是這幾個Topic...我K了兩個多星期的Spec 才搞懂,所以你也去研究一下吧!
作者 : angola(安哥拉羊) 人氣指數超過10000點
[ 貼文 73 | 人氣 21509 | 評價 30 | 評價/貼文 0.41 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/3 下午 04:33:34
謝謝 harrison兄 和 L大 的指導

再請問一下你指的 spec. 是 IA32 manual 的那3個volume嗎?
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/3 下午 05:38:04
嗯阿,還有北橋Spec...不一起看你會看不懂....

IA32 Spec 是跟你講新的觀念,也就是80386~P4之後的東西,而一般市面上的書都是講80286之前的東西,所以一定要看這個IA32 Spec你才會知道新的東西,所以台灣的書真的資料有點老舊,能說到新的CPU的沒幾本,你去天瓏找找,那邊比較多。

我當初也是自己慢慢摸索,所以花了兩個星期的時間在找資料跟K資料,後來被我找到一篇有關Linux進入保護模式的資料(是一篇對岸祖國同胞寫的文章),我才把這些東西搞懂了。

你一定想不透跟保護模式有什麼關係吧? 因為這一篇文章,我才搞懂"CPU的行為"跟"OS的行為",就像是保護模式...CPU有保護模式的文章,OS也有保護模式文章,雖然都說的是同一件事情,但是內容差很多,一個是講CPU他能幹麻,還有怎麼去改變CPU行為(RM/PM/SMM),另一個是講把CPU設定成保護模式後,OS怎樣利用他去做記憶體管理(Float Memory/Page...)...等事情。

也因為這一篇文章我才搞懂:
    1.定址問題(CPU 暫存器跟位址線的關係) v.s MMIO 觀念
     2.1M 回繞跟A20 Gate關係
     3.這些位址問題與向下相容問題,所以有所謂的A20的演變歷史,到後來Fast A20 Gate
     4.CPU工作模式: RM/PM/SMM
    5.CPU第一條指令讀取方式
     6.北橋扮演的角色,Shadow...
     7.如何進入保護模式? 何謂BigReal Mode ? 跟Float Memory 有什麼不同?
    8.何謂記憶體分頁 (Page/管理的演算法/虛擬位址/邏輯位址/物體位址?)
     9...等

反正就是知道CPU能幹麻,會幹麻,怎樣去幹麻後,你大概就能了解了。
這些是我7,8個月前跟你一樣剛踏入這個行業時所K的資料跟學習的心得,希望對你有幫助啦!
有問題再提出來吧,這邊很多前輩當初也是這樣指導我的啦^^Y.
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/3 下午 05:42:39
噗,最近在寫C語言寫的太忘我了打字打錯了....

Flat Memory 不是Float Memory.....
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/3 下午 06:00:47
我這樣描述不知道你看不看的懂:

1.CPU(FFFF_FFF0)--->2.抓BIOS "ROM"裡面的資料--->3.開始BootBlock--->4.跳到POST Dispatcher ---> 5.POST_TASK...-->6.Shadow

step 1.2.3.4.5 時, 位址000F_FFF0指向BIOS ROM,FFFF_FFF0也是指向BIOS ROM
     [注意]此時這兩個位址讀到的資料會一樣 = Jmp BootBlock
step 6之後,位址000F_FFF0 指向DRAM,且被填入EA 5B E0 00 F0 (Jmp F000:E05B)
     [注意]此時這兩個位址讀到的資料會不一樣.
     FFFF_FFF0 = Jmp BootBlock
     000F_FFF0=Jmp E05B (E05B的地方會Jmp POST Dispatcher)

你應該可以了解我想表達意思的!^^Y

作者 : resorce(回風尋夢)
[ 貼文 1 | 人氣 1 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/4 下午 03:20:12
可以請H大提供您看的此篇文章嗎(Linux進入保護模式的資料)
我是剛入門的BIOS工程師想了解一下
我的信箱:resorce0317@gmail.com

thx
作者 : sew850i(Angel)
[ 貼文 10 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/16 下午 03:49:32
H大,也可以寄給我嗎?
謝謝!!
作者 : sew850i(Angel)
[ 貼文 10 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/16 下午 03:49:39
H大,也可以寄給我嗎?
謝謝!!
作者 : sew850i(Angel)
[ 貼文 10 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/16 下午 03:50:10
H大,也可以寄給我嗎?
謝謝!!
作者 : sew850i(Angel)
[ 貼文 10 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/16 下午 03:50:22
H大,也可以寄給我嗎?
謝謝!!
作者 : harrison(harrison) 貼文超過200則人氣指數超過30000點
[ 貼文 232 | 人氣 43332 | 評價 330 | 評價/貼文 1.42 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/16 下午 06:15:34
你們可以用Google 找Keyword "Welcome to Protected Mode" 就會看到那篇PDF了...
作者 : sew850i(Angel)
[ 貼文 10 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/11/9 下午 04:30:20
感恩,我找到了。^^
作者 : grantwu00(彤晟)
[ 貼文 29 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/7/5 下午 07:52:44
Hi all,

我是BIOS Engineer,
我們公司有一個新的Intel project mainboard,
第一個instruction跑一下就沒了

整個Project就pending無法往前了

請問寫BIOS的我該如何幫他?

Grant
作者 : liaoo(liaoo) Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 507 | 人氣 27127 | 評價 1140 | 評價/貼文 2.25 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/7/10 下午 04:06:51
>第一個instruction跑一下就沒了
=>如何確定的呢 ? 又何謂跑一下就沒了 ?

1.有進來 bios entry 嗎 ?
2.if yes then 這過程都可以丟 Port80來追 progress...

Port80可以用嗎 ?
作者 : grantwu00(彤晟)
[ 貼文 29 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/8/6 上午 05:58:44
Hi Liaoo,

問題是Lan 的reset sequence造成
現在我們請了一個新HW engineer
他已經解掉了bug

Grant
 板主 : 徵求中
 > 組合語言 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 組合語言 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
組合語言
1 H 2220 
2 liaoo 990 
3 青衫 970 
4 牧童哥 940 
5 史努比 920 
6 qq 480 
7 GHOST-JACKY 330 
8 ]CALL-151 310 
9 harrison 300 
10 掌握文武半邊天 280 
組合語言
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.1560059