名字不能取太长 2022-10-24 00:52 采纳率: 78%
浏览 64
已结题

关于阅读《一个64位操作系统的设计与实现》遇到的问题

img

img

代码如下:


;=======    get FAT Entry

Func_GetFATEntry:

    push    es
    push    bx
    push    ax
    mov    ax,    00
    mov    es,    ax
    pop    ax
    mov    byte    [Odd],    0
    mov    bx,    3
    mul    bx
    mov    bx,    2
    div    bx
    cmp    dx,    0
    jz    Label_Even
    mov    byte    [Odd],    1

Label_Even:

    xor    dx,    dx
    mov    bx,    [BPB_BytesPerSec]
    div    bx
    push    dx
    mov    bx,    8000h
    add    ax,    SectorNumOfFAT1Start
    mov    cl,    2
    call    Func_ReadOneSector
    
    pop    dx
    add    bx,    dx
    mov    ax,    [es:bx]
    cmp    byte    [Odd],    1
    jnz    Label_Even_2
    shr    ax,    4

Label_Even_2:
    and    ax,    0fffh
    pop    bx
    pop    es
    ret

以上是我在阅读《一个64位操作系统的设计与实现》时存在问题的部分,问题如下:
1.请问为何要将FAT表项乘以3除以2,即为何要扩大1.5倍
2.偏移位置如何计算?
3.后面的奇偶项错位问题为什么会出现?对于汇编写的处理方法不是很理解
4.此程序将写入软盘用于引导操作系统启动,FAT12文件系统应该由操作系统解析,这里还没有操作系统,那FAT表,根目录区这些结构是由谁建立并解析呀?
5.对于这两页的汇编代码还有这个模块的算法思路不是很理解,能否详细解释下,非常感谢!

  • 写回答

2条回答 默认 最新

  • 喜爱cpp 2022-10-24 11:43
    关注

    你好,这些问题,如果不明白,可以反复多去阅读分析的。
    比如第一个问题:因为你这个系统的文件系统格式是FAT12的,意味着每个FAT项占12bit,这也所被成为FAT12的原因。而我们计算机每个字节是8bit的,因此在寻址时,是需要1.5倍去换算的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月1日
  • 已采纳回答 10月24日
  • 创建了问题 10月24日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效