| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Загрузчик - как написать? |
| Автор: BNPmaster 17.9.2006, 19:31 |
| Народ помогите кто-нибудь! Вот такое дело. В институте по лабораторной нужно написать собственный загрузчик. Целый день промаился и вот что в итоге получилось MODEL tiny .CODE ORG 100h Start: jmp Start1 ORG 7c00h ;------------------------------------ броблема Start1: jmp Begin db 'bootsect' SectSize dw 00200h ClustSize db 001h ResSecs dw 00001h FatCnt db 002h RootSiz dw 000E0h TotSecs dw 00B40h Media db 0F0h FatSize dw 00009h TrkSecs dw 00012h HeadCnt dw 00002h HidnSec dw 00000h Begin: MOV DX, OFFSET message MOV AH, 9 INT 21h INT 20h message: db 'Hello,world!$',0 end Start Компилируется и запускается это всё отлично, однако после компоповки COM файл весит около 30Kb (загрузочный сектор вмещает 512 байт). Это происходит из-за использования дерективы ORG, которая увеличивает счётчик, до 07с00h. Насколько я понимаю, ассемблер помещает все данные между точкой входа 100h и 07с00h в конечный модуль. Вот собственно и вопрос - как объяснить Ассемблеру, что этого делать не надо. Сама деректива ORG 07c00h важна, поскольку именно по этому адресу BIOS помещает информацию из загрузочного сектора Заранее Thanks. |
| Автор: Akina 17.9.2006, 20:57 |
| Сначала напиши загрузчик, располагающийся с 0:7C00h, скомпили его, отруби лишнее и преврати в блок инструкций DB. Потом напиши загрузчик загрузчика, который выполняет копирование блока данных в адрес 0:7C00h и передачу туда управления, а в блок данных помести код загрузчика в bin-виде. Если не понял - декомпилируй бут-сектор загрузочной ДОС-дискеты. Там делается именно так. |
| Автор: Damarus 18.9.2006, 00:18 | ||
BNPmaster, твой код работать не будет. Вот пример на FASM'е:
|
| Автор: Akina 18.9.2006, 00:43 |
| Примечание: код может работать не как в 0:7C00h, а также и как 07C0h:0 - при этом код можно писАть непосредственно в теле программы с org 0. Или можно его исполнятиь как в 07B0h:100h, тогда код пишешь в org 100h и компиляешь в СОМ-файл, получая СРАЗУ образ бут-сектора. |