會員 | 當拷貝機遇到78 Bytes 原本想寫一個比較方便的硬碟對硬碟的 GHOST 小程式 但是經過兩三個小時透過 DEBUG 寫出使用 LBA 的方式拷貝硬碟 以一個硬碟的磁扇區對另一個硬碟的同一個磁扇區複製 寫出的程式碼在沒有 Display (PS:也就是不顯示拷貝多少磁扇區的訊息)的狀況下只需要 78 Bytes 而且支援超大硬碟的拷貝, 最大支援 18446744073709551616 Sector 的 LBA MODE 硬碟對拷 也就是 9444732965739290427392 bytes 也就是 9223372036854775808 Kbytes 也就是 9007199254740992 Mbytes 也就是 8796093022208 Gbytes 也就是 8589934592 Tbytes 也就是 8388608 Pbytes 也就是 8192 Ebytes 也就是 8 Zbytes 只需在 INT 13 後加上判斷 CF = 0 則繼續下一個磁扇區的複製, 若 CF = 1 則跳出 依我的 CPU CyRIX 166MHZ 超頻到 PR233 實際是 187MHZ 跑 30000000 次的 CPU 指令只需 0.13 秒左右. 判斷 2T 硬碟的 SECTOR 數量 4294967296 個 SECTOR , 除了讀入和寫出時間外, 會增加 (0.13秒 * (4294967296/30000000)) = 判斷 CF 是否為 0 , COPY 2T 的硬碟會多浪費約 18.6 秒多的時間來判斷 每一個 Sector COPY 的 CF 是否等於 1 2T 以下硬碟對拷的程式碼會縮減到 60 個 BYTES 以下. 因為可以省下 MOV BP,[SI+12] INC BP MOV [SI+12],BP JO ??? JMP (跳到MOV AX,4200) 的 BYTES 數 * 2 算了一下大約可以省 22 Bytes 記憶體空間也不需要太大, 除了本身的 78 Bytes 和 16 Bytes 的 Disk Address Packet 外, 只要能放 1 個 Sector 的 512Bytes 當 兩個硬碟的 Swap 空間就夠了. 只要將這 78 Bytes 放到一張磁片或是燒到光碟. 用這張磁片或是光碟開機, 那 PC 就變拷貝機. 這 78 Bytes 一經 BIOS 載入執行, 就會開始對 第一個硬碟的 Sector 內的資料 COPY 到 第二個硬碟相同位置的 Sector 內. 經測試, 因為沒有兩個未用的硬碟只好設定計數 20 從 LBA:1 開始 先修改 Cylinder:0 Head:0 Sector:2 前 16 Bytes 和 Cylinder:0 Head:0 Sector:21 前 16 Bytes 然後把第一個硬碟(接在 IDE0)的 Cylinder:0 Head:0 Sector:2 到 21 Copy 到第二個硬碟(接在 IDE1)的 Cylinder:0 Head:0 Sector:2 到 21 執行完後查看 第二個硬碟的 Cylinder:0 Head:0 Sector:2 和 Cylinder:0 Head:0 Sector:21 結果確實將第一個硬碟的資料完整的 Copy 到第二個硬碟相同位置內 然後修改讀取資料到 大於 8GB 的位置 00 00 00 00 01 22 7B 60 (9GB多的位置), 讀取一個磁扇區的資料, 就是我的擴展分區的第一個磁扇區 發現確實讀出我的擴展分區的資料. 至此, 完成了我的第一部 PC 的硬碟拷貝機 僅 78 Bytes 沒有完全釋放 Source Code 是因為殺傷力太大. 如果有人裝錯, 資料立刻全部不見. 現在想到另一個方法就是將目的硬碟寫一個扇區的資料. 然後自動判斷到有這個扇區資料的為目的硬碟. 變成要 COPY 前要先把目的硬碟裝上 Run 一個程式. |
回覆 |
|
類似的主題 | ||||
主題 | 主題作者 | 討論版 | 回覆 | 最後發表 |
線路地下化之後速度驟降至 6K Bytes ??!! | surfacer | ---- ADSL 抱 怨 與 鼓 勵 | 5 | 2001-01-18 03:14 PM |
XML | RSS 2.0 | RSS |
本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。