1. 程式人生 > >BIOS資料區和其他固定資料區

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

    <<PC技術內幕>> 第6章 BIOS資料區筆記

    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
8 DMA標誌
9-11 所連RS232介面卡數
12 連有遊戲I/O
13 不用(PS2型為內建MODEM安裝標誌,此位為0表示沒有安裝)
14-15 所連印表機介面卡數
412H 位元組 初始測試標誌(紅外線鍵盤連線錯誤單元/?)。
413H 該字給出印表機可用RAM的容量,基本記憶體容量為0-10K,以千位元組為單位。BIOS中斷12H(記憶體大小測定)可返回此資訊。
415H I/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 指向鍵盤緩衝區尾址,當該值等於前一字的值時,說明緩衝區滿。
41EH 32位元組 迴圈鍵盤緩衝區,它儲存鍵盤鍵入的字元,直到程式可以接收這些字元為止,前兩個字指向此緩衝區的當前是首和尾。
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)錯。
20H NEC磁碟控制器片出現錯誤。
40H 無效的查詢操作。
80H 延時,沒有響應。
442H 7位元組 從NEC磁碟驅動器返回的七個位元組狀態資訊(參見FDC)。
449H 位元組 指明當前視訊方式,參見INT 10H。
44AH 指明顯示螢幕的當前列數。
44CH 指明一個顯示頁面的位元組數,它隨時視訊方式的不同而變化。80*25方式=1000H位元組,40*25方式=800H位元組,圖形方式=4000H位元組
44EH 指明當前顯示頁面的地址,即顯示在當前顯示螢幕的顯示頁面。
450H 8字 每個字均表示有關顯示頁面內當前游標的位置,每個字的第一位元組表示列,第二位元組表示行(改變這個位元組並不能立刻改變顯示)。
460H 位元組 表明游標的形狀,此位元組表示游標字元點陣的最下一行的行號,10H功能呼叫1設定此游標形狀(不要直接更改此位元組)。
461H 位元組 此位元組表示游標字元點陣的最上一行的行號。10H功能呼叫1設定此游標形狀(不要直接更改此位元組)。
462H 位元組 表明工作顯示頁面號,由10H功能呼叫5設定。
463H 表明當前工作顯示板的口地址。3BCH=單色,3D4H=彩色。
465H 位元組 表明6845晶片的方式暫存器的當前值(埠:3X8H)。
466H 位元組 表示當前顯示控制面板的設定。10H功能呼叫0BH可設定當前面板(埠:3D9H)。
467H 5位元組 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 操作失效。
08H DMA錯
09H 試圖使DMA對64K儲存體進行存取。
0AH 壞的扇區標誌。
0BH 壞磁軌已清除。
0DH 扇區號、格式錯。
0EH 控制資料地址已清除。
0FH DMA超出限制。
10H 迴圈冗餘校驗CRC錯。
11H ECC資料錯。
20H NEC磁碟控制器片出現錯誤。
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以上有效)。
0 SW1(1=關閉)
1 SW2(1=關閉)
2 SW3(1=關閉)
3 SW4(1=關閉)
4
5
6
7
489H 位元組 顯示控制狀態3(MCGA或VGA有效)。
0 VGA模式狀態
1 灰度模式狀態
2 單色顯示狀態
3 使用預設模式
4 --
5 保留
6 顯示狀態開關
7 --
位7位4
0 0 350線模式
0 1 400線模式
1 0 200線模式
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 位元組 鍵盤型別和方式,各位含義為:
0 E1H隱含碼最後。
1 E0H隱含碼最後。
2 右Ctrl鍵按下。
3 右Alt鍵按下。
4 101/102鍵盤
5 若讀標識和鍵盤,則強置Num Lock。
6 最後的字元是第一個ID字元。
7 讀鍵盤的ID。
497H 位元組 鍵盤標誌。
0-2 LED狀態位。
3 保留。
4 收到訊息。
5 重發接收標誌。
6 方式指示器更新。
7 鍵盤傳送錯誤標誌。
498H 雙字 等待完成標誌的偏移地址。
49AH 雙字 使用者等待計數(低位字),以微秒為單位。
49EH 使用者等待計數(高位字),以微秒為單位。
4A0H 位元組 RTC等待啟用標誌。80表示等待時間已過。
4A1H 7位元組 這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    保留

4ACH 8位元組 保留。
4B4H 位元組 鍵盤NMI控制標誌(可變)。
4B5H 雙字 鍵盤中斷中標誌(可變)。
4B9H 位元組 埠60單位元組佇列(可變)。
4BAH 位元組 最後的鍵盤掃描碼(可變)。
4BBH 位元組 NMI緩衝頭位置(可變)。
4BCH 位元組 NMI緩衝頭位置(可變)。
4BDH 16位元組 NMI掃描碼緩衝(可變)。
4CEH 日期計數(可變)。
4F0H 16位元組

延伸閱讀

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

相關推薦

BIOS資料其他固定資料

    <<PC技術內幕>> 第6章 BIOS資料區筆記     CPU、BIOS以及普通的適配卡都佔用了大量的固定資料區來在首兆位元組地址空間執行各種功能。無論是何種作業系統或者硬體設計。這些地址在所有的80X86 IBM相容機上非常常見。    

服務新資料節點退役舊資料節點

服務新資料節點 當原有的資料節點容量達不到儲存資料需求,需要在原有叢集基礎上動態新增新的資料節點 準備一臺虛擬機器 修改ip,主機名稱.以及hosts 配置jdk以及hadoop的環境 修改xcall和xsync檔案,增加新節點,同步ssh

[Visual Studio C++] [MFC] DDX(動態資料交換)DDV(動態資料驗證)

