banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Các thủ tục đọc ghi ... với đĩa cứng !!  XML
  [Programming]   Các thủ tục đọc ghi ... với đĩa cứng !! 13/09/2007 13:15:26 (+0700) | #1 | 84794
[Avatar]
ducbinh1986
Member

[Minus]    0    [Plus]
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
[Profile] [PM]
Mình cần code của mấy cái này mọi người có thì share cho mình với :

1-Trương trình truy nhập và giải mã tham số boot sector
2-Thủ tục đọc FAT và đổi địa chỉ
3-Thủ tục đọc thư mục gốc
4-Thủ tục đọc cluster theo sector

Đây là các thủ tục đọc dữ liệu lưu trữ trên đĩa cứng của hệ điều hành (ở mức cluster và sector) bạn nào có code (hoặc viết được cũng được) cho mình với mình đang cần.
Thanks mọi người trước.
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 18/09/2007 10:35:22 (+0700) | #2 | 85567
[Avatar]
ducbinh1986
Member

[Minus]    0    [Plus]
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
[Profile] [PM]
Không biết cái này là lập trình hay chỉ đơn giản là code của HĐH nhỉ ?
Chả nhẽ bó tay với cái này hả các bạn smilie .
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 18/09/2007 14:27:56 (+0700) | #3 | 85585
ductv
Member

[Minus]    0    [Plus]
Joined: 08/11/2005 08:34:12
Messages: 7
Offline
[Profile] [PM]
nếu bạn nắm được cấu trúc bảng FAT thì việc viết code đọc FAT không khó. Mình không có code chạy con này nhưng nếu bạn học ở Bách Khoa Hà nội thì ra mua quyển giáo trình Hệ Điều Hành của thầy Nguyễn Thanh Tùng. trong đó có list code sẵn rùi đó.
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 19/09/2007 08:28:42 (+0700) | #4 | 85701
[Avatar]
ducbinh1986
Member

[Minus]    0    [Plus]
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
[Profile] [PM]

ductv wrote:
nếu bạn nắm được cấu trúc bảng FAT thì việc viết code đọc FAT không khó. Mình không có code chạy con này nhưng nếu bạn học ở Bách Khoa Hà nội thì ra mua quyển giáo trình Hệ Điều Hành của thầy Nguyễn Thanh Tùng. trong đó có list code sẵn rùi đó. 


Mình đang theo học tại Hải Phòng không có điều kiện lên HN bạn à nếu bạn có quyển giáo trình đó (word hoặc pdf) thì cho mình xin hoặc không bạn cho mình xin cái code cũng được.
Thank bạn.
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 19/09/2007 11:10:36 (+0700) | #5 | 85722
[Avatar]
tmd
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 03:39:48
Messages: 2951
Offline
[Profile] [PM]
Tham khảo cuốn http://ebook.icefile.org/index.php?page=main&id=a4c87043&name=1565922492.rar(nếu theo Microsoft)

Hoặc tham khảo cuốn http://ebook.icefile.org/index.php?page=main&id=a8d2a957&name=0735619174.rar

Hoặc mấy cuốn http://www1.vista-server.com/uploadfile/6/1/8/14375160108.zip. Và nhiều cuốn về UNIX và các hệ khác không phải windows.(nhiều lắm)

Hoặc http://www1.vista-server.com/uploadfile/6/5/8/10575851738.zip

cuối cùng là Google.com.vn





3 giai đoạn của con... người, ban đầu dek biết gì thì phải thăm dò, sau đó biết rồi thì phải thân thiết, sau cùng khi quá thân thiết rồi thì phải tình thương mến thương. Nhưng mà không thương được thì ...
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 19/09/2007 12:03:47 (+0700) | #6 | 85725
[Avatar]
ducbinh1986
Member

[Minus]    0    [Plus]
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
[Profile] [PM]
Em seach google.com với từ khóa : function read FAT nhưng nó toàn ra những cái linh tinh.
Bác có thể cho em key word của mấy cái thủ tục em cần tìm không (key để seach trên google ấy).
Thank bác nhìu.
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 19/09/2007 12:26:28 (+0700) | #7 | 85727
[Avatar]
tmd
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 03:39:48
Messages: 2951
Offline
[Profile] [PM]
Tự kiếm bằng kiến thức của bạn học được đi, chắc đi từ C++,C . Tui bó tay với U luôn. Tui không phải dân lập trình. Tìm hiểu các thuật ngữ chuyên ngành tiếng Anh để tìm đúng thứ mình cần trên Google, hoặc từ sách vở tiếng Việt. Hợp ngữ, C,C++ các ngôn ngữ đều có chuyện thao tác trên file... và tương tự như bạn nói.

Không ai giúp giải bải tập giùm cho bạn đâu. Vào mấy trang như codeproject mà tham khảo. Có thể nó vượt khỏi hiểu biết hiện tại của bạn, nên chuyện tìm kiếm thông tin về nó quá khó như vậy. Đọc mấy cuốn sách tiếng Anh kia cũng có tí chút. Tốt nhất đọc sách C/C++ về thao tác trên ổ đĩa,tập tin, cluster,sector tiếng Việt gì đó, rồi hỏi thầy về giáo trình, hỏi google,... tiếng gì cũng ra.
Học đại học thì hỏi thầy nhiều vào, hỏi cho tới khi mấy cha già dân tộc đó bỏ chạy thì thôi.

Có thể coi thử sách thương mại từ mấy cái trang này
http://www.amazon.com/gp/bestsellers/books/3659/ref=pd_ts_pg_2/105-3358193-1555648?ie=UTF8&pg=2
http://www.amazon.com/gp/bestsellers/books/3818/ref=pd_ts_b_nav/105-3358193-1555648
PS: Tìm kiếm google theo từ rời rạc cũng ra kết quả, có hạn chế cho bà con không hiểu nghĩa chuyên ngành.
3 giai đoạn của con... người, ban đầu dek biết gì thì phải thăm dò, sau đó biết rồi thì phải thân thiết, sau cùng khi quá thân thiết rồi thì phải tình thương mến thương. Nhưng mà không thương được thì ...
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 19/09/2007 12:44:12 (+0700) | #8 | 85729
[Avatar]
ducbinh1986
Member

[Minus]    0    [Plus]
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
[Profile] [PM]
Cái này là code của HĐH làm việc với bảng FAT chứ có phải lập trình gì gì đâu bác tmd cái này là sưu tầm code (dĩ nhiên là không phải do mình viết ra rồi) với lại em không phải là dân lập trình (em toàn thi rớt mấy môn này ở trường thui smilie ) nên có cho em code em cũng chả hiểu chứ nói gì đến chuyện viết ra nó.
Cái này là sưu tầm thui chứ không phải lập trình bác hiểu nhầm rồi.
Còn chuyện em hỏi bác key word vì em nghĩ bác dùng gooogle quen rùi mấy cái key đó bác có kinh nghiệm search có kết quả nhanh và chính xác hơn em (em cũng đã thử tìm rồi nhưng rất tiếc kết quả ko như mong đợi nên muốn hỏi bác xem kết quả có khả quan hơn không).
Cảm ơn bác về lời góp ý của bác.
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 19/09/2007 12:51:38 (+0700) | #9 | 85730
mfeng
Researcher

Joined: 29/10/2004 15:16:29
Messages: 243
Offline
[Profile] [PM]
Một số tài liệu tiếng Anh về FAT32:
http://home.teleport.com/~brainy/fat32.htm
http://www.easeus.com/resource/fat32-disk-structure.htm
(Các tài liệu trên dễ dàng tìm thấy bằng google, keyword: FAT32 structure)

Còn đây là tài liệu tiếng Việt, có mô tả cấu trúc Master Boot Record, Boot Sector, Root Directory, FAT entries, cách chuyển đổi giữa CHS và absolute sector, cluster...

http://rapidshare.com/files/56584414/FAT32.rar

Bạn cần xác định chương trình đọc/ghi đĩa cứng chạy trên nền tảng nào. Nếu là DOS thực hoặc Win9x, có thể truy cập trực tiếp qua intr 13h extension của BIOS (tra cứu techhelp hoặc tìm technical document về Intr này).

Nếu chương trình chạy trên Win2k/XP, do các HĐH này giới hạn truy cập trực tiếp thiết bị vật lý, do đó chỉ có thể truy cập thông qua API của HĐH: là các hàm CreateFile, ReadFile, WriteFile...
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 19/09/2007 13:40:34 (+0700) | #10 | 85734
[Avatar]
ducbinh1986
Member

[Minus]    0    [Plus]
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
[Profile] [PM]

