[Programming] Các thủ tục đọc ghi ... với đĩa cứng !! |
13/09/2007 13:15:26 (+0700) | #1 | 84794 |
|
ducbinh1986
Member
|
0 |
|
|
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
|
|
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.
|
|
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
18/09/2007 10:35:22 (+0700) | #2 | 85567 |
|
ducbinh1986
Member
|
0 |
|
|
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
|
|
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 . |
|
|
|
|
[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
|
0 |
|
|
Joined: 08/11/2005 08:34:12
Messages: 7
Offline
|
|
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 đó. |
|
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
19/09/2007 08:28:42 (+0700) | #4 | 85701 |
|
ducbinh1986
Member
|
0 |
|
|
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
|
|
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. |
|
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
19/09/2007 11:10:36 (+0700) | #5 | 85722 |
|
tmd
Member
|
0 |
|
|
Joined: 28/06/2006 03:39:48
Messages: 2951
Offline
|
|
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ì ... |
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
19/09/2007 12:03:47 (+0700) | #6 | 85725 |
|
ducbinh1986
Member
|
0 |
|
|
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
|
|
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. |
|
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
19/09/2007 12:26:28 (+0700) | #7 | 85727 |
|
tmd
Member
|
0 |
|
|
Joined: 28/06/2006 03:39:48
Messages: 2951
Offline
|
|
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ì ... |
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
19/09/2007 12:44:12 (+0700) | #8 | 85729 |
|
ducbinh1986
Member
|
0 |
|
|
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
|
|
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 ) 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. |
|
|
|
|
[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
|
|
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... |
|
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
19/09/2007 13:40:34 (+0700) | #10 | 85734 |
|
ducbinh1986
Member
|
0 |
|
|
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
|
|
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).
|
|
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
20/09/2007 10:39:20 (+0700) | #11 | 85832 |
|
tmd
Member
|
0 |
|
|
Joined: 28/06/2006 03:39:48
Messages: 2951
Offline
|
|
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ì ... |
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
20/09/2007 11:57:50 (+0700) | #12 | 85848 |
|
ducbinh1986
Member
|
0 |
|
|
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
|
|
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 .
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 |
|
|
|
|
[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
|
0 |
|
|
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
|
|
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 ! |
|
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
21/09/2007 05:21:49 (+0700) | #14 | 85983 |
|
ducbinh1986
Member
|
0 |
|
|
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
|
|
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 ).
|
|
|
|
|
[Question] Re: Các thủ tục đọc ghi ... với đĩa cứng !! |
24/09/2007 07:42:20 (+0700) | #15 | 86547 |
|
ducbinh1986
Member
|
0 |
|
|
Joined: 07/07/2006 23:32:25
Messages: 258
Offline
|
|
Đâ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 . |
|
|
|
|
[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
|
0 |
|
|
Joined: 18/07/2007 20:30:10
Messages: 4
Offline
|
|
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á!!
Bác chỉ dẫn chi tiết giúp em được không.
Thank bác nhiều. |
|
|
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|
|
|