BIOS資料區和其他固定資料區

shuang_shuai發表於2011-07-07
 CPU、BIOS以及普通的適配卡都佔用了大量的固定資料區來在首兆位元組地址空間執行各種功能。無論是何種作業系統或者硬體設計。這些地址在所有的80X86 IBM相容機上非常常見。

     固定資料區包括CPU中斷向量表、儲存在中斷向量表內的資料以及BIOS和適配卡資料。

 

BIOS資料區

        該區域含有系統BIOS ROM 用到的關鍵資料資訊。程式可以簡單地訪問BIOS資料。在所有系統上這個區域都開始於記憶體的 40h 段址處。通常可用兩種方法來訪問這段記憶體。其一是利用段址 40h 和偏移量為 0。第二種方法是使用段址 0,但偏移地址開始於 400h。通常使用這兩種方法可以訪問相同的資訊。

 

BIOS資料區歸納

 

 

偏移型別

內      容

   
   
400H計算機上0號RS232-1介面卡的基地址,通常為3F8H。
402H計算機上1號RS232-1介面卡的基地址,通常為2F8H。
404H計算機上2號RS232-1介面卡的基地址。

406H計算機上3號RS232-1介面卡的基地址。
408H計算機上0號並行印表機介面卡的基地址,通常為378H。
40AH計算機上1號並行印表機介面卡的基地址。
40CH計算機上2號並行印表機介面卡的基地址。

40EH計算機上3號並行印表機介面卡的基地址。(PS2型此值為擴充套件BIOS資料區段地址)
410H該字儲存與計算機連線的裝置編碼表,BIOS中斷11H(裝置測定)可返回此資訊。

  
 0軟碟機安裝標誌,此位為0表示沒有軟碟機。
 1數字協處理器安裝標誌,此位為0表示未安裝協處理器。
 3-2系統板RAM的大小,適用於一些舊機型,PS2型未使用。00=16K,01=32K,10=48K,11=64K)。
 5-4初始顯示方式(00=AG,01=CGA-40,10=CGA-80,11=MDA-80)。
 7-6軟碟機的數量,公當位0為1時有效,00=1,01=2,10=3,11=4
 8DMA標誌
 9-11所連RS232介面卡數
 12連有遊戲I/O
 13不用(PS2型為內建MODEM安裝標誌,此位為0表示沒有安裝)
 14-15所連印表機介面卡數
412H位元組初始測試標誌(紅外線鍵盤連線錯誤單元/?)。
413H該字給出印表機可用RAM的容量,基本記憶體容量為0-10K,以千位元組為單位。BIOS中斷12H(記憶體大小測定)可返回此資訊。
415HI/O通道的儲存器容量(PS2型,BIOS控制標誌)。
417H位元組這是第一個鍵盤狀態字,通過編碼,使每位均有特定的含義,具體格式如下:
  
 0表示鍵盤右邊的Shift鍵當前是否被按下(1表示按下,0表示未按下)。
 1表示鍵盤左邊的Shift鍵當前是否被按下(1表示按下,0表示未按下)。
 2表明Ctrl鍵當前是否按下(1表示按下,0表示未按下)。
 3表明Alt鍵當前是否按下(1表示按下,0表示未按下)。
 4螢幕(Scroll)鎖定開關鍵狀態(1表示螢幕鎖定處於開,0表示關)。
 5數字(Num Lock)鎖定開關鍵狀態(1表示數字鎖定處於開,0表示關)。
 6大寫字母(Caps Lock)開關鍵狀態(1表示Caps Lock處於開,0表示關)。
 7插入狀態,它表明Ins鍵是否已按下,以使計算機進入“插入”方式,1表示插入狀態正工作,0表明未動作。
418H位元組這是第二個鍵盤狀態字,其格式如下:
  
 0表示鍵盤左邊Ctrl鍵當前是否被按下(1表示按下,0表示未按下)。
 1表示鍵盤左邊Alt鍵當前是否被按下(1表示按下,0表示未按下)。
 2如按下Ctrl+Alt+Del鍵,則該位為1。
 3如果系統鍵(Ctrl和Num Lock)接下且保持住,則該位為1,當這個系統鍵依次按下時,BIOS暫停處理,直至下鍵按下為止。但它仍響應中斷。
 4表明螢幕(Scrool)鎖定鍵當前是否按下(1表示按下,0表示未按下)。
 5表明數字(Num Lock)鎖定鍵當前是否按下(1表示按下,0表示未按下)。
 6表明大寫字母(Caps Lock)鎖定鍵當前是否按下(1表示按下,0表示未按下)。
 7表明Ins鍵當前是否按下(1表示按下,0表示未按下)。
419H位元組為Alt和數字鍵盤鍵入的數而保留。(按住ALT+數字,可直接得到相應的ASCII碼)
41AH指向鍵盤緩衝區首址
41CH指向鍵盤緩衝區尾址,當該值等於前一字的值時,說明緩衝區滿。
41EH32位元組迴圈鍵盤緩衝區,它儲存鍵盤鍵入的字元,直到程式可以接收這些字元為止,前兩個字指向此緩衝區的當前是首和尾。
43EH位元組表示磁碟驅動器的搜尋狀態,0-3位分別對應於驅動器。如果這些位中有一位為0,則表示在搜尋磁軌之前,必須重新校準相應的驅動器。位4-6未使用,位7為中斷標誌位,為1表示中斷髮生。
43FH位元組表示磁碟驅動器的馬達狀態,0-3位分別對應於驅動器0-3,如果某位被置為1,則相應驅動器的馬達正在轉動。位4-6未使用,位7為1表示現行操作是寫。
440H位元組儲存一個表明驅動器馬達接通多長時間的計數,每個時鐘節拍,計數減1,當計數為0明馬達停轉(根據INT8計時)。
441H位元組表明磁碟工作狀態,它被編碼,通過使相應位置1來表示一個特定的狀態,格式如下:
  
 00H正確。
 01H送給磁碟控制器的是無效命令。
 02H在盤上未找到地址標記。
 03H試圖在有防寫的盤上寫操作。
 04H所請求扇區未找到。
 08H驅動器DMA錯。
 09H試圖使DMA對64KB儲存體進行存取。
 10H迴圈冗餘校驗(CRC)錯。
 20HNEC磁碟控制器片出現錯誤。
 40H無效的查詢操作。
 80H延時,沒有響應。
442H7位元組從NEC磁碟驅動器返回的七個位元組狀態資訊(參見FDC)。
449H位元組指明當前視訊方式,參見INT 10H。
44AH指明顯示螢幕的當前列數。
44CH指明一個顯示頁面的位元組數,它隨時視訊方式的不同而變化。80*25方式=1000H位元組,40*25方式=800H位元組,圖形方式=4000H位元組
44EH指明當前顯示頁面的地址,即顯示在當前顯示螢幕的顯示頁面。
450H8字每個字均表示有關顯示頁面內當前游標的位置,每個字的第一位元組表示列,第二位元組表示行(改變這個位元組並不能立刻改變顯示)。
460H位元組表明游標的形狀,此位元組表示游標字元點陣的最下一行的行號,10H功能呼叫1設定此游標形狀(不要直接更改此位元組)。
461H位元組此位元組表示游標字元點陣的最上一行的行號。10H功能呼叫1設定此游標形狀(不要直接更改此位元組)。
462H位元組表明工作顯示頁面號,由10H功能呼叫5設定。
463H表明當前工作顯示板的口地址。3BCH=單色,3D4H=彩色。
465H位元組表明6845晶片的方式暫存器的當前值(埠:3X8H)。
466H位元組表示當前顯示控制皮膚的設定。10H功能呼叫0BH可設定當前皮膚(埠:3D9H)。
467H5位元組PC中,這5個位元組用以表示磁帶控制的定時計數字、CRC暫存器字和最後輸入數值位元組,在AT中,這5個位元組作為埠使用,從467H開始的雙字長是一個指標,它指向BIOS開關使80X86由保護虛地址方式轉到實地址方式時控制返回的位置。
46CH雙字這是BIOS作為時鐘計數器的一個雙字單元,時鐘第步進一次,此值增加一次,其值為0,表示一天開始(午夜),當此計數器達到一天結束的值時,計數器清0,且位元組470H置1。中斷1AH功能呼叫0可從此雙字單元中讀取一天的時間。
470H位元組這是一個時鐘翻轉位元組。當時鍾計數器達到一天結束且復位時,此位元組置1以表明新的一天開始。中斷1AH功能呼叫0在讀取這一天的時間後,將此位元組復位。
471H位元組位7為1表示BREAK鍵按下(INT 9設定此標誌)。
472H由軟體設定復位功能標誌或直接跳轉FFFF:0重啟動。
  
 1234H熱啟動
 5678H系統中止
 9ABCH在製造商檢測時使用。
