![]() |
|
|
![]()
|
|
| PoluBOG1 |
|
|||
|
Unregistered |
Как определить размер кода, и записать его в бут-сектор (о прерываниях Биоса знаю!
|
|||
|
||||
| Western |
|
|||
|
Unregistered |
Bioso -вское пррывание 13Н , АН=03 - запись секторов (ЕS:BX)
|
|||
|
||||
| PoluBOG1 |
|
|||
|
Unregistered |
Да я это знаю! Но вот как поместить код в память What is the qwestion!
|
|||
|
||||
| Melancholy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 1.4.2002 Репутация: нет Всего: нет |
во первых начальный адрес кода должен быть не 100h (как в COM файлах), а 7C00h... а потом пихаешь этот код на нулевую дорожку дискетки и грузишься с дисеты (можешь на винч, если ты самоубийца)
|
|||
|
||||
| PoluBOG1 |
|
|||
|
Unregistered |
В том то и маза, как на нулевую дорожку-то всё кинуть! Я ето и пытаюсь узнать!
|
|||
|
||||
| PoluBOG1 |
|
|||
|
Unregistered |
И как же всё таки узнать размер кода?!
|
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Возьми исходник какой-нить операционки и посмори как там сделано =)
тот же LILO -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Смотри, как инсталлируется "мой"(идеи древние) бут-вирус в дискету:
Размер контролируешь сам, смотри, к примеру, за значением VirLenght. Код необходимо сделать ПЕРЕМЕЩАЕМЫМ(см. код выше) - тогда тебе плевать на смещение 7c00 - или с какого другого он стартует ЗЫ: Да, парни правильно сказали - упаси тебя записать в свой MBR чего-нибудь -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Melancholy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 1.4.2002 Репутация: нет Всего: нет |
Когда я писал жалкое подобие оси я делал так:
1. асмел бут сектор ;---------------------- ex equ 019h text segment 'code' assume cs:text,ds:text org 0100h begin: jmp sta org 07C00h sta: jmp short strt nop OS db 'MELOS' ; Melancholy Operation System OSVersion db 001h,000h,000h BytePerSector dw 00200h ; Байт в секторе MCylinders dw 0004Fh ; Максимальное значение цилиндра MSectors db 012h ; Максимальное значение сектора MHeads db 001h ; Максимальное значение головки TotalSec32 dd 000000B40h ; Колличество секторов на диске SerialNumber dd 012345678h ; Серийный номер диска DiskLabel db 'NO NAME',9 dup(0) ; Метка диска System db 'MFATSFDD' ; Melancholy FAT System Floppy Disk Driver Strt: cli cld mov si,offset msg call wrt cmp Kernelsize,byte ptr 0 je MP001 push ds es mov ax,kernelsec mov bl,msectors div bl mov cl,ah inc cl ; Sector mov ah,0 mov bl,mheads inc bl div bl mov ch,al mov dh,ah mov ax,KernelSeg mov es,ax mov ah,002h mov al,kernelsize mov bx,KernelOfs mov dl,0 int 013h ; call far 01000h:00100h db 09Ah KernelOfs dw 00100h KernelSeg dw 01000h pop es ds MP001: mov si,offset msg2 call wrt xor ax,ax int 016h int ex msg db 'Starting MelBOOT v1.0...',00Dh,00Ah,000h msg2 db 'Drive without Kernel.',00Dh,00Ah db 'Replace the disk and then press any key...',000h wrt proc mov ah,00Eh mov bx,00007h wrt001: lodsb cmp al,000h je wrt002 int 010h jmp short wrt001 wrt002: ret wrt endp endID db 055h,0AAh org 07DFDh KernelSec dw 00001h KernelSize db 001h text ends end begin ;---------------- 2. компелил его и на паскале писал прогу которая вырезала бут сектор из COM файла и пихала его в бут-сектор... Вот исходник на паскале: procedure write2disk(buf:pointer;n:word);assembler; const AbsSectNum:word=0; AbsHeadNum:word=0; TrkSecs:word=$0012; asm { ; Начало расчета сектора/дорожки/головки} mov dx,n mov cx,[TrkSecs] mov si,dx { ; tmp=(Sect/Sectors);} mov ax,si xor dx,dx div cx mov di,ax { ; Sec=Sect-(tmp*Sectors)+1;} mov ax,di imul cx mov dx,si sub dx,ax inc dx mov [AbsSectNum],dx { ; Hea=tmp & 1;} mov ax,di and ax,1 mov [AbsHeadNum],ax { ; Trk=(Sect-(Hea*Sectors)-(Sec-1))/(Sectors*2);} imul cx push ax mov ax,si pop dx sub ax,dx mov dx,[AbsSectNum] dec dx sub ax,dx mov dx,cx shl dx,1 push ax push dx xor dx,dx pop bx pop ax div bx {; AX = AbsTrackNum} { ; Конец расчетов} mov cx,ax mov al,cl shr cx,2 and cl,0C0h mov ch,al and cx,0FFC0h mov ax,[AbsSectNum] {; г5T4T3T2T1T0T9T8T7T6T5T4T3T2T1T0-} or cl,al {; CX = c c c c c c c c C c S s s s s s} les bx,buf mov dx,[AbsHeadNum] mov dh,dl {; Номер головки} mov dl,0 {; Номер диска 0 = A} mov al,1 {; Количество считываемых секторов} mov ah,3 {; Номер функции} int 13h end; var f:file; n:word; buf:array[0..511] of byte; i:integer; begin assign(f,paramstr(1));reset(f,1);seek(f,$7B00); n:=0; repeat fillchar(buf,512,0); blockread(f,buf,512,i); if i>0 then write2disk(@buf,n); inc(n); write(n,#13); until i<512; close(f); end. как это все работает надеюсь объяснять не надо. PS код конечно написан кривовато.... pps а размер кода бут-сектора не должен превышать 512 байт. |
|||
|
||||
| PoluBOG1 |
|
|||
|
Unregistered |
Cнкс усё работает, повозится правда пришлось:
"shr cx,2" - команда 286 камня, а в пасе ".286" - не фурычит пришлось заменить на " shr cx,1 shr cx,2" Ещё вопрос : как код проги определить, и что будет с винтом, если в его бут записать (заинтриговали!!!!!!!!!!!! |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Команды 286 пучково вставляются в пас, только надо подключить их:
Если ты запишешь в MBR что-то не то, то BIOS отчего-то - Создай две или больше системных дискет; - Запиши в файл свой mbr (я делаю просто 512-байтный файл=MBR); - Создай простую программку(если хочешь, могу дать свою), которая в состоянии записать MBR обратно из этого файла; - Все это запиши в корень на каждую системную дискету. Если ты угробишь в ходе экспериментов MBR, то всегда можешь легко его восстановить, если загрузишься с системной дискеты и запустишь восстанавливающий код. Все это справедливо и для BOOT-а активного раздела винта. -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| PoluBOG1 |
|
|||
|
Unregistered |
Я тут описался :shr cx,2" - команда 286 камня, а в пасе ".286" - не фурычит
пришлось заменить на " shr cx,1 shr cx,1" А прогу я сам теперь напишу (у меня есть исходник проги на асме , кот. читает сектора) А мазу с вот ентой командой ( {$G+} ), я знаю, но пас меня обматерил и сказал, что не знает что ето. А за код О-о-о-о-о-о-о-о-огромное спасибо!!! А как прикинуть размер проги ещё в кодах-то? |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Как прикинуть размер проги:
mov ax,bx @@BeginOfProc: mov ax,0201h les bx,DiskBuffer mov cx,0001h mov dx,0080h int 13h @@EndOfProc: {...} mov ax,offset @@EndOfProc - offset @@BeginOfProc {Размер кода между метками} -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| PoluBOG |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 24.5.2002 Репутация: нет Всего: нет |
Я чё не втыкаю!? - Прога весит 32 Кб , а вбуте как-то помещается, требую объяснить!!!
|
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Какая прога ? Твой экзешник на пасе, который записывает ИЗ СЕБЯ бут ?
Конечно, он >> 512 байт. Погялди то, что записалось в бут - и все станет ясно -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |