美文网首页
[OS64位][006]源码阅读:代码清单3-7 目标文件搜索

[OS64位][006]源码阅读:代码清单3-7 目标文件搜索

作者: AkuRinbu | 来源:发表于2019-05-01 22:13 被阅读0次

学习笔记

使用教材(配书源码以及使用方法)
《一个64位操作系统的设计与实现》
http://www.ituring.com.cn/book/2450
https://www.jianshu.com/p/28f9713a9171

代码清单3-7 (程序3-2 boot.asm)

  • line: 92 ~ 144 : 基于文件系统的目标文件搜索

根目录区起始扇区号为 19
根目录区总扇区数为14
根目录区只保存目录项
目录项是一个32字节的结构体,记录着文件名、长度以及数据起始簇号
目录项的开头11个字节是文件名

根目录区 总扇区数14

(1)调用过程call Func_ReadOneSector,每次读入一个扇区的数据到 ES:BX
(2)再接着遍历单个扇区中的 16个目录项
(3)将 每个目录项的文件名 与 指定的文件名"LOADER BIN"进行对比
(4)16个目录项全部对比完没有匹配的话,就进入下一个扇区 ,通过增加扇区号实现 :add word [SectorNo], 1

line: 92 ~ 144 : 基于文件系统的目标文件搜索 跳转关系

and di, 0ffe0h 有什么用?

  • 首先, DS:DI 指向目标缓冲区,即扇区数据读入到的内存地址;

  • 其次,移动到下一个目录项要增加32字节(因为单个目录项32字节)32D=20Hadd di, 20h

  • 并且,在之前有一句and di, 0ffe0h,理由在于,对比文件名的11个字节时,也是使用di来访问单个字节,十进制数11等于二进制数 1 0 1 1,可见访问单字节造成的di增加只会影响到di寄存器最低4位

  • 因此,使用and di, 0ffe0h目的就是清空由于访问单字节造成的di增加;

  • 那么,这样清空之后,再使用add di, 20h就可以准确地去到下一目录项;

参考资料

  • 目录项是一个32字节的结构体,其中记录着名字、长度以及数据起始簇号等信息;
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;
把之前比对的11字节对di的影响而消除了. . .
di在一个目录项中,最多是di+11,而11根本不会影响倒数第5位,如果没找到,and di ,offe0;又把之前的加的x又消除了,同样倒数第5位没变化;
https://www.cnblogs.com/chen-blog/archive/2012/04/28/os.html

相关文章

网友评论

      本文标题:[OS64位][006]源码阅读:代码清单3-7 目标文件搜索

      本文链接:https://www.haomeiwen.com/subject/uxswnqtx.html