474H位元組硬碟狀態。
  
 00H正確
 01H送給磁碟控制器的是無效命令或引數。
 02H在盤上未找到地址標記
 03H試圖在有防寫的盤上進行寫操作。
 04H所請求扇區未找到。
 05H重新復位失敗。
 07H操作失效。
 08HDMA錯
 09H試圖使DMA對64K儲存體進行存取。
 0AH壞的扇區標誌。
 0BH壞磁軌已清除。
 0DH扇區號、格式錯。
 0EH控制資料地址已清除。
 0FHDMA超出限制。
 10H迴圈冗餘校驗CRC錯。
 11HECC資料錯。
 20HNEC磁碟控制器片出現錯誤。
 40H無效的查詢操作。
 80H延時,沒有響應。
 AAH沒準備好。
 BBH發生錯誤,定義不正確。
 CCH寫錯誤。
 E0H暫存器錯誤。
 FFH磁碟檢測失敗。
475H位元組硬碟裝置數。
476H位元組磁碟介面卡控制。
477H位元組硬碟介面卡埠。
478H位元組測試印表機0的超時值。
479H位元組測試印表機1的超時值。
47AH位元組測試印表機2的超時值。
47BH位元組測試印表機3的超時值(PS2型除外)。
47CH位元組測試0號RS232超時值。
47DH位元組測試1號RS232超時值。
47EH位元組測試2號RS232超時值。
47FH位元組測試3號RS232超時值。
480H指向存放鍵盤輸入字元的迴圈緩衝區首址。
482H指向存放鍵盤輸入字元的迴圈緩衝區尾址。
484H位元組顯示字元的列數。其值為顯示字元的列數減1(EGA以上有效)。
485H每個字元高度(EGA以上有效)。
487H位元組顯示控制狀態(EGA以上有效)1。
  
 0游標模擬模式狀態(1為開啟)。
 1單色顯示系統狀態(1為啟用)。
 2保留。
 3顯示系統空閒狀態(1為空閒)。
 4保留。
 6-5視訊記憶體容量(00=64K,01=128K,10=192K,11=256K)。
 7顯示模式可用狀態。
488H位元組顯示控制狀態2(EGA以上有效)。

  
 0SW1(1=關閉)
 1SW2(1=關閉)
 2SW3(1=關閉)
 3SW4(1=關閉)
 4

 5
 6
 7
489H位元組顯示控制狀態3(MCGA或VGA有效)。

  
 0VGA模式狀態
 1灰度模式狀態
 2單色顯示狀態
 3使用預設模式
 4--
 5保留
 6顯示狀態開關

 7--
  
 位7位4 
 0 0350線模式
 0 1400線模式
 1 0200線模式
 1 1保留

48AH位元組顯示介面卡DCC索引。
48BH位元組最後磁碟資料率。
  
 3-0保留。

 5-4步進時間。
 7-6資料傳輸率。
48CH位元組硬碟狀態。
48DH位元組硬碟錯誤。
48EH位元組硬碟中斷標誌。

48FH位元組位0為1,表示硬碟和軟盤使用一個控制卡。
490H位元組驅動器0介質狀態。
491H位元組驅動器1介質狀態。
492H位元組驅動器0的起始狀態。
493H位元組驅動器2的起始狀態。

494H位元組驅動器0磁軌數。
495H位元組驅動器1磁軌數。
496H位元組鍵盤型別和方式,各位含義為:
  

 0E1H隱含碼最後。
 1E0H隱含碼最後。
 2右Ctrl鍵按下。
 3右Alt鍵按下。
 4101/102鍵盤
 5若讀標識和鍵盤,則強置Num Lock。
 6最後的字元是第一個ID字元。
 7讀鍵盤的ID。

497H位元組鍵盤標誌。
  
 0-2LED狀態位。
 3保留。
 4收到訊息。
 5重發接收標誌。
 6方式指示器更新。
 7鍵盤傳送錯誤標誌。

498H雙字等待完成標誌的偏移地址。
49AH雙字使用者等待計數(低位字),以微秒為單位。
49EH使用者等待計數(高位字),以微秒為單位。
4A0H位元組RTC等待啟用標誌。80表示等待時間已過。
4A1H7位元組這7個位元組用於區域網。
4A8H雙字這雙字指向儲存視訊系統的指標表。指標表格式為:

  

偏移值     型別    指向
 00H      DD    視訊引數
 04H      DD    引數儲存區
 08H      DD    字母字符集
 0CH      DD    圖形字符集
 10H      DD    第二個儲存指標表
 14H      DD    保留
 18H      DD    保留
第二個指標表格式為:

偏移值     型別    功能或指向
 00H      DW    這個表的位元組
 02H      DD    組合碼錶
 06H      DD    第二個字母字符集
 0AH      DD    使用者調色盤表
 0EH      DD    保留
 12H      DD    保留
 16H      DD    保留

 

4ACH8位元組保留。
4B4H位元組鍵盤NMI控制標誌(可變)。
4B5H雙字鍵盤中斷中標誌(可變)。
4B9H位元組埠60單位元組佇列(可變)。
4BAH位元組最後的鍵盤掃描碼(可變)。
4BBH位元組NMI緩衝頭位置(可變)。

4BCH位元組NMI緩衝頭位置(可變)。
4BDH16位元組NMI掃描碼緩衝(可變)。
4CEH日期計數(可變)。
4F0H16位元組

 

 

延伸閱讀

BIOS 資料區的結構及其利用

IBM 及其相容機,在低記憶體地址中,存放著一系列關鍵的資料,比如從 0000:0000h---0000:03ffh 是中斷向量表,存放著所有中斷的當前入口地址,而從0040:0000h---0040:00ffh 是非常重要的BIOS資料區,共256個位元組, 內部存放著有關鍵盤、視訊顯示器、磁碟、列印和通訊口等工作情況的重要資料。計算機在啟動時通過對各硬體裝置的檢測,把有關配置情況的資料和一些系統預設值添入其中,同時它也在一定程度上控制著計算機系統的正常工作。瞭解其結構,可以認識計算機是怎樣執行的,並且,正確地利用BIOS資料區中的部分內容,也將為我們工作帶來一定的方便。用debug可以方便地檢視此區域的內容:

c:/debug

   -d 40:0 L90  ;列出90H個資料的內容

   -d 40:8 L4    ;列出第8個位元組開始的4個位元組內容,0040:0000  BC 03 78 03 ;兩個列印口地址。

下面舉例說明怎樣正確利用BIOS資料區。

一、40:08h 處資料的利用

      此處的八個位元組為四個並行口地址,即列印口地址,如果只有兩個並行口,前兩個位元組一般應為03BCH 和 0378H,後面的四個位元組為0。目前有些病毒破壞此處地址,使印表機聯不上,瞭解上述原理後,如果恢復其正確地址,就可使印表機正常工作。另外有些漢卡或漢字系統出現故障時,也發生類似的情況,也可採用上面的辦法解決。也就是說,當印表機聯絡不上時,檢查並恢復此處地址,往往起到事半功倍的效果。基於此原理,如果想防止他人使用印表機(如學生實習等),也可以採取修改此處資料的辦法,從而起到保護印表機的目的。具體作法如下:

c:/debug

    -E 40:08 BC 03 ;修改為正確的地址,恢復列印。

    -E 40:08 00 00 ;修改為其它值,禁止列印。

     如果在開機後實現自動禁止使用印表機,可採用下面的辦法形成一個可執行檔案:

c:/debug

    -A 100

381E:0100 MOV AX,0040

381E:0103 MOV DS,AX

381E:0105 MOV SI,0008

381E:0108 MOV WO[SI],0000

381E:010C INT20

381E:010E

-N noprt.com

-R CX

CX:0000

    :E

-W

 

把此檔案NOPRT.COM安裝在主批處理之中即可。

 

二、40:13H 處資料的利用

      此處的兩個位元組為此係統的基本記憶體容量,顯示方法同上。對於640K基本記憶體的機器來說,正常時此處應為0280H,轉換為10進位制後為640K,其它機器可能是512K或256K等,某些引導型病毒先於DOS駐留記憶體,就採用了修改此位元組的方法,使系統容量減少幾K個位元組,防止DOS查詢,建立自己的安樂窩。此類病毒都可以通過檢視此處資料是否正常而被發現。例如被火炬病毒感染時,此處就減少1K位元組,而變為639K。

 

三、40:17H處資料利用

      此處為鍵盤狀態位元組,當按下某些特定鍵時,此單後設資料的相應位會發生變化,它的8位各對應一個按鍵,此鍵按下時對應位為1,否則為0,對應關係如下:

0:右Shift

1:左Shift

2:Ctrl

3:Alt

4:Scrol-Lock

5:Num-Lock

6:Caps-Lock

7:Insert

 

此位元組即反應當前按鍵狀態,也可控制這些鍵的狀態,強制某位為1時,則系統認為此鍵已經按下。下面的例子,形成一人Cap.com檔案,執行它就會使大寫指示燈點亮。

c:/debug

  -A

381E:0100 MOV AX,0040

381E:0103 MOV DX,AX

381E:0106 MOV SI,0017

381E:0108 MOV BYTE PTR[SI],40

381E:010B INT 20

381E:010D

-n  Cap.com

-r CX

CX:0000

    :D

-W

相關文章