实模式到保护模式(续)

call:调用函数

jb:跳转到 位置

cld:cld(Clear Direction Flag)指令清除方向标志位(DF)。方向标志位决定字符串操作(如 movsbstosblodsb 等)的方向。如果 DF 为 0(cld 设置),则字符串操作会从低地址向高地址进行。

push:压入栈

pop:出栈

LBA

逻辑块寻址 只关心逻辑块号而不用关心数据在磁盘的物理位置

LBA地址为24位

;写入LBA 24位寄存器确认扇区
    mov cl,0x8      ;cl寄存器现在是八位,每次shr右移cl就是移动8位

    ;写入低八位
    mov dx,0x1F3
    out dx,al

    ;右移一个cl就是一个8位,现在写入中间8位
    mov dx,0x1F4
    shr eax,cl
    out dx,al

    ;再右移再写入,高八位
    mov dx,0x1F5
    shr eax,cl
    out dx,al

rd_disk_m_32:

这段内容是把磁盘读取数据到内存

主要涉及各种寄存器,我是记不住,而且我没有特别理解过程

dx = 0x1F2:扇区计数寄存器。

0x1F6:设备寄存器,用于指定磁盘号和 LBA 模式。

    shr eax,cl
    and al,0x0f 
    or al,0xe0      ;设置设备类型为主盘(Master)且使用 LBA 模式。
    mov dx,0x1F6
    out dx,al

0x1F7:命令寄存器

0x20:READ SECTORS 命令,用于启动磁盘的读取操作

用16进制数表示掩码

掩码:

掩码"通常指的是一个用于屏蔽或者过滤某些位的值。掩码是一个二进制模式,用来与另一个数据进行按位与(AND)运算,以保留或清除目标数据的特定位。

掩码通常用来进行位操作,如清除、保留或设置特定位的值。一个掩码中的每个位对应目标数据中的一个位,通过与目标数据进行按位与运算,可以根据掩码的设定来控制目标数据对应位的值。

例如,如果我们有一个目标数据 11011010,我们可以定义一个掩码 00001111 来保留目标数据的低四位。通过对目标数据和掩码进行按位与运算,结果将是 00001010,其中低四位的值被保留,而高四位被清零。

因此,掩码的定义就是一个二进制模式,用来指示在进行位操作时要保留、清除或设置的位。通过合理定义掩码,可以实现对数据的精确位操作,从而实现各种数据处理需求。

简而言之就是通过掩码以及and or等操作可以对特定的位进行操作,修改值为0或1

可以用16进制进行表示

0x0f:二进制就是00001111 用一个f代表了低四位的1111,再可以通过and或者or进行操作

0xe0:11100000

0x表示后面的数是16进制

0b表示后面的数是2进制

0表示后面的数是8进制

常见控制码

写入操作

  • 0x30:用于启动写入扇区的命令,即"WRITE SECTORS"。

  • 0x40:代表写入多个扇区的命令,即"WRITE MULTIPLE"。

擦除操作

  • 0x50:用于擦除扇区的命令,即"ERASE SECTORS"。

  • 0x60:代表擦除整个磁盘的命令,即"ERASE DISK"。

校验操作

  • 0x70:执行数据校验的命令,如"VERIFY"。

  • 0x80:用于执行扇区校验的命令,即"VERIFY SECTORS".

初始化操作

  • 0x90:用于初始化硬盘或执行格式化的命令,如"FORMAT"。

  • 0xA0:执行低级格式化的命令,即"LOW LEVEL FORMAT".

版权声明:
作者:Paul
链接:https://www.15ivyy.site/index.php/2024/12/05/snsdbhnsx/
来源:somethingFromPaul
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>