close

本章為小木偶組合語言教學中,關於深入硬碟的部分細節.詳細請參見原址>

現在一顆硬碟容量幾乎都在 80G 以上,這麼大的硬碟管理上是不太容易。小木偶習慣上是把他分成好幾個分割,再裝入好幾種作業系統,如 DOS 6.20、Windows 98 SE、Windows XP、Mandrake Linux 使用。曾經有一度,也安裝過 OS/2 Warp T 3.0 使用過,可惜因軟體太少,所以無奈地再度使用 Windows 作業系統。

每個硬碟最多可以分割成三個主要分割 ( primary partition ) 及一個擴充分割 ( extended partition ),而擴充分割還可以再分成數個邏輯硬碟。以 DOS/Windows 9x/Me 的觀點來看,每個主要分割就是一個邏輯硬碟,再加上擴充分割內的邏輯硬碟,這些邏輯硬碟就是您在 DOS/Windows 所看見的 C:、D:、E:……等這些硬碟機名稱。

例如您把剛剛買來的硬碟裝在電腦上,以 Windows 98 SE 開機光碟開機,執行 FDISK 後,必定會先要求建立一個主要分割,如果您的主要分割並不佔有所有的硬碟容量,FDISK 會建議您建立擴充分割,待擴充分割建立好後,會再要求您建立邏輯硬碟 ( 在擴充分割裏的邏輯硬碟也稱為邏輯分割 ),如果您建立好兩個邏輯硬碟,那麼您就有三個邏輯硬碟機,在主要分割的是 C:,另外兩個就是在擴充分割的兩個邏輯硬碟,分別是 D:、E:。因此您雖然只買了一顆實體硬碟,但您卻有 C:、D:、E: 三個邏輯硬碟,

不過用微軟的分割工具,似乎只能建立一個主要分割,這可能是微軟商業上的考慮,所以只有藉助其他的軟體,例如 SPFDISK、OS/2 的啟動管理或 Linux 的分割工具,才可以建立多個主要分割。本章及下一章將要介紹這些分割區與邏輯硬碟在實體硬碟上如何安排。本章先介紹硬碟的構造 ( 包含幾何結構與 LBA 邏輯磁區 ),並實作一個硬碟磁區觀察程式,它可以觀看硬碟的每一部份,下一章再介紹 FAT 檔案系統。


硬碟幾何結構

一顆硬碟的外觀重要的元件有電源插座、IDE 排線、跳針 ( jumper,設定 MASTER 或 SLAVE ),以及一片包含密密麻麻電子元件的電路板,負責控制硬碟運作。而儲存資料的地方則是在硬碟內部的數片含有磁性物質的金屬圓形板上,這些金屬圓形板稱為磁 盤 ( platters ),它們是以金屬合金或其他堅硬物質所製成的基板,上面塗上磁性物質用以儲存資料。數片磁盤以一個稱為主承軸的軸心,安裝於一個密閉無塵室內,主承軸上連 接電動機,以高速帶動磁盤旋轉。一般一個磁盤有正反兩面,各有一個磁頭負責讀寫,至於要讀寫磁盤那個部份,則是由磁頭傳動組及磁盤轉動到那裏決定。請參閱 下圖中的下半圖:

一個磁盤可分為正反兩面,每一面分成許多大大小小的同心圓,每個同心圓都稱為『磁軌』( track ),每個磁軌又可分成許多小的弧形區域,稱為『磁區』( sector )。請參考圖中標有『01(00)』、『02(01)』、『03(02)』……『3F(3E)』等十六進位數字的弧形區域,就是磁區,這些數字表示磁區編 號,磁區編號由一開始,這跟一般電腦的習慣不同。而由『01』、『02』、『03』…到『3F』等磁區所組成的一個圓,即為一個磁軌,磁軌由最外面,也就 是半徑最大的磁軌開始編號,所以由『01』、『02』、『03』…到『3F』磁區所組成的磁軌稱為第零軌。不同硬碟的一個磁軌所含的磁區數不同,每一面的 磁軌數也不相同,上面只是舉個例子方便說明而已。儘管每個硬碟磁區、磁軌數有多有少,但是都是從最外圈磁軌的第一號磁區開始記錄資料的。

() 內綠色的數值是另一種方式的磁區編號,此種編號方式稱為 LBA 邏輯磁區編號。它是由零開始一直到最大磁區,不分磁軌、磁面。

一般而言,硬碟大約由兩個或兩個以上的磁盤組成,當某一面的某個磁軌已記錄滿資料後,還有新資料要寫入時,卻不是寫入同一面的下一個內圈磁軌,而是 下一面的相對應的磁軌上。例如上圖中第零軌第零面 ( 也就是編號 01~3F 或 LBA 00~3E 磁區所組成的磁軌 ) 已寫滿資料後,若有新資料時,是寫在其背面的磁軌上,即第零軌第一面的磁區上,也就是 LBA 編號 3F~7D 的磁區上 ( 因為在背面,所以圖中並未表示出來 )。同樣地,若是這一軌也已寫滿,那麼就會寫在下一張磁盤的相對位置上,也就是第零軌第二面的磁區上 ( LBA 編號 BD~FB 所組成的磁軌上 )。就這樣,每一面磁盤上的磁軌由上往下,形成許多半徑大小不等的假想空心圓柱,稱為磁柱 ( cylinder ),您可以想像磁柱是許多磁軌疊在一起的假想圓柱,就像圖中的上半圖。

您也許會問:『為什麼要這樣安排?為何不一面寫完再換另一面呢?』因為如果這樣安排的話,變成一個磁軌寫完就得花時間移動磁頭到隔壁的內圈磁軌,而 磁頭的移動得靠步進電動機的機械移動,要花較多的時間,所以才設計成每磁柱寫完,才移到下一磁柱。

於是我們可以說,硬碟讀寫時,以磁柱 ( cylinder )、磁頭 ( head )、磁區 ( sector ) 這三個參數來表示所讀寫的資料位於硬碟的那一個位置。這就是有名的 C、H、S 表示法。小木偶整理如下:磁柱由最外面開始,由零開始編號一直到最大磁柱。每個磁柱再分為好幾個磁頭,因為磁盤每一面都有一個磁頭負責讀寫,所以以磁頭數 代表面,磁頭也是從零開始編號。磁柱上的每一面再細分成數個磁區,磁區是從一開始編號,這點很奇怪,與電腦上的習慣不同。每個磁區都可存入 512 個位元組的資料,這點卻是每顆硬碟都是如此。

而有另一種編號方式,稱之為 LBA 邏輯編號,若以此方式編號,則是以磁區為單位,不分磁柱、磁頭,而由 0 開始,依序由 0、1、2、3……一直到最大磁區為止。LBA 編號與 CHS 之間的換算,下 面會提到。

MBR 與分割表

底下要介紹作業系統如何使用硬碟。剛剛買來的硬碟必定要經過分割、格式化之後才能存放資料。而這分割後的資料記載著每個分割區大小、由那個磁柱到那 個磁柱,都記錄在一個稱為分割表 ( partition table )的地方,您可以想像分割表 是很重要的資料,如果損壞了,大概就找不著您要的資料了。這麼重要的資料,電腦業界規定都存放於硬碟的第零磁柱、第零磁頭、第一磁區,也就是最前面的磁區 裏,這個磁區稱為主啟動記錄 ( 即 MBR,master boot record )。在 MBR 裏除了分割表外,還有啟動程式。前面提過,每個磁區都佔 512 個位元組,MBR 磁區中的前 446 個位元組 ( 0~445 ) 用來存放啟動資料與程式,而接下來的 64 個位元組就是分割表,最後一個字組 ( 2 個位元組 ) 是 AA55H,作為識別之用。

