<自己动手写操作系统>2011041901

【分析】

当前分析支路:
根目录区没有读完

对应走向的部分代码如下:
    dec    word [wRootDirSizeForLoop]        ; ┛ 这句话在<自己动手写操作系统>2011040101分析过了

    mov    ax, BaseOfLoader

    mov    es, ax                    ; es <- BaseOfLoader

    mov    bx, OffsetOfLoader    ; bx <- OffsetOfLoader    于是, es:bx = BaseOfLoader:OffsetOfLoader

    mov    ax, [wSectorNo]        ; ax <- Root Directory 中的某 Sector 号

    mov    cl, 1

    call    ReadSector

观察以下变量:
初始化值:[Addr]在汇编中表示地址内的内容
[wRootDirSizeForLoop]=14;//Root Directory 占用的扇区数, 在循环中会递减至零.
[wSectorNo]=0
[bOdd]=0

备注:
才发现在debug状态[wRootDirSizeForLoop]一直=0,难道没有软驱原因?居然前面的学习没有发现这个问题,杯具~
好,先去虚拟机模拟测试下~

一直以为
;变量

;----------------------------------------------------------------------------

wRootDirSizeForLoop    dw    RootDirSectors    ; Root Directory 占用的扇区数, 在循环中会递减至零.

wSectorNo        dw    0        ; 要读取的扇区号

bOdd            db    0        ; 奇数还是偶数

会给wRootDirSizeForLoop赋值,为了测试记录情况,特写:wSectorNo dw 10; 要读取的扇区号
跟踪了多次,wRootDirSizeForLoop、wSectorNo都不是14、10,都是0,0

暂时未找到合适的解释~后续要注意此问题

<自己动手写操作系统>2011040101中
[wRootDirSizeForLoop]=?,执行
[wSectorNo]=19
[bOdd]=0

在上面的部分代码中,mov指令涉及的代码不需要解释了。最后一句为cl赋值为1的应该是为Call ReadSector有关。

关于函数ReadSector下次学习

posted @ 2011-04-19 12:57  西就东城  阅读(180)  评论(0编辑  收藏  举报