Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Цилиндры, головки, сектора...

12K
06 июня 2009 года
ASoftware
87 / / 16.04.2009
Всем известно что на обычной 1,44 дискете 2880 секторов, и сектора начинаются с единицы, а головка и дорожка (цилиндр) с нуля.

Так вот. К примеру написал я простой первичный загрузчик. Вторичный загрузчик сидит например не во втором секторе, а к примеру в 33.

Как собственно рассчитать головку и цилиндр, если известен только сектор?

И еще.
DL = номер диска (ну это понятно)
DH = (1 головка - 80 цилиндров, 1 цил. - 18 секторов,значит 1440 секторов - 1 дорожка? так я понимаю? : 1-1440с. - 1 головка; 1441-2880с. - 2я головка?)



CH = номер дорожки (здесь, самое главное что я хотел узнать, если у меня загрузчик на 33 секторе, то тут 2 варианта, я так думаю:

1). сектор 33, головка 0, цилиндр 1
2). сектор 15, головка 0, цилиндр 1

Сектор 15, - потому что 33сектор - 18 секторов в цилиндре = 15


Какой вариант правильный? Или оба неправильны? И если первый правильный, то как я помещу его в 8 битный регистр CH ? Или тогда уже надо применять CX, вместо CH ??
349
06 июня 2009 года
Phantom-84
656 / / 27.10.2005
Не пробовал использовать поиск по форуму?

Если по содержанию, то сразу хочется сказать: "смотря как ты высчитываешь линейный номер сектора 33". Если по традиционной формуле, связывающей LBA и CHS, то твои предположения насчет того, что все сектора в линейной нумерации сначала полностью занимают одну поверхность, а затем полностью другую, не верны. К тому же в линейной нумерации счет идет начиная с нуля. Формулы обратного пересчета я когда-то выкладывал на этом форуме. Все они вытекают из основной формулы. Если у тебя самостоятельно не получится это сделать, будем освежать память. А пока приведу код пересчета как раз для использования в функциях BIOS.
Код:
; в ax линейный номер сектора

  and     dx, 7Fh ; dh=0, в dl номер диска в нумерации BIOS

  div     cl ; в cl число секторов на дорожке (18)
  mov     ch, al
  mov     cl, ah
  shr     ch, 1
  adc     dh, dh
  inc     cx
  mov     ax, 0201h
  int     13h
12K
06 июня 2009 года
ASoftware
87 / / 16.04.2009
Спасибо.
Цитата:
Не пробовал использовать поиск по форуму?


Пробовал, самое подходящее нашел только это
http://forum.codenet.ru/showthread.php?t=11874 а форум lowlevel.ru уже умер я так понял

Ну в том то и дело что я хотел узнать как правильно. Извини, Phantom-84 но я не на все вопросы получил ответы, из всего вышесказанного я только понял что все у меня неправильно.

Высчитываю номер сектора я так:
(номер сектора)MOD 18 = треб. сектор. т.е. 33Mod 18 = 15
Я только хотел узнать, правильно ли это.

На счет кода. Код то простой, но незная теории его сложно понять..
К примеру почему мы меняем старшие и младшие части:
mov ch,al
mov cl,ah

Конечно хотелось бы слышать побольше теории, а код потом не сложно будет написать.

349
17 июня 2009 года
Phantom-84
656 / / 27.10.2005
Извиняюсь за задержку. Потерял тему извиду.

S = N mod 18 + 1, т.к. нумерация сектров на дорожке начинается с 1.
T = N / 18

H = T mod 2
C = T / 2

Делители 18 и 2 - это соответственно SectorsPerTrack и HeadsPerCylinder.

Теории здесь немного. Просто нужно знать, как линейная адресация секторов связана с CHS-адресацией, а фактически как растут линейные номера секторов - сначала в пределах дорожки (на одной поверхности), потом в пределах цилиндра от одной дорожки к другой и лишь в самую последнюю очередь по цилиндрам.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог