Я пишу загрузчик, но я не уверен, правильно ли я делаю. Во-первых, я использую этот пакетный скрипт для компиляции моего загрузчика:org 0C700h дает странный вывод
dm\bin\dmc.exe -msdo -c -cpp bootloader.cpp
masm\bin\ml.exe -c bootloaderASM.asm
dm\bin\link.exe /BINARY bootloaderASM.obj bootloader.obj
Я использую компилятор и компоновщик DMC, наряду с MASM 615 ассемблере, все они должны быть 16 бит (DMC одновременно 16 и 32) , Теперь в моем файле сборки bootloaderASM.asm, если я добавлю «org 07C00», загрузочный файл bootMaster.sys будет заполнен 0 до 07C00, тогда ожидаемый код будет заполнен. Однако, если я удалю его, выходной файл будет как и ожидалось. Как я понял, инструкция org просто корректирует адреса, используемые моими инструкциями, так что база 07C00, я полагаю, она не должна заполнять мои выходные файлы нулями?
Файлы .obj от компилятора и ассемблера кажутся в порядке. Они не содержат ведущих нулей до 0x07c00, но конечный результат компоновщика - это не так.
В настоящее время проблема с компоновщиком? как я могу это исправить/вы предлагаете другой (16-разрядный) компоновщик? Также - это нормально, если я просто игнорирую инструкцию org для моего загрузчика?
Кроме того - я написал программу для чтения моего загрузчика и записал его в загрузочном секторе виртуального жесткого диска, я могу просто изменить его, чтобы игнорировать ведущие нули в выводе компоновщика - будет ли это работать?
спасибо.
Я не использовал компоновщик Digital Mars, но, возможно,/BASE' и '/ FIXED' могут выполнить то, что вы хотите (в сочетании с' ORG 0'). – Michael
Благодарим вас за ответ. Поэтому я не уверен, как опция/FIXED помогает, но если я использую/BASE: 31744 (07C00 в десятичной форме), это сделает так, чтобы иметь org 0 в загрузчике? –
Базовый адрес должен указываться в шестнадцатеричном, а не десятичном формате. Будет ли это работать или нет, я не знаю, так как я его не использовал. Я только предложил это как-то, что вы могли бы попробовать. – Michael