Преобразование логического сектора в кортеж CHS на SSD

348
Irrationality

Я привык к сборке x86, поэтому решил начать с 16-битных программ. Чтобы проверить себя, я создаю программу, которая будет загружать данные с диска, копировать их в память, а затем использовать для следующего бита. Он заменит MBR, поэтому я могу использовать только базовые прерывания (в полной мере это будет своего рода «вирус шутки» только для моего использования).

Прерывание для чтения данных с диска и помещения его в память требует аргументов в формате CHS, однако мой основной диск - это SSD. Я не могу найти в Интернете ничего, что помогло бы мне в этой ситуации, потому что твердотельные накопители, очевидно, не работают на цилиндрах.

У меня вопрос, есть ли способ «преобразовать» номер логического сектора на моем SSD в кортеж CHS, чтобы обмануть программу, или это невозможно?

0

1 ответ на вопрос

0
Robin Green

Раньше было возможно искать количество логических цилиндров, головок и секторов для диска в BIOS (как пользователь - это также можно сделать программно, поскольку утилита Linux fdisk делала это, но больше не делает ). Затем вы можете решить для c, h и s, используя формулу

A = (c ⋅ Nheads + h) ⋅ Nsectors + (s - 1)

где A - это адрес LBA, Nheads - это количество головок на диске, Nsectors - максимальное количество секторов на дорожку, а (c, h, s) - адрес CHS (от 1 ).

Также возможно изменить значения геометрии CHS в BIOS - но не делайте этого, так как это приведет к тому, что любые операционные системы, такие как Windows, не будут загружаться.