DDX(動態資料交換)和DDV(動態資料驗證)是MFC中用於變數和控制元件間關聯資料和控制資料的巨集。 比如: DDX_Text(pDX,IDC_EDIT1,text); 就可以把變數text和控制元件IDC_EDIT1關聯起來,只要呼叫UpdateData(FALSE); 一旦text

Python學習【第4篇】:Python之可變資料型別與不可變資料型別 可變資料型別不可變資料型別

可變資料型別和不可變資料型別 1.可變資料型別:在id不變的情況下,value可改變(列表和字典是可變型別,但是字典中的key值必須是不可變型別)   2.不可變資料型別:value改變,id也跟著改變。

Oracle 資料備份恢復及資料遷移

資料庫備份及備份的方式 物理備份 冷備份 熱備份 邏輯備份 exp/imp expdp/impdp Oracle的恢復 例項恢復-Crash recovery 當資料庫庫因非正常方式關閉後,再次開啟時,需要進行例項恢復。 – 伺服器掉電 – 作業系

【Qt】資料型別有用的資料操作類

除了C++提供的基本資料型別之外,Qt還提供了了對開發者而言非常有用的多種資料型別。Qt提供的資料型別分為基本資料型別和類形態的資料型別。   基本資料型別 Qt支援多個平臺,建立的應用程式需要在多種平臺上都具有相同大小的資料型別。為了能精確指定資料型別的大小,Qt提供了一

java虛擬機器學習之執行緒共享記憶體執行緒私有

 執行緒共享指的就是可以允許被所有執行緒共享訪問的一塊記憶體,包括堆區,方法區和執行時常量池。  1. java堆區      java堆區在虛擬機器啟動時被建立,並且他在實際記憶體中是可以不連續的。

CUHK資料Market-1501資料集計算CMC方法的差別

Cumulative Matching Characteristics (CMC) curves 是目前行人重識別領域最流行的效能評估方法。考慮一個簡單的 single-gallery-shot 情形,每個gallery identity只有一個instance. 對於每一次

java 中棧的資料結構佇列的資料結構模型

無意中發現LinkedList 不僅僅實現了List介面,同時也實現了Queue介面,因此在這裡就模擬一下棧的資料結構和佇列的資料結構。為以後的面試做準備。 /** * @author yikai * 棧型別的資料結構的特點就是先進後出,那麼這就簡單了

資料開發面試部分:Hadoop 中 job task 之間的別是什麼(大資料開發面試)

JobTracker 是一個 master 服務,軟體啟動之後 JobTracker 接收 Job,負責排程 Job的每一個子任務, task 運行於 TaskTracker 上,並監控它們,如果發現有失敗的 task 就重新執行它。一般情況應該把 JobTracker 部署

如何:新增移除工作中的工作資料夾(Visual Studio 2008 )

工作區包括本地磁碟上的客戶端工作資料夾,這些資料夾對映到 Team Foundation 版本控制伺服器上受版本控制的資料夾。工作區可以包含多個工作資料夾,但工作區中的每個伺服器資料夾只能包含一個例項。如果本地工作區已經包含了對映到其他伺服器資料夾的資料夾或子資料夾,則不能將伺服器資料夾對映到這樣的本地工作

oracle的邏輯結構包括表空間、段、資料

oracle的邏輯結構包括表空間(tablespace),段(segment),區(extent),資料塊(data block) oracle資料庫在邏輯上是由多個表間組成的,表空間中儲存的物件叫段,比如資料段,索引段,和回退段。段由區組成,區是磁碟分配的最小單位。段的增大是通過增加區的個數來實現的。每個區

Java 執行時資料記憶體模型

執行時資料區是指對 JVM 執行過程中涉及到的記憶體根據功能、目的進行的劃分,而記憶體模型可以理解為對記憶體進行存取操作的過程定義。總是有人望文生義的將前者描述為 “Java 記憶體模型”,最近在閱讀《深入理解 Java 虛擬機器》之後對二者加深了部分理解,於是寫一篇相關內容的學習總結。 # 執行時資料區

怎樣找到win8電腦分誤刪的資料

3D images 了解 image 幾分鐘 AC mage 暫時 數據 分區找不到是比較常見的數據恢復案例,需要註意,分區找不到後不要再重建新的分區。保護好數據丟失現場,可以最大程度的恢復出數據。具體的恢復方法看正文了解。 工具/軟件:AuroraDataRecovery

ECharts簡單的執行示列(固定資料互動資料庫)

因為最近正好用到了這個Echarts 所有做下記錄, 首先自己官網下載js(echarts.min.js) 1、使用填充的資料 頁面程式碼如下:  <!-- 引入echarts的js --><script th:src="@{/js/echarts.min.js}">

C Primer Plus--結構其他資料型別(2)

C Primer Plus–結構和其他資料型別(2) 文章目錄 列舉型別 enumerated type 列舉預設值 為列舉指定值 名稱空間 namespace `typedef`關鍵字

C Primer Plus--結構其他資料型別(1)

文章目錄 結構變數 structure variable 建立結構宣告 定義結構宣告 結構陣列 巢狀結構 結構指標 使用指標訪問結構成員 結構用於傳參

spring mvc --上傳檔案,檔案其他資料一起提交

jsp: var formdata = new FormData(); formdata.append('file', $('#file')[0].files[0]); //上傳檔案 formdata.append('id', $('#id').val(

C語言之結構其他資料形式

1.結構變數 C語言中,提供了**結構變數(structure variable)**用於提高我們表示資料的能力,如果我們要列印一本書的圖書目錄,其中包含書名作者等等資訊,這樣我們需要這種資料形式既能包含字串,又能包含數字,而且各資訊獨立,此時我們就可以使用結構變數來儲存資料。 1.