![]() |
|
|
![]()
|
|
| Yui |
|
|||
|
Unregistered |
|
|||
|
||||
| Guest_Yuri |
|
|||
|
Unregistered |
Нужно написать прогу загрузчика ОС!
|
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
а вчем собственно проблема то?
ос та какая ? реал моде,пмоде? -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
лови:
копирует файл boot.com (который кстати должет быть естесно откомпилин как !!com!! и org 0h !!!!) в нём пиши чё хош всё это ляжет по адресу 0х7c00 и получит управление незабудь файл пиши в пределах 509 килобайтов !! максимум!!! .Model tiny .Code Org 100h Begin: mov ah,9 mov dx,offset Hello1 int 21h xor ah,ah int 16h ;Выводим приветствие и ждем нажатия ;на любую клавишу mov ah,3Dh xor al,al xor cx,cx mov dx,Offset FileName int 21h ;открываем файл для чтения jb Error2 ;Если файл не найден mov File1,ax mov bx,File1 mov dx,offset Buffer ReadNext: mov bx,File1 mov ah,3Fh mov cx,1h int 21h ;Считываем байт inc dx dec ax js ReadNext1 ;Выход если ошибка jmp ReadNext ReadNext1: mov ah,3Eh mov bx,File1 int 21h ;Закрыть файл mov si,dx dec si mov di,offset Buffer add di,512 ;В di конец буффера Loop1: mov byte ptr [si],00h inc si cmp si,di jne Loop1 ;Забить конец буффера 00h mov word ptr [di-2],0AA55h ;Отправить в конец буффера сигнатуру xor ah,ah xor dl,dl int 13h ;Подготовить дисковод к вводу-выводу jb Error1 ;Если ошибка Loop2: mov ah,03h mov al,1h xor ch,ch mov cl,0000001b xor dh,dh xor dl,dl mov bx,offset Buffer int 13h ;Записать BOOT сектор jae ReadNext2 ;Если нет ошибки ReadNext3: inc NWrite ;10 попыток cmp NWrite,10 ;записи jb Loop2 ;на дискету Error1: mov ah,9 mov dx,offset ErrorStr int 21h ;Сообщение об ошибке записи на дискету ret ReadNext2: mov ah,9 mov dx,offset OK int 21h ;Сообщение об успешном копировании ret ;Выход Error2: mov ah,9 mov dx,offset ErrorStr1 int 21h ;Сообщение о невозможности найти файл ;boot.com ret FileName db 'boot.com',0 ErrorStr db 0Ah,0Dh,'Ошибка записи на дискету $' ErrorStr1 db 0Ah,0Dh,'Файл boot.com не найден или поврежден$' Hello1 db 0Ah,0Dh,'Вставьте в дисковод a: чистую дискету и нажмите любую клавишу$' OK db 0Ah,0Dh,'BOOT сектор успешно скопирован$' File1 dw 0000h ;Описатель файла NWrite db 00h ;Число попыток записи Buffer: end Begin |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
какойже это загрузчик?
это записвалка для бут сектора и тем более не на org0h нада комилить а на 7c00h и при чем тут 509 кб? биос загрузит 1 сектор (а сектор может быть и 128 и 256 и 512 и 1024 но никак не 509 кб) а 509кб это ты видимо доступную память посчитал? а почему тогда не 640? да ваще кто мешает мне flat сделать? будет вся память доступна -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
ну да но так по моему это и надо было? или я неправ? у меня вот по началу была проблема написать не то что должно работать в памяти при загрузке а как это туда загрузить чтоб с дискеты работало воть..
а 509 т.к у дискеты сектор 512 килов вычти таблицу параметров дискеты(дос формат канечно) (прога то считывает файл досовской функцией... и если запортить таблицу параметров то несможем записать на неё kernel.com см дальше) ну кстати разницы на счёт org0 и org 7с00 я проверял работало и так ... и так ) может я неправ) вот а файл этот boot.com пусть к примеру ищет на диске kernel.com и грузит его в память куда там удобнее... а файл kernel.com просто можно кинуть на дискету прога (boot.com)сама найдёт где он... вот по это му то нужно сохранять таблицу параметров а то винды думают что дискета неотформаченна) |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
Unregistered шутник ты однако
не кб а байт наверно да и системная инфа там ну ни как не 3 байта OemName: db 'Shit OS ' ; OEM name and version BytesPerSec dw 512 ; bytes per sector SecPerClust db 1 ; sectors per cluster ResSectors dw 1 ; number of reserved sectors FATs db 2 ; number of FATs RootDirEnts dw 224 ; number of root directory entries Sectors dw 2880 ; total number of sectors (see HugeSectors) Media db 0f0h ; media descriptor byte (0f0h for floppies) FATsecs dw 9 ; number of sectors per FAT SecPerTrack dw 18 ; sectors per track Heads dw 2 ; number of heads HiddenSecs dd 0 ; number of hidden sectors HugeSectors dd 0 ; number of sectors if Sectors equals 0 DriveNumber db 0 ; Reserved1 db 0 ; BootSignature db 29h ; VolumeID dd 0 ; VolumeLabel: times 11 db 0 FileSysType: db 'Shit FS ' extra dw 0 и в конце сектора не забыть 55h,aah поставить а то некоторые биосы его грузить не будут -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
блин чувак реал виноват обшибся %) я просто поглядел на откомпилиный файл boot.com и вспомнил что там 509 байт это всё и параметры и ещё один байт 00 а два других как раз сигнатура... бывает
|
|||
|
||||
| Unregistered=noFX |
|
|||
|
Unregistered |
все эти оставшиеся байты как раз пишет тот код инсталятора который я писал выше... p.s а ты давно на асме кодиш? |
|||
|
||||
| noFX |
|
|||
|
Unregistered |
nop ;для jmp т.к переход короткий………
OEMName DB 'K SYS V0' ;Имя и версия SectSize DW 512 ;Байт на сектор ClustSize DB 1 ;Секторов на кластер ResSecs DW 0001 ;Колличество резервных секторов FatCnt DB 2 ;Число таблиц FAT RootSiz DW 224 ;Макс. колл. элементов в корневом каталоге TotSecs DW 2880 ;Общее колл. секторов Media DB 0F0h ;Тип носителя FatSize DW 0009 ;Колличество секторов в одной FAT TrkSecs DW 0018 ;Колличество секторов в дорожке HeadCnt DW 0002 ;Колличество головок HidnSec DD 00000000 ;Колличество скрытых секторов SectDisk DD 00000000 ;Общее колл. секторов на лог. диске PhizNum DB 00 ;Физический номер диска Rezerv DB 00 ;Зарезервированно Sig DB 29h ;Сигнатура 29h NumDisk DD 00000000 ;Двоичный номер диска LblDisk DB 'K SYSTEM OS' IdntFS DB 'FAT12 ' ;Идентифекатор файловой сиcтемы как я оформил табличку... |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
Unregistered=noFX
со спектрума -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| noFX |
|
|||
|
Unregistered |
круто! а я вот недавно))
|
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |