- [OS64位][009]源码阅读:代码清单3-9 根据FAT表项
- [OS64位][010]源码阅读:代码清单3-10 从FAT12
- [C语言]模拟内存物理页,申请连续64个物理页,对应位图置1
- [OS64位][016]源码阅读:代码清单3-25~3-27
- [OS64位][014]源码阅读:代码清单3-18 ~ 3-22
- [OS64位][015]源码阅读:代码清单3-23 ~ 3-24
- [OS64位][005]源码阅读:代码清单3-6 软盘读取 Fu
- [OS64位][006]源码阅读:代码清单3-7 目标文件搜索
- [OS64位][017]源码阅读:代码清单3-28~3-37 保
- [OS64位][007]源码阅读:代码清单3-8 INT 10H
学习笔记
使用教材(配书源码以及使用方法)
《一个64位操作系统的设计与实现》
http://www.ituring.com.cn/book/2450
https://www.jianshu.com/p/28f9713a9171
勘误
勘误代码清单3-9 (程序3-2 boot.asm)
-
line :232 ~ 273
:Func_GetFATEntry
根据 FAT表项号N 计算出下一个FAT表项的索引号 FAT[N] - 传入参数:
AX=FAT 表项号 N
- 传出参数:
AX=FAT[N]
1、根据字节数计算出,扇区号以及偏移地址:
代码清单3-9 各种乘法除法运算的物理意义 举例说明.pngFAT12 entry location:
FAT表项的偏移扇区号 = 保留扇区数 + N*1.5 / 每扇区字节数 <- 取商值
ThisFATSecNum = BPB_ResvdSecCnt + ((N + (N / 2)) / BPB_BytsPerSec);
FAT表项在扇区中的偏移位置 = N*1.5 % 每扇区字节数 <- 取余数
ThisFATEntOffset = (N + (N / 2)) % BPB_BytsPerSec;
2、从软盘扇区到内存,扇区号与偏移地址的作用:
代码清单 3-9 根据表项号N的奇偶性读取数据.png如果 某个表项 i 的下一个表项号 FAT[i]位于
软盘扇区 X扇区 开始的 偏移地址Y 处,
那么在调用软盘读取过程之后,
FAT[i] 就会位于内存地址ES:BX 开始的 偏移地址Y 处,
也就是它的内存地址是 ES:BX + Y,
也就是说,扇区号X只用在软盘读取扇区时、之后就不用了,
之后会继续用到的是 偏移地址Y(字节数)
参考资料
[OS64位][008]软盘文件系统分配图:根目录项结构、FAT表项结构
https://www.jianshu.com/p/2290e05af3f2
[032][汇编语言]div除法指令
https://www.jianshu.com/p/211cf4edd4d3
[044][汇编语言]mul指令 乘法指令
https://www.jianshu.com/p/76ed79d0a7a0
[008][汇编语言] mov [0],cs 段地址寄存器 到 内存单元
寄存器的高位与地位、内存单元的高地址与低地址https://www.jianshu.com/p/8a8f46154941
网友评论