分割表共有 64 個位元組,恰好可以描述四個分割區的性質 ( 即三個主要分割與一個擴充分割 ),所以每個分割用 16 個位元組來表示這個分割區的性質,說明如下:

偏移位址 大小
( 位元組 )
名  稱 說  明
00H 1 啟動狀態 80H 表示可啟動
00H 表示不可啟動
01H 1 起始磁頭  
02H 2 起始磁柱與
起始磁區 
起始磁區佔用 6 個位元,而起始磁柱佔用 10 個位元,分配情形是:

起始磁區: 這兩個位元組中,低位元組的 0~5 位元為起始磁區
起始磁柱: 這兩個位元組的高位元組為起始磁柱的 0~7 位元,這兩個位元組中,低位元組的 6~7 位元為起始磁柱的最高兩個位元 ( 第 8~9 位元 )
04H 1 檔案系統 06H、0EH:FAT16
0BH、0CH:FAT32
05H、 0FH:擴充分割
07H:NTFS 或 OS/2 HPFS
其餘參閱Andries Brouwer 所寫的 Partition types
05H 1 結束磁頭  
06H 2 結束磁柱
與磁區 
同起始磁柱與磁區
08H 4 分割區相
對位置 
距離 MBR 的磁區數,亦即此分割開始的 LBA 磁區編號或隱藏磁區數
0CH 4 磁區數 該分割磁區總數

某些檔案系統,用兩個識別碼來表示,例如 0BH、0CH 都是表示 FAT32,06H、0EH 都表示 FAT16,05H、0FH 都表示擴充分割,這是牽涉到硬碟容量的關係。早期硬碟容量較小,用 C、H、S 來定址磁區沒有問題,但是當硬碟容量超過 8.4G 時,就必須用 LBA 定址磁區。0BH、06H、05H 分別表示 FAT32、FAT16、擴充分割的 C、H、S 版;而 0CH、0EH、0FH 則表示用 LBA 定址磁區。( 參考後 面的延伸 INT 13H )

當用 LBA 定址磁區時,分割表內的起始或結束磁柱、磁頭、磁區就沒有用了,必須參考分割區相對位置那一欄的數值,才能找到真正磁區。

擴充分割表

擴充分割內可以分成許多邏輯硬碟,端視硬碟容量的大小,所以無法用固定的長度記錄各個邏輯硬碟的起始位置或大小等等,因此電腦業界的做法是用數個稱 為擴充分割表 ( extended partition table ) 的表格記錄這些資料。

擴充分割內的第一個磁區內含第一個擴充分割表,她的格式不僅和分割表相似,而且也都是存放在從該磁區的第 446 個位元組開始,往後算,總共 64 個位元組的資料裏。同樣也分成四等分,但是只用到前面兩份,後面兩份均填入零。第一個 16 位元組裏面所記載的資料是指這個邏輯硬碟的資料,而它的起始磁柱、磁頭、磁區,結束磁柱、磁頭、磁區或是分割區相對位置都是相對於擴充分割表所在位置,並 非實體硬碟的 MBR。第二個 16 位元組裏所記載的資料則是指下一個擴充分割表的資料,同樣的,其起始磁柱、磁頭、磁區,結束磁柱、磁頭、磁區或是分割區相對位置也都是相對於前一個擴充分 割表所在位置。

像這樣,就形成一個鏈狀的擴充分割表,每個擴充分割表的第一個 16 位元組表示這個邏輯硬碟的資料,而第二個 16 位元組則表示下一個擴充分割表的資料。但是,如果是最後一個邏輯硬碟的話,那麼只用到一份,後面三份均填入零,因此只要是第二份全部為零,系統就知道已經 是最後一個邏輯硬碟了。


INT 13 BIOS 服務程式

INT 13H 是 BIOS 提供的服務程式,它是用來提供軟碟、硬碟服務之用,例如格式化、讀取等等…,早期也有許多人利用 INT 13H 格式化不正常磁區/磁軌達到保護的目的。

INT 13H/AH=02H:讀取磁區

早期硬碟不大,是以 AH=02/INT 13H 讀取硬碟上磁區的資料。AL 表示想要讀取的磁區數,不可為零。DL 表示想要讀取的硬碟機名稱,如果是軟碟,0 表示 A:,1 表示 B:;如果是硬碟,則用 80H 代表第一個實體硬碟,81H 代表第二個實體硬碟。ES:BX 指向讀取後的資料存於記憶體何處。DH 是指所要讀取的磁頭編號,CX 表示磁柱及磁區編號,CL 較低的 6 個位元,即 0~5 位元,表示所要讀取的磁區編號,而較高的兩個位元以及 CH 的八個位元,合起來共 10 個位元表示磁柱編號 ( CH 的八個位元是磁柱編號的較低位元,CL 的 6、7 兩個位元是磁柱編號的較高位元 )。請參考下圖:

由上圖可知,用 10 個位元表示磁柱編號,最多可以有 1024 種編號 ( 210=1024 ),每個編號代表一磁柱,這編號由 0~1023 共 1024 個磁柱。同理,磁頭最多可以有 0~127 共 128 種;而磁區使用 6 個位元,所以有 64 種選擇,即 0~63,但是磁區都由編號一開始,所以磁區最多只有 1~63 個,即 63 個磁區。綜合以上說明︰磁柱最多為 1024 個,磁頭最多為 256 個,磁區最多為 63 個,而每磁區都固定有 512 個位元組,因此一顆硬碟最多只能容納︰

1024*256*63*512=8455716864

個位元組,亦即 8.4 GB ( 8.4GB 是以 1G=109來算,假如依電腦二進位算法,應該是 8455716864÷1024÷1024÷1024=8,即 8GB )。當然到了現在 ( 民國 92 年左右之後 ) 硬碟已經超過此容量了,所以 IBM 與微軟共同製定新的 INT 13H Extension 中斷服務程式 ( 延伸 INT 13H ),以解決此一問題。

這個新的延伸 INT 13H 改用 LBA 邏輯定址法 ( Logical Block Addressing ),不再用 CHS 參數來指定讀取的磁區,而用線性磁區編號指定磁區。舊的 INT 13H 資料甚多且已過時,所以小木偶就不做介紹,此章為了配合大硬碟,所以介紹了延伸 INT 13H 的幾個功能,其餘可查閱 Ralf Brown's Interrupt List

延伸 INT 13H/AH=41H:INSTALLATION CHECK

首先要介紹的是檢查 BIOS 是否支援延伸 INT 13H,呼叫前 AH=41H,BX=55AAH 表示檢查是否支援延伸 INT 13H,DL 表示硬碟機編號,80H 表示第一部實體硬碟機,81H 表示第二部實體硬碟機。返回時,若進位旗標被設定,表示不支援;若進位旗標被清除,表示支援延伸 INT 13H,AH 還表示延伸 INT 13H 的版本。

延伸 INT 13H/AH=42H:延伸讀取

當 AH=42H 時的功能是延伸讀取,使用此功能時,DL 是硬碟編號,和上面一樣,從 80H 開始,DS:DI 指向一個稱為 disk address packet 的結構體,此結構體內容為︰

disk_address_packet     STRUC
size_of_packet db ? ;此結構體大小
reserved db ? ;保留,必設為 0
number_of_block dw ? ;要讀取的磁區數
buffer_offset dw ? ;讀取磁區後,資料存放偏移位址
buffer_segment dw ? ;資料存放的段位址
LBA_number dq ? ;指定要讀取的磁區編號
flat_address dq ? ;指定平坦模式時,存放位址
disk_address_packet ENDS

在呼叫 AH=42H 功能之前,必須先設定好 disk address packet 結構體內的各個欄位。size_of_packet 欄位是結構體大小,其數值不是 10H 就是 18H,端視 buffer_offset、buffer_segment 是否可用。在 16 位元作業系統中這兩個欄位就是一般所慣用的 Segment:Offset 定址方式,此時不須用到最後一個欄位,所以 size_of_packet 為 10H 個位元組;但如果在平坦模式之下使用,則 buffer_offset、buffer_segment 這兩個欄位都是 0FFFFH,而此時位址須填入最後一欄的 flat_address 內,故 size_of_packet 為 18H 個位元組。LBA_number 則是要讀取的磁區編號,這個磁區編號也就是 LBA 邏輯磁區編號,從 0 開始一直到硬碟的最大磁區,其計算方式為

( 磁柱編號*每磁柱的磁頭數 + 磁頭編號 ) * 每軌磁區數 + 磁區編號 - 1

如果返回時,若進位旗標被清除,表示讀取成功;若進位旗標被設定,表示讀取錯誤,此時 disk_address_packet 結構體的 number_of_block 會被 BIOS 設定為實際讀取的磁區數。

延伸 INT 13H/AH=48H:獲得實體硬碟的資料參數

要取得一顆實體硬碟的資料參數,可用 AH=48H 功能,DL 表示要取得資料的硬碟編號,DS:SI 指向取得資料後的資料填放位址,此位址存放一個稱為 drive parameter 的結構體。drive_parameter 結構體欄位如下:

drive_parameter         STRUC
size_of_drive_parameter dw ? ;drive parameter 大小
information_flags dw ? ;
cylinder dd ? ;磁柱總數
head dd ? ;磁頭數
sector_per_track dd ? ;每軌磁區數
total_sectors dq ? ;磁區總數
byte_per_sector dw ? ;每磁區所含位元組數
drive_parameter ENDS

在呼叫 AH=48H 功能之前,除了必須先指定 DL、DS:SI 之外,還得先設定 drive_parameter 結構體的 size_of_drive_parameter 欄位,這個欄位的數值表示 drive_parameter 結構體的大小,可以有 1AH、1EH、42H 三種選擇,視您想獲得的資料詳盡程度與延伸 INT 13H 的版本決定,一般而言,1AH 大約就夠用了。假如呼叫成功,進位旗標會被清除,且 AH=0,DS:SI 所指的 drive parameter 結構體會填上適當的數值;若呼叫失敗,進位旗標會被設定,AH 內會被填入錯誤代碼。


略:程式語言


分割區

既已有了觀察磁區的利器,HDSV2.COM,我們就來觀察硬碟中每個分割區之間的關係。首先,我先大致介紹在 FAT16/32 分割區裏有那些重要的部份,下一章再詳細說明。說完 FAT16/32 分割區的概略部份之後,再用 HDSV2.COM 觀察小木偶的一顆 80GB 硬碟中,分割區之間如何劃分。

分割區的結構

在硬碟上的 FAT16 與 FAT32 分割區和軟碟結構有類似之處,都有一個稱為啟動磁區的特殊磁區,但不同的地方是軟碟片上的啟動磁區必定在邏輯編號第零磁區,而硬碟上的啟動磁區卻不是在第 零號 LBA 邏輯磁區。

前面提過,硬碟的第零號 LBA 邏輯磁區是 MBR,那麼硬碟上的啟動磁區在那裏呢?這個問題應該這樣回答, 硬碟上可以有數個分割區,假如是 FAT16 或 FAT32 分割區的話,每個分割區依序可分為四部份:保留磁區、FAT、根目錄以及資料磁區四部份,而啟動磁區必定在保留磁區的第一個磁區。第一個主要分割之前,一 般會保留若干磁區,這些磁區就是第零磁柱上的第零面所有磁區,這些磁區的第一個磁區就是 MBR,其他被保留的磁區一般是給啟動管理程式或是作為特殊用途 ( 病毒也常利用這塊區域為非作歹 )。這些磁區一般使用 DOS 中斷服務程式是無法見到的,故稱為隱藏磁區 ( 但是用 BIOS 的 INT 13H 可以存取)。

在隱藏磁區之後,就是第一個主要分割了,而第一個主要分割區的第一個磁區就是啟動磁區了,所以假如知道隱藏磁區數就找得著第一個主要分割的啟動磁 區。那麼怎麼知道隱藏的磁區有多少呢?原來在分割表的『分割區相對位置』處 ( 參考前 面的說明 ),會記載著該分割區的啟動磁區距離 MBR 有多少個磁區,這些磁區的數目就是隱藏磁區的數目。

同樣的,第二個主要分割與第三個主要分割的啟動磁區,也是在該分割的最前面磁區。所以只要找到分割表的『分割區相對位置』就能找到第二、三個主要 分割的啟動磁區。以另一個觀點來看,假如用 DOS 中斷服務程式讀取第二個主要分割磁區時 ( 例如用 INT 25H 或 AX=7305H/INT 21H ),必定無法指定邏輯磁區而能讀到第一個分割區的邏輯磁區,所以對第二個分割來說,第一個分割的所有磁區都是隱藏的磁區。同理,對第三個分割來說,第一個 分割與第二個分割的所有磁區也都是隱藏的磁區。

一個 FAT16 或 FAT32 分割的第一個磁區是啟動磁區,如果是 FAT16 分割的話,緊接著啟動磁區之後是兩個 FAT,如果是 FAT32 分割的話,在兩個 FAT 之前還有若干啟動備份等磁區,緊接著的才是 FAT。接著 FAT 的是根目錄,根目錄之後就是資料磁區了。綜合以上的說明,小木偶附上底下的圖片,說明一個硬碟經過分割後的分布情形。假設這個硬碟被分成兩個主要分割與一 個擴充分割,而擴充分割再繼續分成兩個邏輯硬碟,而這些邏輯硬碟都被格式化成 FAT16 或是 FAT32 檔案格式,那麼每個分割區與邏輯硬碟內的結構應該如下圖分布:

依照上圖,擴充分割內的第一個磁區內含擴充分割表,擴充分割表內有指向下一個擴充分割表及邏輯硬碟的資料,而每個擴充分割表之後與邏輯硬碟之前,也 有數個隱藏磁區。這種情形,跟第一個主要分割相同。或許我們可以這樣看,每個邏輯硬碟就像具體而微的實體硬碟,所以分割表 ( 更正確的說是擴充分割表 ) 和啟動磁區之間有隱藏磁區。

觀察

底下是小木偶用 HDSV2.COM 觀察一顆 Western Digital 80GB ( 型號 WD800BB ) 的硬碟,這顆硬碟有三個主要分割及一個擴充分割,這三個主要分割分別是安裝 DOS 6.20、Win 98 SE 及 Win XP,檔案系統分別是 FAT16、FAT32、NTFS。擴充分割再細分成兩個 16GB 的 FAT32、一個 20GB 的 NTFS、2 個安裝 Mandrake Linux 的 Ext2 及一個 Linux SWAP,總共 5 個邏輯硬碟。首先觀察這個硬碟的 MBR,在 MBR 的位址 1BEH~1FDH,這 64 個位元組就是分割表 ( 紫線框起的區域 ):


圖一

注意到位址 1C6H 開始的雙字組是 3FH ( 白框框起之處 ),此欄位是『分割區相對位置』,就表示第一個分割之前的 3FH 個磁區是隱藏的,此時您若改變 LBA 邏輯磁區到 3FH ( 按下『L』鍵,再輸入『3F』及 Enter 鍵 ),如下圖二,您就能夠看到第一個分割的啟動磁區了,注意到圖中的『LBA 磁區』已經變成 3FH 了。下圖二就是第一個分割的啟動磁區,也就是 DOS 6.20 的啟動磁區:


圖二

如果想找第二主要分割區的啟動磁區,可先到分割表的第二欄的『分割區相對位置』,請參考圖一中分割表的第二個分割的『分割區相對位置』的雙字組為 1F6080H ( 即白框之下的雙字組 ),就表示這個硬碟的第二個主要分割在第 1F6080H 個編號的邏輯磁區,改變 HDSV 中的『LBA 磁區』為第 1F6080H 個邏輯磁區就可以找到 Win 98 SE 的啟動磁區,如下圖三:


圖三

至於擴充分割區內可以有數個邏輯分割,而這些邏輯分割各自代表一個邏輯硬碟,要觀察擴充分割得先找到擴充分割起始磁區,請看圖一的分割表最後一欄, 您就會發現擴充分割開始的邏輯磁區是 1966DFAH ( 淺藍框框起之處 ),改變『LBA 磁區』到這個邏輯磁區,並按向下鍵觀察後 256 個位元組,如下圖四:


圖四

果然如前章所述,擴充分割表只佔兩個欄位,第一個是在此分割的邏輯硬碟所在位置,此位置是相對於擴充分割開始之處 ( 及紅框框起之處 ),所以第一個邏輯硬碟開始於此擴充分割表之後的 3FH 磁區處,所以這個邏輯硬碟的啟動磁區是在 LBA 第 1966DFAH+3FH 個邏輯磁區之處,亦即第 1966E39H,改變『LBA 磁區』到這個邏輯磁區就可以觀察到這個邏輯硬碟的啟動磁區:


圖五

如果要找第二個邏輯分割,就必須回到第一個擴充分割表的第二欄的『分割區相對位置』,亦即圖四中藍框框起之處。換句話說,第二個邏輯分割開始於第一 個擴充分割表之後的 1F1DD2FH 之處,所以第二個邏輯分割開始於 1966DFAH+1F1DD2FH,也就是 3884B29H,觀察這個 LBA 邏輯磁區的後 256 個位元組 ( 按向下鍵 ):


圖六

就可以找到第二個邏輯硬碟的啟動磁區是在 3884B68H ( 即 3884B29H+3FH,3FH 為灰色框框框起之處 ),其餘邏輯分割可照此步驟重複,就不再描述了。


結論

有了 HDSV2.COM 後,您可以觀察您自個兒的硬碟到底藏了那些東西,老實告訴你,我還發現硬碟裏藏污納垢的地方還真不少。




摘自:小木偶的網頁

深入硬碟內幕:
Ch 32 硬碟 (1) 分割區
Ch 33 硬碟 (2) FAT
Ch 34 硬碟 (3) 檔案離散


組合語言.目錄樹:

00.組合語言準備工作
01.第一個程式
02.DEBUG 的使用
03.ASCII 碼
04.十六進位數
05.副程式
06.再談 ASCII 碼
07.顯示十進位數
08.十六進位變十進位
09.顯示記憶體的內容
10.程式庫
11.EXE 可執行檔
12.字串
13.BCD 數(1)
14.BCD 數(2)
15.檔案處理(1)
16.檔案處理(2)
17.檔案處理(3)撰寫中
18.軟碟片
19.磁片地圖
20.光碟機(1)
21.光碟機(2)
22.FPU(1)簡介
23.FPU(2)二次方程式
24.FPU(3)指數
25.FPU(4)IEEE與BCD
26.巨集
27.條件組譯
28.輸出入埠(1)CMOS
29.輸出入埠(2)8253
30.DOS用80386
31.MASM6.x新增指令
32.硬碟(1)分割區
33.硬碟(2)FAT
34.硬碟(3)檔案離散
35.有號數
36.中斷
37.堆疊應用:運算式最新









arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Estar007 的頭像
    Estar007

    Never give up!永不放棄

    Estar007 發表在 痞客邦 留言(0) 人氣()