?? fat.lst
字號(hào):
C51 COMPILER V7.06 FAT 11/16/2008 16:00:19 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE FAT
OBJECT MODULE PLACED IN FAT.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE FAT.C BROWSE DEBUG OBJECTEXTEND TABS(1)
stmt level source
1 /******************************************************************
2 本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
3
4 歡迎訪問(wèn)我的USB專區(qū):http://group.ednchina.com/93/
5 歡迎訪問(wèn)我的blog: http://www.ednchina.com/blog/computer00
6 http://computer00.21ic.org
7
8 感謝PCB贊助商——電子園: http://bbs.cepark.com/
9
10 FAT.c file
11
12 作者:電腦圈圈
13 建立日期: 2008.08.19
14 修改日期: 2008.08.20
15 版本:V1.1
16 版權(quán)所有,盜版必究。
17 Copyright(C) 電腦圈圈 2008-2018
18 All rights reserved
19 *******************************************************************/
20
21 #include "FAT.h"
22
23 //DBR(DOS引導(dǎo)記錄)
24 code uint8 Dbr[512]=
25 {
26 0xeb, 0x3e, 0x90, //跳轉(zhuǎn)指令,不能改為0,否則提示未格式化
27 'M','S','D','O','S','5','.','0', //文件系統(tǒng)及版本信息"MSDOS5.0"
28 0x00, 0x02, //每扇區(qū)字節(jié)數(shù),為512字節(jié)
29 0x20, //每簇扇區(qū)數(shù),為32扇區(qū)
30 0x01, 0x00, //保留扇區(qū)數(shù),為1
31 0x02, //該分區(qū)的FAT份數(shù),為2
32 0x00, 0x02, //根目錄項(xiàng)數(shù),為512項(xiàng)
33 0x00, 0x00, //小扇區(qū)數(shù),這里不用,為0
34 0xF8, //媒體描述符,0xF8表示硬盤
35 0x20, 0x00, //每FAT扇區(qū)數(shù),為32個(gè)
36 0x20, 0x00, //每道扇區(qū)數(shù),為32
37 0x40, 0x00, //磁頭數(shù)為64
38 0x00, 0x00, 0x00, 0x00, //隱藏扇區(qū)數(shù)這里沒(méi)有隱藏扇區(qū),為0
39 0x00, 0x00, 0x04, 0x00, //大扇區(qū)數(shù),扇區(qū)的總數(shù),128M為0x40000
40 0x80, //磁盤驅(qū)動(dòng)器參數(shù),80表示硬盤
41 0x00, //保留
42 0x29, //擴(kuò)展引導(dǎo)標(biāo)記,0x29表示接下來(lái)的三個(gè)域可用
43 0x88, 0x09, 0x71, 0x20, //標(biāo)卷序列號(hào)
44
45 //磁盤標(biāo)卷:圈圈的假U盤
46 0xC8, 0xA6, 0xC8, 0xA6, 0xB5, 0xC4, 0xBC, 0xD9,
47 0x55, 0xC5, 0xCC,
48
49 //文件系統(tǒng)類型信息,為字符串"FAT16 "
50 'F', 'A', 'T', '1', '6', 0x20,0x20, 0x20,
51
52 //以下為引導(dǎo)代碼,直接從其它U盤復(fù)制而來(lái)
53 0xf1, 0x7d,
54 0xfa, 0x33, 0xc9, 0x8e, 0xd1, 0xbc, 0xfc, 0x7b, 0x16, 0x07, 0xbd, 0x78, 0x00, 0xc5, 0x76, 0x00,
55 0x1e, 0x56, 0x16, 0x55, 0xbf, 0x22, 0x05, 0x89, 0x7e, 0x00, 0x89, 0x4e, 0x02, 0xb1, 0x0b, 0xfc,
C51 COMPILER V7.06 FAT 11/16/2008 16:00:19 PAGE 2
56 0xf3, 0xa4, 0x06, 0x1f, 0xbd, 0x00, 0x7c, 0xc6, 0x45, 0xfe, 0x0f, 0x8b, 0x46, 0x18, 0x88, 0x45,
57 0xf9, 0xfb, 0x38, 0x66, 0x24, 0x7c, 0x04, 0xcd, 0x13, 0x72, 0x3c, 0x8a, 0x46, 0x10, 0x98, 0xf7,
58 0x66, 0x16, 0x03, 0x46, 0x1c, 0x13, 0x56, 0x1e, 0x03, 0x46, 0x0e, 0x13, 0xd1, 0x50, 0x52, 0x89,
59 0x46, 0xfc, 0x89, 0x56, 0xfe, 0xb8, 0x20, 0x00, 0x8b, 0x76, 0x11, 0xf7, 0xe6, 0x8b, 0x5e, 0x0b,
60 0x03, 0xc3, 0x48, 0xf7, 0xf3, 0x01, 0x46, 0xfc, 0x11, 0x4e, 0xfe, 0x5a, 0x58, 0xbb, 0x00, 0x07,
61 0x8b, 0xfb, 0xb1, 0x01, 0xe8, 0x94, 0x00, 0x72, 0x47, 0x38, 0x2d, 0x74, 0x19, 0xb1, 0x0b, 0x56,
62 0x8b, 0x76, 0x3e, 0xf3, 0xa6, 0x5e, 0x74, 0x4a, 0x4e, 0x74, 0x0b, 0x03, 0xf9, 0x83, 0xc7, 0x15,
63 0x3b, 0xfb, 0x72, 0xe5, 0xeb, 0xd7, 0x2b, 0xc9, 0xb8, 0xd8, 0x7d, 0x87, 0x46, 0x3e, 0x3c, 0xd8,
64 0x75, 0x99, 0xbe, 0x80, 0x7d, 0xac, 0x98, 0x03, 0xf0, 0xac, 0x84, 0xc0, 0x74, 0x17, 0x3c, 0xff,
65 0x74, 0x09, 0xb4, 0x0e, 0xbb, 0x07, 0x00, 0xcd, 0x10, 0xeb, 0xee, 0xbe, 0x83, 0x7d, 0xeb, 0xe5,
66 0xbe, 0x81, 0x7d, 0xeb, 0xe0, 0x33, 0xc0, 0xcd, 0x16, 0x5e, 0x1f, 0x8f, 0x04, 0x8f, 0x44, 0x02,
67 0xcd, 0x19, 0xbe, 0x82, 0x7d, 0x8b, 0x7d, 0x0f, 0x83, 0xff, 0x02, 0x72, 0xc8, 0x8b, 0xc7, 0x48,
68 0x48, 0x8a, 0x4e, 0x0d, 0xf7, 0xe1, 0x03, 0x46, 0xfc, 0x13, 0x56, 0xfe, 0xbb, 0x00, 0x07, 0x53,
69 0xb1, 0x04, 0xe8, 0x16, 0x00, 0x5b, 0x72, 0xc8, 0x81, 0x3f, 0x4d, 0x5a, 0x75, 0xa7, 0x81, 0xbf,
70 0x00, 0x02, 0x42, 0x4a, 0x75, 0x9f, 0xea, 0x00, 0x02, 0x70, 0x00, 0x50, 0x52, 0x51, 0x91, 0x92,
71 0x33, 0xd2, 0xf7, 0x76, 0x18, 0x91, 0xf7, 0x76, 0x18, 0x42, 0x87, 0xca, 0xf7, 0x76, 0x1a, 0x8a,
72 0xf2, 0x8a, 0x56, 0x24, 0x8a, 0xe8, 0xd0, 0xcc, 0xd0, 0xcc, 0x0a, 0xcc, 0xb8, 0x01, 0x02, 0xcd,
73 0x13, 0x59, 0x5a, 0x58, 0x72, 0x09, 0x40, 0x75, 0x01, 0x42, 0x03, 0x5e, 0x0b, 0xe2, 0xcc, 0xc3,
74 0x03, 0x18, 0x01, 0x27, 0x0d, 0x0a, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x73, 0x79,
75 0x73, 0x74, 0x65, 0x6d, 0x20, 0x64, 0x69, 0x73, 0x6b, 0xff, 0x0d, 0x0a, 0x44, 0x69, 0x73, 0x6b,
76 0x20, 0x49, 0x2f, 0x4f, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xff, 0x0d, 0x0a, 0x52, 0x65, 0x70,
77 0x6c, 0x61, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x2c, 0x20, 0x61,
78 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e,
79 0x79, 0x20, 0x6b, 0x65, 0x79, 0x0d, 0x0a, 0x00, 0x49, 0x4f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
80 0x53, 0x59, 0x53, 0x4d, 0x53, 0x44, 0x4f, 0x53, 0x20, 0x20, 0x20, 0x53, 0x59, 0x53, 0x80, 0x01,
81 0x00, 0x57, 0x49, 0x4e, 0x42, 0x4f, 0x4f, 0x54, 0x20, 0x53, 0x59, 0x53, 0x00, 0x00, 0x55, 0xaa,
82 };
83
84 //模擬的文件分配表
85 //其中項(xiàng)0為0xFFF8,項(xiàng)1為0xFFFF,表示已經(jīng)使用。
86 //項(xiàng)2為0xFFFF,表示文件結(jié)束。其余項(xiàng)為0,表示未使用
87 code uint8 Fat[64]=
88 {
89 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
90 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92 0x00, 0x00 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94 0x00, 0x00 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96 0x00, 0x00 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00
97 };
98
99 //64字節(jié)的0,填充0用。
100 code uint8 Zeros[64]=
101 {
102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103 0x00, 0x00 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105 0x00, 0x00 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107 0x00, 0x00 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109 0x00, 0x00 ,0x00, 0x00, 0x00, 0x00, 0x00, 0x00
110 };
111
112 //測(cè)試文件的數(shù)據(jù)
113 code uint8 TestFileData[]=
114 {
115 "這是一個(gè)測(cè)試程序,用來(lái)測(cè)試文件系統(tǒng)是否工作正常。\r\n如果你能看到這些文字,那么說(shuō)明你的電腦已經(jīng)中了最\r\n
-無(wú)恥的電腦圈圈病毒了,請(qǐng)馬上把所有文件刪除,并格\r\n式化硬盤后,將硬盤壓碎,以免你也被感染!如果你在\r\n30秒內(nèi)還未開始刪
-除文件,你的電腦將會(huì)永久報(bào)廢!\r\n歡迎訪問(wèn)我們的USB專區(qū): http://group.ednchina.com/93/"
C51 COMPILER V7.06 FAT 11/16/2008 16:00:19 PAGE 3
116 };
117
118
119 /********** 時(shí)間格式(16Bits)為: **************
120 Bits15~11表示小時(shí),可以取值為0~23;
121 Bits10~5表示分,可以取值為0~59;
122 Bits4~0表示秒,可以取值為0~29,每單位為2秒,即實(shí)際秒值為該值的2倍。
123 */
124
125 /********* 日期格式(16Bits)為: *************
126 Bits15~9表示年份,可以取值為0~127,它表示距離1980年差值,
127 即實(shí)際的年份為該值加上1980,最大可表示到2107年;
128
129 Bits8~5表示月份,可以取值為1~12;
130 Bits4~0表示號(hào)數(shù),可以取值為1~31。
131 */
132
133 //求出16位時(shí)間格式的高字節(jié)
134 #define TIME_HB(H,M,S) (((((H)<<11))|((M)<<5)|(S))>>8)
135 //求出16位時(shí)間格式的低字節(jié)
136 #define TIME_LB(H,M,S) ((((H)<<11))|((M)<<5)|(S))
137
138 //求出16位日期格式的高字節(jié)
139 #define DATE_HB(Y,M,D) (((((Y)-1980)<<9)|((M)<<5)|(D))>>8)
140 //求出16位日期格式的低字節(jié)
141 #define DATE_LB(Y,M,D) ((((Y)-1980)<<9)|((M)<<5)|(D))
142
143
144 //根目錄
145 code uint8 RootDir[64]=
146 {
147 //磁盤標(biāo)卷:圈圈的假U盤
148 0xC8, 0xA6, 0xC8, 0xA6, 0xB5, 0xC4, 0xBC, 0xD9, 0x55, 0xC5, 0xCC,
149 0x08, //文件屬性,表示磁盤標(biāo)卷
150 0x00, //保留
151 0x00, //創(chuàng)建時(shí)間毫秒時(shí)間戳
152
153 //文件創(chuàng)建時(shí)間,15點(diǎn)27分35秒
154 TIME_LB(15,27,35), TIME_HB(15,27,35),
155
156 //文件創(chuàng)建日期,2008年8月19日
157 DATE_LB(2008,8,19), DATE_HB(2008,8,19),
158
159 //最后訪問(wèn)日期,2008年8月20日
160 DATE_LB(2008,8,20), DATE_HB(2008,8,20),
161
162 0x00, 0x00, //起始簇號(hào)高位字節(jié),F(xiàn)AT12/16必須為0
163
164 //最后修改時(shí)間,15點(diǎn)36分47秒
165 TIME_LB(15,36,47), TIME_HB(15,36,47),
166
167 //最后修改日期,2008年8月19日
168 DATE_LB(2008,8,19), DATE_HB(2008,8,19),
169
170 0x00, 0x00, //起始簇低字
171 0x00, 0x00, 0x00, 0x00, //文件長(zhǎng)度
172
173 //根目錄下的測(cè)試文件
174 //文件名“TEST.TXT”
175 'T', 'E', 'S', 'T', ' ', ' ', ' ', ' ', 'T', 'X', 'T',
176 0x01, //文件屬性,表示只讀文件
177 0x00, //保留
C51 COMPILER V7.06 FAT 11/16/2008 16:00:19 PAGE 4
178 0x00, //創(chuàng)建時(shí)間毫秒時(shí)間戳
179 //文件創(chuàng)建時(shí)間,15點(diǎn)48分26秒
180 TIME_LB(15,48,26), TIME_HB(15,48,26),
181
182 //文件創(chuàng)建日期,2008年8月19日
183 DATE_LB(2008,8,19), DATE_HB(2008,8,19),
184
185 //最后訪問(wèn)日期
186 DATE_LB(2008,8,20), DATE_HB(2008,8,20),
187
188 0x00, 0x00, //起始簇號(hào)高位字節(jié),F(xiàn)AT12/16必須為0
189
190 //最后修改時(shí)間,15點(diǎn)50分33秒
191 TIME_LB(15,50,33), TIME_HB(15,50,33),
192
193 //最后修改日期,2008年8月19日
194 DATE_LB(2008,8,19), DATE_HB(2008,8,19),
195
196 0x02, 0x00, //起始簇低字,簇2。
197
198 //文件長(zhǎng)度
199 (sizeof(TestFileData)-1),((sizeof(TestFileData)-1)>>8), 0x00, 0x00,
200 };
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = ---- ----
CONSTANT SIZE = 1005 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -