![]() |
|
![]() ![]() ![]() |
|
BNPmaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 4.7.2006 Репутация: нет Всего: нет |
Народ помогите кто-нибудь!
Вот такое дело. В институте по лабораторной нужно написать собственный загрузчик. Целый день промаился и вот что в итоге получилось 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 |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
Сначала напиши загрузчик, располагающийся с 0:7C00h, скомпили его, отруби лишнее и преврати в блок инструкций DB.
Потом напиши загрузчик загрузчика, который выполняет копирование блока данных в адрес 0:7C00h и передачу туда управления, а в блок данных помести код загрузчика в bin-виде. Если не понял - декомпилируй бут-сектор загрузочной ДОС-дискеты. Там делается именно так. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: нет Всего: 29 |
BNPmaster, твой код работать не будет. Вот пример на FASM'е:
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
Примечание: код может работать не как в 0:7C00h, а также и как 07C0h:0 - при этом код можно писАть непосредственно в теле программы с org 0. Или можно его исполнятиь как в 07B0h:100h, тогда код пишешь в org 100h и компиляешь в СОМ-файл, получая СРАЗУ образ бут-сектора.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |