实模式到保护模式(续)
:调用函数
jb:跳转到 位置
cld:cld
(Clear Direction Flag)指令清除方向标志位(DF)。方向标志位决定字符串操作(如 movsb
、stosb
、lodsb
等)的方向。如果 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
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论