问题
I need to access SSD drive with NASM 16-bit code. When accessing regular hard drive, need to set registers AX, DX, CX to choose Cylinder/Track/Sector/Number of sectors (AH - to choose read sector function, DL - to choose drive number, CH - to choose cylinder, DH - to choose side on disk, CL - to choose sector on track, AL - to choose number of sectors).
However, I suppose SSD disk has some other structure, so how to access them correctly?
回答1:
Assuming translation of fake geometry into LBA (the most likely case), "int 0x13, ah=0x02" can only handle a maximum of 16515072 sectors. At 512 bytes per sector (also the most likely case) that works out to 8064 MiB or about 7.8 GiB. Hard drives (including SSDs) have been larger than this for about 2 decades; so "int 0x13, ah=0x02" isn't a sane option.
Instead, for hard drives (including SSD) you want to use "int 0x13, ah=0x42" (see http://www.ctyme.com/intr/rb-0708.htm ). This function uses LBA addresses and doesn't use CHS; and (with 64-bit LBA address and the same 512 bytes per sector) it can handle (up to) 8589934592 TiB drives.
来源:https://stackoverflow.com/questions/59336069/nasm-how-to-access-ssd-drive-correctly