light.phoenix wrote:
Bạn cần xác định chương trình đọc/ghi đĩa cứng chạy trên nền tảng nào. Nếu là DOS thực hoặc Win9x, có thể truy cập trực tiếp qua intr 13h extension của BIOS (tra cứu techhelp hoặc tìm technical document về Intr này).
 


Cái này chính xác là cái em cần tìm vì yêu cầu đưa ra chỉ cần là code do HĐH thực hiện để đọc bảng FAT và thư mục gốc thôi.
Đây là mấy cái hàm em tìm được bác xem có đúng là nó không :

Code:
; Subroutine to test for INT13 Extensions

7CAA B441          MOV     AH,41        ; Function 41h of INT 13:
7CAC BBAA55        MOV     BX,55AA      ; (with BX = 55AAh) is a check for
                                        ;  the "Installation of the INT 13
                                        ;  BIOS Extensions" in Memory.
7CAF 8A162400      MOV     DL,[0024]    ; -> 80h (for First drive).
7CB3 CD13          INT     13

7CB5 720F          JB      7CC6             ; Return
7CB7 81FB55AA      CMP     BX,AA55
7CBB 7509          JNZ     7CC6             ; Return
7CBD F6C101        TEST    CL,01
7CC0 7404          JZ      7CC6             ; Return
7CC2 FE061400      INC     BYTE PTR [0014]
7CC6 C3            RET


Code:
; Subroutine to Read all 16 Sectors of Boot Code into Memory

7CC7 6660        * pushad           ; Push all "Double" Registers onto the
                                    ;  stack: EAX, ECX, EDX, EBX, original
                                    ;         ESP, EBP, ESI, and EDI.
7CC9 1E            PUSH    DS
7CCA 06            PUSH    ES
7CCB 66A11000    * mov     eax,[0010] ; "Must always be zero for NTFS!"
7CCF 6603061C00  * add     eax,[001C] ;  Number of "Hidden Sectors"
7CD4 663B062000  * cmp     eax,[0020] ;  Apparent Sectors in partition.
7CD9 0F823A00    * jb      7D17       ;  Can't have more "Hidden Sectors"
                                      ;   than the total you start with!
7CDD 1E            PUSH    DS
7CDE 666A00      * push    00000000
7CE1 6650        * push    eax
7CE3 06            PUSH    ES
7CE4 53            PUSH    BX
7CE5 6668100001  * push    00010010
     00
7CEB 803E140000    CMP     BYTE PTR [0014],00
7CF0 0F850C00    * jnz     7D00
7CF4 E8B3FF        CALL    7CAA         ; Check for Extended INT13 code.
7CF7 803E140000    CMP     BYTE PTR [0014],00
7CFC 0F846100    * jz      7D61         ; Extensions are not installed.
                                        ; -> "A disk read error..." etc.

7D00 B442          MOV     AH,42        ; Function 42h of INT 13:
                                        ;    " Extended Read "
7D02 8A162400      MOV     DL,[0024]    ; -> "80h" (first hard drive).
7D06 16            PUSH    SS
7D07 1F            POP     DS
7D08 8BF4          MOV     SI,SP
7D0A CD13          INT     13

7D0C 6658        * pop     eax
7D0E 5B            POP     BX
7D0F 07            POP     ES
7D10 6658        * pop     eax
7D12 6658        * pop     eax
7D14 1F            POP     DS
7D15 EB2D          JMP     7D44

7D17 6633D2      * xor     edx,edx
7D1A 660FB70E18  * movzx   ecx,word [0018]  ; [7C18] = Sectors per Track
     00
7D20 66F7F1      * div     ecx
7D23 FEC2          INC     DL
7D25 8ACA          MOV     CL,DL
7D27 668BD0      * mov     edx,eax
7D2A 66C1EA10    * shr     edx,10
7D2E F7361A00    * div     word [001A]   ; [7C1A] = Number of Heads
7D32 86D6          XCHG    DL,DH
7D34 8A162400      MOV     DL,[0024]     ; [7C24] = Hard Drive Number
7D38 8AE8          MOV     CH,AL
7D3A C0E406      * shl     ah,06
7D3D 0ACC          OR      CL,AH
7D3F B80102        MOV     AX,0201       ; Function 02h of INT 13:
7D42 CD13          INT     13            ; "Read Sector into Memory"

7D44 0F821900    * jb      7D61          ; -> "A disk read error..." etc.
7D48 8CC0          MOV     AX,ES
7D4A 052000        ADD     AX,0020       ; Add another 200h (512 bytes) to
7D4D 8EC0          MOV     ES,AX         ;    the Segment pointer in ES.
7D4F 66FF061000  * inc     dword [0010]    ; 
7D54 FF0E0E00      DEC     WORD PTR [000E] ; Decrement the Count of how
                                           ; many Sectors are left to read
7D58 0F856FFF    * jnz     7CCB
7D5C 07            POP     ES
7D5D 1F            POP     DS
7D5E 6661        * popad
7D60 C3            RET

--------------------------------------------------------------------------------

7D61 A0F801        MOV     AL,[01F8]   ; Contains 83h (for all Languages)
                                       ; -> "A disk read error occurred"
7D64 E80900        CALL    7D70        ; DISPLAY MESSAGE
7D67 A0FB01        MOV     AL,[01FB]   ; Contains C9h (for English).
                                       ; -> "Press Ctrl+Alt+Del to restart"
7D6A E80300        CALL    7D70        ; DISPLAY MESSAGE
7D6D FB            STI
7D6E EBFE          JMP     7D6E        ; Endless Loop -> Lock-up System,
                                       ;       so a reboot is necessary!

7D70 B401          MOV     AH,01       ; An alternate method to add 100h to
                                       ; the AX register for the Message 
7D72 8BF0          MOV     SI,AX       ; Offsets in AL -> Error Messages.
7D74 AC            LODSB               ; Load Error Message strings 1 byte
                                       ;    at a time and INC SI pointer.
7D75 3C00          CMP     AL,00       ; Look for Zero-byte terminator in
                                       ;    the Error Message strings.
7D77 7409          JZ      7D82        ; Return (done)
7D79 B40E          MOV     AH,0E       ; Function 0Eh of INT 10:
                                       ; "Teletype Output" (One Character)
7D7B BB0700        MOV     BX,0007     ; (BH=Page Zero; BL=Normal display)
7D7E CD10          INT     10
7D80 EBF2          JMP 7D74            ; Do it all over again . . .
7D82 C3            RET


Nếu không phải bác có thể cho em cái code mà bác đang nói đến không (em tham khảo).
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 20/09/2007 10:39:20 (+0700) | #11 | 85832
[Avatar]
tmd
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 03:39:48
Messages: 2951
Offline
[Profile] [PM]
Không có mục đích sưu tầm cụ thể thì chịu, không biết search cái gì. Mấy cái tài liệu ở trên, có cái mô tả kỹ về cấu trúc của mấy thứ bạn nói, kỹ tới chi tiết như cái file system forensics analysis, còn mấy cái kia là trong môi trường windows, có thể chẳng ăn nhập gì với chuyện sưu tầm code. Bạn cũng chẳng biết mình muốn sưu tầm cái code của ngôn ngữ nào nữa. Cái này là bó xác ướp. Tốt nhất là bạn tự rèn cái kỹ năng search google cho chính mình.
3 giai đoạn của con... người, ban đầu dek biết gì thì phải thăm dò, sau đó biết rồi thì phải thân thiết, sau cùng khi quá thân thiết rồi thì phải tình thương mến thương. Nhưng mà không thương được thì ...
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 20/09/2007 11:57:50 (+0700) | #12 | 85848
[Avatar]
ducbinh1986
Member

[Minus]    0    [Plus]
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
[Profile] [PM]

tmd wrote:
Không có mục đích sưu tầm cụ thể thì chịu, không biết search cái gì. Mấy cái tài liệu ở trên, có cái mô tả kỹ về cấu trúc của mấy thứ bạn nói, kỹ tới chi tiết như cái file system forensics analysis, còn mấy cái kia là trong môi trường windows, có thể chẳng ăn nhập gì với chuyện sưu tầm code. Bạn cũng chẳng biết mình muốn sưu tầm cái code của ngôn ngữ nào nữa. Cái này là bó xác ướp. Tốt nhất là bạn tự rèn cái kỹ năng search google cho chính mình.  


Bác tmd có lẽ nhầm lẫn vì mục đích sưu tầm của mình là rất rõ ràng và cụ thể (mình sưu tầm code của các thủ tục mà HĐH dùng để đọc bảng FAT thư mục gốc và cluster ..).

ducbinh1986 wrote:
Mình cần code của mấy cái này mọi người có thì share cho mình với :

1-Trương trình truy nhập và giải mã tham số boot sector
2-Thủ tục đọc FAT và đổi địa chỉ
3-Thủ tục đọc thư mục gốc
4-Thủ tục đọc cluster theo sector  


Còn về ngôn ngữ thì do HĐH chứ không phải do mình vì mình sưu tầm chứ ko viết code.
Mình cũng xin nói lại là mình rất dốt khoản lập trình nên có cho mình code mình đọc cũng không hiểu vì thế mình không có tham vọng viết được cái code của nó mình chỉ quan tâm đến chỗ nào có code là mình copy về đem nộp thui smilie .
Còn về kỹ năng search google của mình thì đúng là kém thật mình đang học TA để có thể nâng cao kỹ năng tìm kiếm của mình.
Cảm ơn bài góp ý của bạn.
P/s: quên mất mình muốn
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 20/09/2007 12:34:53 (+0700) | #13 | 85853
TQN
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
[Profile] [PM] [WWW] [Yahoo!]
Bó tay.com luôn. Code có sai, làm gì trong đó, ra sao, ngôn ngữ gì cũng không cần biết, chỉ cần có cái đem nộp thôi. Như vầy thì học lập trình làm chi ? Nộp bài để đối phó à, tốn tiền học phí vô ích !
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 21/09/2007 05:21:49 (+0700) | #14 | 85983
[Avatar]
ducbinh1986
Member

[Minus]    0    [Plus]
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
[Profile] [PM]
Mình đâu có nói đây là bài tập môn học lập trình đâu.
Môn này không phải là một môn lập trình nó là môn nguyên lý hệ điều hành và bài tập này thầy giáo yêu cầu là sưu tầm code chứ không phải là tự lập trình nên những đoạn code đó có lẽ các bạn hiểu nhầm topic này ( nếu thế thật thì cho mình xin lỗi vì dùng từ ngữ không chính xác làm mọi người hiểu nhầm).
Mình cũng xin nói lại lần nữa để mọi người không hiểu nhầm : đây không phải là một bài lập trình hệ thống bình thường, không đòi hỏi phải tự tay viết nên cái code của các thủ tục trên mà đơn giản chỉ là sưu tầm và biên soạn lại cái code của các thủ tục trên sao cho chính xác nhất vậy thôi.
Như vậy là mình làm đúng như yêu cầu của bài tập thui chứ không phải là làm một cách đối phó hay lãng phí tiền học (cái này ThangCuEm có lẽ hơi nặng lời rồi smilie ).
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 24/09/2007 07:42:20 (+0700) | #15 | 86547
[Avatar]
ducbinh1986
Member

[Minus]    0    [Plus]
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
[Profile] [PM]
Đây là code mình tìm được post lên cho những ai quan tâm :
Code:
; Subroutine to Read all 16 Sectors of Boot Code into Memory

7CC7 6660        * pushad           ; Push all "Double" Registers onto the
                                    ;  stack: EAX, ECX, EDX, EBX, original
                                    ;         ESP, EBP, ESI, and EDI.
7CC9 1E            PUSH    DS
7CCA 06            PUSH    ES
7CCB 66A11000    * mov     eax,[0010] ; "Must always be zero for NTFS!"
7CCF 6603061C00  * add     eax,[001C] ;  Number of "Hidden Sectors"
7CD4 663B062000  * cmp     eax,[0020] ;  Apparent Sectors in partition.
7CD9 0F823A00    * jb      7D17       ;  Can't have more "Hidden Sectors"
                                      ;   than the total you start with!
7CDD 1E            PUSH    DS
7CDE 666A00      * push    00000000
7CE1 6650        * push    eax
7CE3 06            PUSH    ES
7CE4 53            PUSH    BX
7CE5 6668100001  * push    00010010
     00
7CEB 803E140000    CMP     BYTE PTR [0014],00
7CF0 0F850C00    * jnz     7D00
7CF4 E8B3FF        CALL    7CAA         ; Check for Extended INT13 code.
7CF7 803E140000    CMP     BYTE PTR [0014],00
7CFC 0F846100    * jz      7D61         ; Extensions are not installed.
                                        ; -> "A disk read error..." etc.

7D00 B442          MOV     AH,42        ; Function 42h of INT 13:
                                        ;    " Extended Read "
7D02 8A162400      MOV     DL,[0024]    ; -> "80h" (first hard drive).
7D06 16            PUSH    SS
7D07 1F            POP     DS
7D08 8BF4          MOV     SI,SP
7D0A CD13          INT     13

7D0C 6658        * pop     eax
7D0E 5B            POP     BX
7D0F 07            POP     ES
7D10 6658        * pop     eax
7D12 6658        * pop     eax
7D14 1F            POP     DS
7D15 EB2D          JMP     7D44

7D17 6633D2      * xor     edx,edx
7D1A 660FB70E18  * movzx   ecx,word [0018]  ; [7C18] = Sectors per Track
     00
7D20 66F7F1      * div     ecx
7D23 FEC2          INC     DL
7D25 8ACA          MOV     CL,DL
7D27 668BD0      * mov     edx,eax
7D2A 66C1EA10    * shr     edx,10
7D2E F7361A00    * div     word [001A]   ; [7C1A] = Number of Heads
7D32 86D6          XCHG    DL,DH
7D34 8A162400      MOV     DL,[0024]     ; [7C24] = Hard Drive Number
7D38 8AE8          MOV     CH,AL
7D3A C0E406      * shl     ah,06
7D3D 0ACC          OR      CL,AH
7D3F B80102        MOV     AX,0201       ; Function 02h of INT 13:
7D42 CD13          INT     13            ; "Read Sector into Memory"

7D44 0F821900    * jb      7D61          ; -> "A disk read error..." etc.
7D48 8CC0          MOV     AX,ES
7D4A 052000        ADD     AX,0020       ; Add another 200h (512 bytes) to
7D4D 8EC0          MOV     ES,AX         ;    the Segment pointer in ES.
7D4F 66FF061000  * inc     dword [0010]    ; 
7D54 FF0E0E00      DEC     WORD PTR [000E] ; Decrement the Count of how
                                           ; many Sectors are left to read
7D58 0F856FFF    * jnz     7CCB
7D5C 07            POP     ES
7D5D 1F            POP     DS
7D5E 6661        * popad
7D60 C3            RET

--------------------------------------------------------------------------------

7D61 A0F801        MOV     AL,[01F8]   ; Contains 83h (for all Languages)
                                       ; -> "A disk read error occurred"
7D64 E80900        CALL    7D70        ; DISPLAY MESSAGE
7D67 A0FB01        MOV     AL,[01FB]   ; Contains C9h (for English).
                                       ; -> "Press Ctrl+Alt+Del to restart"
7D6A E80300        CALL    7D70        ; DISPLAY MESSAGE
7D6D FB            STI
7D6E EBFE          JMP     7D6E        ; Endless Loop -> Lock-up System,
                                       ;       so a reboot is necessary!

7D70 B401          MOV     AH,01       ; An alternate method to add 100h to
                                       ; the AX register for the Message 
7D72 8BF0          MOV     SI,AX       ; Offsets in AL -> Error Messages.
7D74 AC            LODSB               ; Load Error Message strings 1 byte
                                       ;    at a time and INC SI pointer.
7D75 3C00          CMP     AL,00       ; Look for Zero-byte terminator in
                                       ;    the Error Message strings.
7D77 7409          JZ      7D82        ; Return (done)
7D79 B40E          MOV     AH,0E       ; Function 0Eh of INT 10:
                                       ; "Teletype Output" (One Character)
7D7B BB0700        MOV     BX,0007     ; (BH=Page Zero; BL=Normal display)
7D7E CD10          INT     10
7D80 EBF2          JMP 7D74            ; Do it all over again . . .
7D82 C3            RET


