NASM: 如何正确访问ssd驱动器?

NASM: how to access ssd drive correctly?

我需要使用 NASM 16 位代码访问 SSD 驱动器。访问普通硬盘时,需要设置寄存器AX、DX、CX选择Cylinder/Track/Sector/Number扇区(AH-选择读扇区功能,DL - 选择驱动器号,CH - 选择柱面,DH - 选择磁盘面,CL - 选择轨道上的扇区,AL - 选择扇区数)。

不过,我想SSD盘可能有其他结构,那么如何正确访问它们呢?

假设将假几何转换为 LBA(最有可能的情况),"int 0x13, ah=0x02"最多只能处理 16515072 个扇区。每个扇区 512 字节(也是最有可能的情况)计算出 8064 MiB 或大约 7.8 GiB。大约 2 年来,硬盘驱动器(包括 SSD)都比这个大;所以 "int 0x13, ah=0x02" 不是一个明智的选择。

相反,对于硬盘驱动器(包括 SSD),您要使用 "int 0x13, ah=0x42"(参见 http://www.ctyme.com/intr/rb-0708.htm)。该函数使用LBA地址,不使用CHS;并且(具有 64 位 LBA 地址和每个扇区相同的 512 字节)它可以处理(最多)8589934592 TiB 驱动器。