LINUX.ORG.RU

Заменяю $ на число - компилируется

 , ,


0

1

Всем ку. Переписываю с fasm на nasm:

times 1474560 - ($-0x7C00) db 0x90

Как переписать? Текущая строка выдает ошибку, пишет что константа нужна, на сколько я понял. Заменяю $ на число - компилируется, но на виртуал бокс не работает. Еще скажите, вот диск cd несколько миллионов байт, я стал записывать, но не дождался. Главное в виртуал бокс мы указываем cd, но люди загружают в сd-привод iso дискет 1,44. Как так? Кстати цифра выше 1474560 - это размер дискеты 1,44. Собственно я учусь и мне на примере простой программы понять как это работает, нужно разъяснение. В частности как дописывать нули, чтобы заполнить дискеты (а как cd при его объеме?). Как вычислить размер программы. Ну и самую простую программу-загрузчик на nasm. Чтобы было показано, где начало загрузчика, а где конец. И где (конкретную строку указать) запускается допустим функция, которая будет загружать ядро и прочее ОС.


Почему не записать этот times как первый times с использованием TR_ЗАГРУЗОЧНЫЙ_СЕКТОР? http://computer-programming-forum.com/46-asm/c7f84285b8112abd.htm Да и просто число можете тупо подобрать, вам же просто нужно чтобы в результате размер был 1474560 байт.

Вобще не понятно зачем автору того загрузчика потребовалось делать его 1.44 Мбайт. Ну был бы файл небольшого размера, ну коприровал бы он его в первые сектора дискеты и всё. Какая разница что на остально части дискеты лежит.

Про CD я вобще не понял. Что вы пытались сделать? Создать исполняемый файл размером 650 Мбайт?

mky ★★★★★
()
Ответ на: комментарий от mky

Почему не записать этот times как первый times с использованием TR_ЗАГРУЗОЧНЫЙ_СЕКТОР? - я пробовал, не работает. Я тоже не понимаю почему 1,44. По повожу CD, логика такая, если заполняем 1,44, значит я подумал и CD заполнять нужно.

Я не говорю что нужно реализовывать как автор. Предложте свой вариант. Главное чтоб минимум кода, мне просто нужно понять как это работает.

wadic2
() автор топика
Ответ на: комментарий от wadic2

Пробовал другой загрузчик, на виртуал бокс пишет ошибку: Could not read from the boot medium! system halted. Почему не читает не понятно. В коде первого загрузчика может быть и есть ошибки. Но со вторым все норм должно быть, там кода мало, почему выдает ошибку. В каких случаях выдает такую ошибку? Другие системы устанавливаются, дело не в виртуал бокс.

wadic2
() автор топика
Ответ на: комментарий от wadic2

TR_ЗАГРУЗОЧНЫЙ_СЕКТОР? - я пробовал, не работает.

Ну вобще уберите этот проблемный times, а потом с помощью dd или чего ещё доведите размер файла до 1474560 байт.

Вот пример «записи» загрузчика на образ дискеты. https://stackoverflow.com/questions/34268518/creating-a-bootable-iso-image-wi... . Сначала создаётся файл размером 1024*1440 байт, потом в начало записывается загрузчик. Только если брать ваш исходный пример, то там больше одного сектора, conut=1 не нужно.

1474560 размер дискеты. Virtual Box'у нужно передать файл такого размера как floppy диск, и указать, что нужно загружаться с него. Стандартной разметки (ФС) для floppy не существует, поэтому размер файла с образом дискеты должен быть равен объёму дискеты.

CD и пр. оптические ностители представляются iso-файлом. Там внутри этого образа/файла прописывается размер, и файл может быть меньше физической ёмкости CD-диска.

Could not read from the boot medium! system halted

virtualbox не может прочитать ваш образ носителя. Ему, ЕМНИП, было важно расширение файла.

Образ дискеты это образ дискеты, образ CD (iso-файл) это не образ дискеты. Загрузочный iso может быть сделан из образа дискеты, но это совсем не:

люди загружают в сd-привод iso дискет 1,44

Поэтому вопрос — что именно вы делаете с VirtualBox?

mky ★★★★★
()
Ответ на: комментарий от mky

Я iso загружаю в него. Большое спасибо. С Вашей помощью разобрался.

wadic2
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.