bloggerads

2014年4月1日 星期二

EBDA (Extended BIOS Data Area)

這篇是說明在Legacy Bios中,如何動態申請memory的規範。

第一次碰到Option Rom,我對使用記憶體第一個想法就是, 難道不能用Malloc這類的函式嗎? 答案是不行,因為在boot的階段是沒有C函式庫可以用的。因此要使用memory存放資料就必須透過EBDA所定義的規範從640KB內抓一快記憶體來用。

定義幾個欄位:
[40:13]: EBDA的起始位址, 單位是KB, 欄位是一個Word
[40:13] ] = EBDA的長度, 單位是KB, 欄位是一個Byte
[40:0E] = EBDA的起始segment, 欄位是一個Word

<範例> 申請 2KB的記憶體位址

step 1. 程式先去讀出以上這三個欄位的位址
  • [40:13] = 27Ch (KB) = 9F000h
  • [9F00:0] = 4
  • [40:0E] = 9F00h
step 2. 將EBDA起始位址下移2KB, 並在EBDA起始的第一個Byte加上2
  • [40:13] = 27Ch (KB) -2 = 27Ah (KB) = 9E800h
  • [9E80:0] = 4+2= 6
  • [40:0E] = 9E80h 

沒有留言:

張貼留言