1.2 數據恢復相關知識
1.2.1 數據的表示方式
計算機內的數據一般分為無符號數和帶符號數兩種,對于無符號數而言,整個數據均為數值部分,也就是說,該數據是正數或者是零;對于帶符號的數據,在計算機中有3種表示方法:即原碼、補碼和反碼;它們都是由符號位和數值兩部分組成,數據最高位為符號位,符號位使用“0”表示正數,使用“1”表示負數;剩余位為數值部分。
1.原碼表示法
正數的符號位用“0”表示,而負數的符號位用“1”表示,數值部分按二進制的形式表示。
例1.1 已知X=+42,Y=-42,求:X、Y的八位和十六位二進制數的原碼并轉換為對應的十六進制數。
解:
(1)X和Y八位二進制數以及對應十六進制的原碼

(2)X和Y十六位二進制數以及對應十六進制的原碼

原碼表示很直觀,與真值轉換也很方便;但是原碼進行加、減運算時,符號位不能視同數值一起參與運算,這時需要通過判斷兩數的符號來決定兩數絕對值是做加法運算還是做減法運算,而且還要判斷兩數絕對值的大小,取絕對值大的數的符號作為結果的符號,這樣運算規則不僅復雜,而且運算時間長。
2.反碼表示法
正整數的反碼表示與其原碼表示相同;負整數的反碼表示是將該數的原碼除符號位以外其余各位取反。
例1.2 已知X=+42,Y=-42,求:X、Y的八位和十六位二進制數的反碼并轉換為對應的十六進制數。
解:
(1)X和Y八位二進制數以及對應十六進制的反碼

(2)X和Y十六位二進制數以及對應十六進制的反碼

3.補碼表示法
正整數的補碼表示與其原碼表示相同;負整數的補碼表示為先求該數的反碼,再在最低位加1,即負整數的補碼等于其反碼加1。
補碼是計算機中用得最多的一種帶符號數表示,因為計算機中最多的運算是加、減運算,補碼的表示使符號位可以和有效數值部分一起直接參與加、減運算,無須像原碼那樣對符號位進行判斷,從而簡化了運算規則,提高了機器運算速度。因此,在計算機中對于帶符號的數值一般是以補碼表示的。
例1.3 已知X=+42,Y=-42,求:X、Y的八位和十六位二進制數的補碼并轉換為對應的十六進制數。
解:
(1)X和Y八位二進制數以及對應十六進制的補碼

求Y的補碼,先求Y的反碼:

由于負整數的補碼等于反碼加1,
因此,[Y]補=[Y]反+(1)2=(11010101+1)2=(11010110)2=(D6)16
(2)X和Y十六位二進制數以及對應十六進制的補碼

求Y的補碼,先求Y的反碼:

由于負整數的補碼等于反碼加1,
因此,[Y]補=[Y]反+(1)2=(1111 1111 1101 0110)2=(FFD6)16
1.2.2 數據的存儲形式
數據的存儲形式,也就是數據在存儲器中的存放順序。在表示數值的大小時,由于1字節最大只能表示到255(注:無符號數),如果要表示大于255的數據,則需要N字節,其中:N為大于或者等于2的正整數,這就存在N字節在存儲器中存放順序的問題;在存儲器中對N字節組成的數據有大頭位序和小頭位序兩種存儲形式。
1.大頭位序(Big-Endian)
采用大頭位序存儲的數據,在存儲器中的存放順序是:從左到右為最高字節向最低字節依次存放,即高字節存放在前(左)、低字節存放在后(右)。
假設某數據由N字節組成,其中:N為大于或者等于2的正整數;N字節分別為“X1,X2,X3,…,XN”,如果采用大頭位序存儲,在存儲器中的存放順序為“X1 X2 X3 …XN”;則該數據的值為X1X2X3…XN。
例1.4 十進制數143360,轉換成十六進制數為23000;在存儲器中至少需要3字節來存儲該數據。十進制數143360采用大頭位序在存儲器中分別占用3至8字節的存儲形式見表1.1所列。
表1.1 采用大頭位序在存儲器中的存儲形式

如果該數據占用9字節,則在該數據前(左)添加1字節值“00”,以此類推。
2.小頭位序(Little-Endian)
采用小頭位序存儲的數據,其數據在存儲器中的存放順序是:從左到右為最低字節向最高字節依次存放,即低字節存放在前(左)、高字節存放在后(右)。
假設某數據由N字節組成,其中:N為大于或者等于2的正整數;N字節分別為“X1,X2,X3,…,XN”,如果采用小頭位序存儲,在存儲器中的存放順序為“X1 X2 X3 …XN”;則該數據的值為XN…X3X2X1。
例1.5 十進制數143360,轉換成十六進制數為23000;在存儲器中至少需要3字節來存儲該數據。十進制數143360采用小頭位序在存儲器中分別占用3至8字節的存儲形式見表1.2所列。
表1.2 采用小頭位序在存儲器中的存儲形式

如果該數據占用9字節,則在該數據后(右)添加1字節值“00”,以此類推。
不同的分區形式、文件系統,數據的存放形式不同。在MBR分區、GPT分區、FAT32和NTFS文件系統中,數據的存儲形式采用小頭位序;而在動態磁盤的LDM數據庫中數據存儲形式則是采用大頭位序。
1.2.3 計算機的啟動過程
計算機的啟動過程主要由以下幾個步驟組成。
(1)開機,BIOS加電自檢,如果自檢正常,則轉到第2步;自檢不正常,則出現錯誤提示或者響聲并死機。
(2)根據CMOS的設置開始啟動,將硬盤(假設CMOS的設置是硬盤為第一啟動順序)的0號扇區(即硬盤0磁頭0柱面1扇區,也就是主引導扇區)讀入內存地址0000:7C00處,并且從0000:7C00處開始執行。
(3)檢查0000:7DFE是否等于0XAA55。若不等于則轉去嘗試其他介質;如果沒有其他啟動介質,則顯示“No ROM BASIC”,然后死機。
(4)主引導記錄先將自己復制到0000:0600處,然后繼續執行。
(5)在主分區表中搜索標志為活動的分區。如果發現沒有活動分區或者不止一個活動分區,則停止。
(6)將活動分區的第一個扇區讀入內存地址0000:7C00處。
(7)檢查0000:7DFE是否等于0XAA55,若不等于則顯示“Missing Operating System”,然后停止。
(8)跳轉到0000:7C00處繼續執行特定系統的啟動程序。
以上步驟是標準的硬盤主引導扇區,多系統引導程序的引導過程與此不同;多系統引導程序(如:Smart Boot Manager,BootStar,PQBoot等)是將標準主引導記錄替換成自己的引導程序,在運行系統啟動程序之前讓用戶選擇想要啟動的分區。而某些系統自帶的多系統引導程序(如:LILO、NT Loader、一鍵還原等),則可以將自己的引導程序放在系統所處分區的0號扇區中,在Linux中即為兩個扇區的Super Block。有關多系統引導程序,請讀者參閱有關資料。