學(xué)習(xí)筆記
使用教材(配書(shū)源碼以及使用方法)
《一個(gè)64位操作系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)》
http://www.ituring.com.cn/book/2450
http://m.itdecent.cn/p/28f9713a9171
代碼清單3-7 (程序3-2 boot.asm)
-
line: 92 ~ 144: 基于文件系統(tǒng)的目標(biāo)文件搜索
根目錄區(qū)起始扇區(qū)號(hào)為
19
根目錄區(qū)總扇區(qū)數(shù)為14
根目錄區(qū)只保存目錄項(xiàng)
目錄項(xiàng)是一個(gè)32字節(jié)的結(jié)構(gòu)體,記錄著文件名、長(zhǎng)度以及數(shù)據(jù)起始簇號(hào)等
目錄項(xiàng)的開(kāi)頭11個(gè)字節(jié)是文件名
根目錄區(qū) 總扇區(qū)數(shù)14
(1)調(diào)用過(guò)程
call Func_ReadOneSector,每次讀入一個(gè)扇區(qū)的數(shù)據(jù)到 ES:BX
(2)再接著遍歷單個(gè)扇區(qū)中的 16個(gè)目錄項(xiàng)
(3)將 每個(gè)目錄項(xiàng)的文件名 與 指定的文件名"LOADER BIN"進(jìn)行對(duì)比
(4)16個(gè)目錄項(xiàng)全部對(duì)比完沒(méi)有匹配的話(huà),就進(jìn)入下一個(gè)扇區(qū) ,通過(guò)增加扇區(qū)號(hào)實(shí)現(xiàn) :add word [SectorNo], 1
line: 92 ~ 144 : 基于文件系統(tǒng)的目標(biāo)文件搜索跳轉(zhuǎn)關(guān)系
and di, 0ffe0h 有什么用?
首先, DS:DI 指向目標(biāo)緩沖區(qū),即扇區(qū)數(shù)據(jù)讀入到的內(nèi)存地址;
其次,移動(dòng)到下一個(gè)目錄項(xiàng)要增加32字節(jié)(因?yàn)閱蝹€(gè)目錄項(xiàng)32字節(jié)),32D=20H,
add di, 20h;并且,在之前有一句
and di, 0ffe0h,理由在于,對(duì)比文件名的11個(gè)字節(jié)時(shí),也是使用di來(lái)訪問(wèn)單個(gè)字節(jié),十進(jìn)制數(shù)11等于二進(jìn)制數(shù)1 0 1 1,可見(jiàn)訪問(wèn)單字節(jié)造成的di增加只會(huì)影響到di寄存器最低4位;因此,使用
and di, 0ffe0h目的就是清空由于訪問(wèn)單字節(jié)造成的di增加;那么,這樣清空之后,再使用
add di, 20h就可以準(zhǔn)確地去到下一目錄項(xiàng);
參考資料
- 目錄項(xiàng)是一個(gè)32字節(jié)的結(jié)構(gòu)體,其中記錄著名字、長(zhǎng)度以及數(shù)據(jù)起始簇號(hào)等信息;
Root Directory Entry Format
http://www.c-jump.com/CIS24/Slides/FAT/lecture.html#F01_0140_root_directory
Directory entry structure
http://elm-chan.org/docs/fat_e.html#notes
LODSB: Load byte at address DS:(E)SI into AL
http://qcd.phys.cmu.edu/QCDcluster/intel/vtune/reference/vc161.htm
-
and di, 0ffe0h有什么用?
11: 0000 1011;
把之前比對(duì)的11字節(jié)對(duì)di的影響而消除了. . .
di在一個(gè)目錄項(xiàng)中,最多是di+11,而11根本不會(huì)影響倒數(shù)第5位,如果沒(méi)找到,and di ,offe0;又把之前的加的x又消除了,同樣倒數(shù)第5位沒(méi)變化;
https://www.cnblogs.com/chen-blog/archive/2012/04/28/os.html