Code:
mainEntryPoint:

	mov	BS.bsDriveNumber, dl

	;=----------------------------------------------------------=
	; Load entire FAT (maximum 6KB for FAT12)
	;=----------------------------------------------------------=

	push	ax		; ax = "load" segment

	mov	ax, BPB.bpbBytesPerSector
	mov	cx, BPB.bpbSectorsPerFAT
	mul	cx

	shr	ax, 4		; convert to paragraphs

	mov	di, ss		;
	sub	di, ax		; es = di = FAT buffer
	mov	es, di		;

	mov	ax, BPB.bpbReservedSectors
	call	int13ReadSector

	pop	es		; es = "load" segment

	;=----------------------------------------------------------=
	; Load entire Root Directory (maximum 16KB for FAT12/FAT16)
	;=----------------------------------------------------------=

	mov	ax, 32
	mov	si, BPB.bpbRootEntries
	mul	si
	div	BPB.bpbBytesPerSector

	xchg	ax, cx		; cx = root sectors, ax = zero

	mov	al, BPB.bpbNumberOfFATs
	mul	BPB.bpbSectorsPerFAT

	add	ax, BPB.bpbReservedSectors
	call	int13ReadSector

	push	dx		; mzldrDataAreaHi
	push	ax		; mzldrDataAreaLo
	push	di		; mzldrFATSegment	
	push	es		; mzldrBufSegment

	;=----------------------------------------------------------=
	; Look through list of "images" and load the first match
	;=----------------------------------------------------------=

	xchg	ax, si		; ax = root entries

	mov	si, OFFSET szImageListDef


;---------------------------------------------------------------------------
;	fat12ReadCluster
;
;	Entry:
;		ch = 0
;	      	si = cluster number to read
;		es = segment of read buffer
;	Exit:
;	      	si = next cluster number in chain (if CF == 0)
;		es = next segment
;
fat12ReadCluster PROC NEAR

	lea	ax, [si-2]

	; cx = sectors per cluster

	mov	cl, BPB.bpbSectorsPerCluster
	mul	cx	

	; add start of dataarea

	add	ax, VAR.mzldrDataAreaLo
	adc	dx, VAR.mzldrDataAreaHi

	call	int13ReadSector

	shr	bx, 4		; convert bytes into paragraphs

	mov	ax, es		; ax = our buffer
	add	ax, bx		; ax = old buffer + bytes read
	mov	es, ax		; es = new buffer

	mov	ds, VAR.mzldrFATSegment

	mov	ax, 3		;
	mul	si		; ax = si * 3 / 2
	shr	ax, 1		;

	xchg	ax, si		;

	mov	si, ds:[si]	; get next cluster

	jnc	fat12ReadClusterEven

	shr	si, 4		; keep upper 4 bits

fat12ReadClusterEven:
	and	si, 0FFFh	; mask off junk, EOF?
	cmp	si, FAT12_EOF	;
	cmc
	ret

fat12ReadCluster ENDP






;---------------------------------------------------------------------------
;	int13ReadSector
;
;	Entry:
;		ax = sector number (16-bit LBA)
;		cx = sector count
;		es = sector buffer segment
;	Exit:
;		bx = number of bytes read
;	     	cx = zero
;	     dx:ax = sector number (32-bit LBA) of next sector
;
int13ReadSector PROC NEAR

	push	di

	xor	bx, bx
	xor	dx, dx

int13ReadNext:
	mov	di, 5		; five retries

int13ReadMore:
	pusha

	; add start of partition (harddisks only)

	add	ax, WORD PTR BPB.bpbHiddenSectors[0]
	adc	dx, WORD PTR BPB.bpbHiddenSectors[2]

	xor	cx, cx		; cx = null

	xchg	ax, cx		; ax = null, cx = LBA[0]
	xchg	ax, dx		; ax = LBA[2], dx = null

	div	BPB.bpbSectorsPerTrack

	xchg	ax, cx		; ax = LBA[0], cx = Result[2]

	div	BPB.bpbSectorsPerTrack

	xchg	dx, cx		; dx = Result[2], cx = Sector#
	inc	cx		; cx = one-based Sector#

	div	BPB.bpbHeadsPerCylinder

	mov	ch, al		; ch = Cylinder# [7:0]
	shl	ah, 6		; ah = Cylinder# [9:8]
	or	cl, ah		; combine Cylinder & Sector fields

	mov	dh, dl		; dh = Head#

	mov	dl, BS.bsDriveNumber

	mov	ax, 0201h
	int	13h
	jnc	int13ReadDone

;*	mov	ah, 00h		; uncomment if you want DISK RESETs
;*	int	13h		;

	popa

	dec	di
	jnz	int13ReadMore

	int	18h		;*

int13ReadDone:
	popa

	add	bx, BPB.bpbBytesPerSector

	inc	ax
	jnz	int13ReadSkip
	inc	dx

int13ReadSkip:
	dec	cx
	jnz	int13ReadNext

	pop	di
	ret

int13ReadSector ENDP


đây là code của MBR

Code:
; MBR code

bootSegment SEGMENT USE16 'boot'

	ASSUME	cs:bootSegment, ds:bootSegment

	cld

	xor	ax, ax
	mov	ss, ax
	mov	sp, 7C00h

	mov	ds, ax
	mov	es, ax

	; relocate ourself down to 0060:0000

	mov	cx, 0100h
	mov	si, 7C00h
	mov	di, 0600h
	rep	movsw

	JMPF	0060h, bootEntryPoint

bootEntryPoint:

	push	cs
	pop	ds

	mov	mbrBootDrive, dl

	test	BYTE PTR es:[417h], 08h
	jnz	findPartitionMain

	mov	ax, 020Fh
	mov	bx, 0800h
	mov	cx, 0002h
	mov	dx, 0080h
	int	13h

	cmp	extMagicTag, 0AA55BEEFh	
	jne	findPartitionMain

	JMPF	0060h, 0200h

findPartitionMain:
	mov	cl, 4
	mov	si, OFFSET mbrPTable

findPartitionNext:
;*	test	[si].mbrBootFlag, MBR_ENTRY_BOOTABLE
	cmp	[si].mbrBootFlag, ch
	jl	findPartitionDone

	add	si, SIZE MBR_ENTRY
	loop	findPartitionNext

	int	18h

findPartitionDone:
	mov	cx, [si][2]
	mov	dx, [si]

	cmp	dh, 0FFh
	jne	findPartitionNorm

	cmp	cx, 0FFFFh
	jne	findPartitionNorm

	push	LARGE NULL
	push	[si].mbrPartitionStart
	push	es
	push	bx
	push	SMALL 1
	push	SMALL 16

	push	ss
	pop	ds

	mov	si, sp

	mov	ah, 42h
	int	13h

	add	sp, 16
	jmp	findPartitionExec

findPartitionNorm:
	mov	ax, 0201h
	mov	bx, 7C00h
	int	13h

findPartitionExec:
	JMPF	0000h, 7C00h

mbrBootDrive	DB	?

	MBR_TABLE_HERE

mbrPTable MBR_ENTRY 4 DUP (<>)

	MBR_MAGIC_HERE

	push	0B800h
	pop	es

	mov	ax, 1720h
	mov	cx, 2000
	xor	di, di
	rep	stosw

	push	0
	pop	es

	mov	ah, 02h
	mov	bh, 00h
	xor	dx, dx
	int	10h

	jmp	findPartitionMain

extMagicTag EQU DWORD PTR ds:[EXT_MAGIC_POS]
	EXT_MAGIC_HERE

bootSegment ENDS

; DOS code

codeSegment SEGMENT USE16 'code'

	ASSUME	cs:codeSegment, ds:codeSegment

mainEntryPoint:

	push	cs
	pop	ds

	push	cs
	pop	es

	mov	ax, 0201h
	mov	bx, OFFSET ourSectorBuf
	mov	cx, 0001h
	mov	dx, 0080h
	int	13h

	push	bootSegment
	pop	es

	mov	si, MBR_TABLE_POS + OFFSET ourSectorBuf
	mov	di, MBR_TABLE_POS
	mov	cx, 32
	rep	movsw

	mov	ax, 0302h
	xor	bx, bx
	mov	cx, 1
	mov	dx, 0080h
	int	13h

	mov	ax, 4C00h
	int	21h

ourSectorBuf DB 512 DUP (?)

codeSegment ENDS

	END	mainEntryPoint


Have fun với mấy cái code này smilie .
[Up] [Print Copy]
  [Question]   Re: Các thủ tục đọc ghi ... với đĩa cứng !! 17/10/2007 23:43:44 (+0700) | #16 | 91080
hale
Member

[Minus]    0    [Plus]
Joined: 18/07/2007 20:30:10
Messages: 4
Offline
[Profile] [PM]
Bác cho cái link bảo down tl tiếng Việt ở đó về đọc. Em nhấp vào link và rồi hổng biết down làm sao, không thấy chỉ dẫn nào cả. Có mỗi cái này liên quan đến tl bác nói: You want to download the file http://rapidshare.com/files/56584414/FAT32.rar, không thấy link nào đến file này cả. Xấu hổ quá!! smilie
Bác chỉ dẫn chi tiết giúp em được không.
Thank bác nhiều.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|