[OS64位][006]源碼閱讀:代碼清單3-7 目標(biāo)文件搜索 Lable_Search_In_Root_Dir_Begin

學(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=20Hadd 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容