zoukankan      html  css  js  c++  java
  • <自己动手写操作系统>2011042901

    【分析】

    函数ReadSector
    1 ;----------------------------------------------------------------------------
    2
    3 ; 函数名: ReadSector
    4
    5 ;----------------------------------------------------------------------------
    6
    7 ; 作用:
    8
    9 ; 从第 ax 个 Sector 开始, 将 cl 个 Sector 读入 es:bx 中
    10
    11 ReadSector:
    12
    13 ; -----------------------------------------------------------------------
    14
    15 ; 怎样由扇区号求扇区在磁盘中的位置 (扇区号 -> 柱面号, 起始扇区, 磁头号)
    16
    17 ; -----------------------------------------------------------------------
    18
    19 ; 设扇区号为 x
    20
    21 ; ┌ 柱面号 = y >> 1
    22
    23 ; x ┌ 商 y ┤
    24
    25 ; -------------- => ┤ └ 磁头号 = y & 1
    26
    27 ; 每磁道扇区数 │
    28
    29 ; └ 余 z => 起始扇区号 = z + 1
    30
    31 push bp
    32
    33 mov bp, sp
    34
    35 sub esp, 2 ; 辟出两个字节的堆栈区域保存要读的扇区数: byte [bp-2]
    36
    37
    38
    39 mov byte [bp-2], cl
    40
    41 push bx ; 保存 bx
    42
    43 mov bl, [BPB_SecPerTrk] ; bl: 除数
    44
    45 div bl ; y 在 al 中, z 在 ah 中
    46
    47 inc ah ; z ++
    48
    49 mov cl, ah ; cl <- 起始扇区号
    50
    51 mov dh, al ; dh <- y
    52
    53 shr al, 1 ; y >> 1 (其实是 y/BPB_NumHeads, 这里BPB_NumHeads=2)
    54
    55 mov ch, al ; ch <- 柱面号
    56
    57 and dh, 1 ; dh & 1 = 磁头号
    58
    59 pop bx ; 恢复 bx
    60
    61 ; 至此, "柱面号, 起始扇区, 磁头号" 全部得到 ^^^^^^^^^^^^^^^^^^^^^^^^
    62
    63 mov dl, [BS_DrvNum] ; 驱动器号 (0 表示 A 盘)
    64
    65 .GoOnReading:
    66
    67 mov ah, 2 ;
    68
    69 mov al, byte [bp-2] ; 读 al 个扇区
    70
    71 int 13h
    72
    73 jc .GoOnReading ; 如果读取错误 CF 会被置为 1, 这时就不停地读, 直到正确为止
    74
    75
    76
    77 add esp, 2
    78
    79 pop bp
    80
    81
    82
    83 ret
    上述代码,没有太多的深奥之处。可以结合http://blog.csdn.net/x12143/archive/2010/03/23/5408031.aspx比对学习,参看注解

    好了,这个部分暂时算过了吧,实在喊我用汇编来写,的确有些难。以后多读哈,找另外的方式来验证和实践


    无论生活、还是技术,一切都不断的学习和更新~~~努力~
  • 相关阅读:
    排序系列 之 希尔排序算法 —— Java实现
    排序系列 之 快速排序算法 —— Java实现
    排序系列 之 冒泡排序及其改进算法 —— Java实现
    排序系列 之 折半插入排序算法 —— Java实现
    排序系列 之 直接插入排序算法 —— Java实现
    Three.js入门篇(一)创建一个场景
    THREE.JS(如何想场景中添加物体对象)
    Tween.js 动画效果
    js柯里化
    node path模块
  • 原文地址:https://www.cnblogs.com/GoGoagg/p/2032474.html
Copyright © 2011-2022 走看看