История изменений
Исправление lenin386, (текущая версия) :
push ax ;Этот кластер
mov cx,ax
add cx,1+9*2+14-1 ;BOOT+FAT+ROOT-MICROSOFT_GLUK#2
Вот тут ты типа переводишь номер кластера в номер сектора, чтобы потом сконвертировать в CHS процедурой, которую оттуда-то сπ, но она тоже не правильная, потому что ты даже CHS не считываешь. А это всё вариативные параметры даже на дискете. На пятидюймовой дискете 15 секторов на дороге, на 720k - 9. На жестком диске вообще всё не так. + 1 - правильно. +9*2 - правильно, хотя такое работать не будет уже на по другому отформатированной floppy. Количество секторов на FAT и её количество - может быть различно. Эти числа надо вычитывать, из специальной области. А вот дальше - ты от бессилия начал подгонять цыфирьки, чтоб заработало. Что за число 14 и MICROSOFT_GLUK#2 - я не знаю. Догадываюсь, как ты к ним пришёл, но лучше не комментировать. Вообще, тут должно быть nrec_in_root*32 / 512, которые тоже надо вычитывать, но не получается, «MICROSOFT_GLUK#2» мешает.
mov ax,0201h ;Читать, один.
int 13h
Читать, один. СЕКТОР. А надо - КЛАСТЕР. Ага. Оно сработало потому, что у тебя в данном конкретном случае, у тебя получился размер кластера - один сектор. Такое бывает абсолютно не всегда, даже на floppy. Это разные понятия, если кластер был всегда равен сектору, такого понятия не было бы.
Исправление lenin386, :
push ax ;Этот кластер
mov cx,ax
add cx,1+9*2+14-1 ;BOOT+FAT+ROOT-MICROSOFT_GLUK#2
Вот тут ты типа переводишь номер кластера в номер сектора, чтобы потом сконвертировать в CHS процедурой, которую оттуда-то сπ, но она тоже не правильная, потому что ты даже CHS не считываешь. А это всё вариативные параметры даже на дискете. На пятидюймовой дискете 15 секторов на дороге, на 720k - 9. На жестком диске вообще всё не так. + 1 - правильно. +9*2 - правильно, хотя такое работать не будет уже на по другому отформатированной floppy. Количество секторов на FAT и её количество - может быть различно. Эти числа надо вычитывать, из специальной области. А вот дальше - ты от бессилия начал подгонять цыфирьки, чтоб заработало. Что за число 14 и MICROSOFT_GLUK#2 - я не знаю. Догадываюсь, как ты к ним пришёл, но лучше не комментировать. Вообще, тут должно быть nrec_in_root*32 / 512, но не получается, «MICROSOFT_GLUK#2» мешает.
mov ax,0201h ;Читать, один.
int 13h
Читать, один. СЕКТОР. А надо - КЛАСТЕР. Ага. Оно сработало потому, что у тебя в данном конкретном случае, у тебя получился размер кластера - один сектор. Такое бывает абсолютно не всегда, даже на floppy. Это разные понятия, если кластер был всегда равен сектору, такого понятия не было бы.
Исправление lenin386, :
push ax ;Этот кластер
mov cx,ax
add cx,1+9*2+14-1 ;BOOT+FAT+ROOT-MICROSOFT_GLUK#2
Вот тут ты типа переводишь номер кластера в номер сектора, чтобы потом сконвертировать в CHS процедурой, которую оттуда-то сπ, но она тоже не правильная, потому что ты даже CHS не считываешь. А это всё вариативные параметры даже на дискете. На пятидюймовой дискете 15 секторов на дороге, на 720k - 9. На жестком диске вообще всё не так. + 1 - правильно. +9*2 - правильно, хотя такое работать не будет уже на по другому отформатированной floppy. Количество секторов на FAT и её количество - может быть различно. Эти числа надо вычитывать, из специальной области. А вот дальше - ты от бессилия начал подгонять цыфирьки, чтоб заработало. Что за число 14 и MICROSOFT_GLUK#2 - я не знаю. Догадываюсь, как ты к ним пришёл, но лучше не комментировать. Вообще, тут должно быть nrec_in_root*32 / 512, но не получается, «MICROSOFT_GLUK#2» мешает.
mov ax,0201h ;Читать, один.
int 13h
Читать, один. СЕКТОР. А надо - КЛАСТЕР. Ага. Оно сработало потому, что у тебя в данном конкретном случае, размер кластера - один сектор. Такое бывает не всегда. Это разные понятия, если кластер был всегда равен сектору, такого понятия не было бы.
Исправление lenin386, :
push ax ;Этот кластер
mov cx,ax
add cx,1+9*2+14-1 ;BOOT+FAT+ROOT-MICROSOFT_GLUK#2
Вот тут ты типа переводишь номер кластера в номер сектора, чтобы потом сконвертировать в CHS процедурой, которую оттуда-то сπ, но она тоже не правильная, потому что ты даже CHS не считываешь. А это всё вариативные параметры даже на дискете. На пятидюймовой дискете 15 секторов на дороге, на 720k - 9. На жестком диске вообще всё не так. + 1 - правильно. +9*2 - правильно, хотя такое работать не будет уже на по другому отформатированной floppy. Количество секторов на FAT и её количество - может быть различно. Эти числа надо вычитывать, из специальной области. А вот дальше - ты от бессилия начал подгонять цыфирьки, чтоб заработало. Что за число 14 и MICROSOFT_GLUK#2 - я не знаю. Догадываюсь, как ты к ним пришёл, но лучше не комментировать Вообще, тут должно быть nrec_in_root*32 / 512, но не получается, «MICROSOFT_GLUK#2» мешает.
mov ax,0201h ;Читать, один.
int 13h
Читать, один. СЕКТОР. А надо - КЛАСТЕР. Ага. Оно сработало потому, что у тебя в данном конкретном случае, размер кластера - один сектор. Такое бывает не всегда. Это разные понятия, если кластер был всегда равен сектору, такого понятия не было бы.
Исправление lenin386, :
push ax ;Этот кластер
mov cx,ax
add cx,1+9*2+14-1 ;BOOT+FAT+ROOT-MICROSOFT_GLUK#2
Вот тут ты типа переводишь номер кластера в номер сектора, чтобы потом сконвертировать в CHS процедурой, которую оттуда-то сπ, но она тоже не правильная, потому что ты даже CHS не считываешь. А это всё вариативные параметры даже на дискете. На пятидюймовой дискете 15 секторов на дороге, на 720k - 9. На жестком диске вообще всё не так. + 1 - правильно. +9*2 - правильно, хотя такое работать не будет уже на по другому отформатированной floppy. Эти числа надо вычитывать, из специальной области. А вот дальше - ты от бессилия начал подгонять цыфирьки, чтоб заработало. Что за число 14 и MICROSOFT_GLUK#2 - я не знаю. Догадываюсь, как ты к ним пришёл, но лучше не комментировать Вообще, тут должно быть nrec_in_root*32 / 512, но не получается, «MICROSOFT_GLUK#2» мешает.
mov ax,0201h ;Читать, один.
int 13h
Читать, один. СЕКТОР. А надо - КЛАСТЕР. Ага. Оно сработало потому, что у тебя в данном конкретном случае, размер кластера - один сектор. Такое бывает не всегда. Это разные понятия, если кластер был всегда равен сектору, такого понятия не было бы.
Исправление lenin386, :
push ax ;Этот кластер
mov cx,ax
add cx,1+9*2+14-1 ;BOOT+FAT+ROOT-MICROSOFT_GLUK#2
Вот тут ты типа переводишь номер кластера в номер сектора, чтобы потом сконвертировать в CHS процедурой, которую оттуда-то сπ, но она тоже не правильная, потому что ты даже CHS не считываешь. А это всё вариативные параметры даже на дискете. На пятидюймовой дискете 15 секторов на дороге, на 720k - 9. + 1 - правильно. +9*2 - правильно, хотя такое работать не будет уже на по другому отформатированной floppy. Эти числа надо вычитывать, из специальной области. А вот дальше - ты от бессилия начал подгонять цыфирьки, чтоб заработало. Что за число 14 и MICROSOFT_GLUK#2 - я не знаю. Догадываюсь, как ты к ним пришёл, но лучше не комментировать Вообще, тут должно быть nrec_in_root*32 / 512, но не получается, «MICROSOFT_GLUK#2» мешает.
mov ax,0201h ;Читать, один.
int 13h
Читать, один. СЕКТОР. А надо - КЛАСТЕР. Ага. Оно сработало потому, что у тебя в данном конкретном случае, размер кластера - один сектор. Такое бывает не всегда. Это разные понятия, если кластер был всегда равен сектору, такого понятия не было бы.
Исходная версия lenin386, :
push ax ;Этот кластер
mov cx,ax
add cx,1+9*2+14-1 ;BOOT+FAT+ROOT-MICROSOFT_GLUK#2
Вот тут ты типа переводишь номер кластера в номер сектора, чтобы потом сконвертировать в CHS процедурой, которую оттуда-то сπ, но она тоже не правильная, потому что ты даже CHS не считываешь. А это всё вариативные параметры даже на дискете. На пятидюймовой дискете 15 секторов на дороге, на 720k - 9. + 1 - правильно. На диске - вообще другие цифры. +9*2 - правильно, хотя такое работать не будет уже на по другому отформатированной floppy. Эти числа надо вычитывать, из специальной области. А вот дальше - ты от бессилия начал подгонять цыфирьки, чтоб заработало. Что за число 14 и MICROSOFT_GLUK#2 - я не знаю. Догадываюсь, как ты к ним пришёл, но лучше не комментировать Вообще, тут должно быть nrec_in_root*32 / 512, но не получается, «MICROSOFT_GLUK#2» мешает.
mov ax,0201h ;Читать, один.
int 13h
Читать, один. СЕКТОР. А надо - КЛАСТЕР. Ага. Оно сработало потому, что у тебя в данном конкретном случае, размер кластера - один сектор. Такое бывает не всегда. Это разные понятия, если кластер был всегда равен сектору, такого понятия не было бы.