OSDev http://osdev.su/ |
|
Загрузка с флешки http://osdev.su/viewtopic.php?f=6&t=455 |
Страница 1 из 13 |
Автор: | Станислав [ 28 окт 2011, 12:26 ] |
Заголовок сообщения: | Загрузка с флешки |
Кто нибудь знает как загрузиться с флешки? Если на фасме написать простейший загрузчик и записать на первый сектор флешки и указав при загрузки грузиться с флешки ни чего не происходит. Почему? И какой диск указывать при чтении следующих секторов этой флешки? use16 org 7c00h mov ah,00 ;Функция установки режима mov al,13h ;320x200 int 10h ;Вызвать BIOS ret ;Завершим программу times(512-2-($-07C00h)) db 0 db 0x55, 0xAA ;сигнатура, символизирующая о завершении загрузочного сектора |
Автор: | pavia [ 28 окт 2011, 13:28 ] |
Заголовок сообщения: | Re: Загрузка с флешки |
А ваш код ничего и не делает. |
Автор: | Станислав [ 28 окт 2011, 13:42 ] |
Заголовок сообщения: | Re: Загрузка с флешки |
pavia писал(а): А ваш код ничего и не делает. этот код должен выводить текст на экран. С ним тоже тишина. org 07C00h mov ah,14 ; в ah - номер процедуры (вывод знаков в режиме ; телетайпа xor bl,bl mov bx,tex ; в bx, адрес выводимой строки ; 14-я функция требует чтобы адрес был в формате 0000:xxxx ; а у нас он в формате 07c0:xxxx ; по этому к адресу надо добавить 7C00h strt: mov al,[bx] cmp al,0 jz exit_ ; если al=0 (конец строки) то выход inc bx int 10h jmp strt tex db 'Real Hello World',0Dh,0 rb 512-($-7c00h)-2 db 0x55, 0xAA |
Автор: | pavia [ 28 окт 2011, 14:30 ] |
Заголовок сообщения: | Re: Загрузка с флешки |
Советую не сваливать всё в одну кучу, а разбираться со всем по степенно. Цитата: Если на фасме написать простейший загрузчик и записать на первый сектор Надо не в первый, а в нуливой. А почему у вас не работает я точно не знаю. Цитата: И какой диск указывать при чтении следующих секторов этой флешки? Читай Boot Bios Specification там расписано. Цитата: ; в bx, адрес выводимой строки ; 14-я функция требует чтобы адрес был в формате 0000:xxxx ; а у нас он в формате 07c0:xxxx ; по этому к адресу надо добавить 7C00h Смаилик с круглыми глазами. Там еще одна ошибка. Совет научиться пользоваться стеком. |
Автор: | Yoda [ 28 окт 2011, 14:56 ] |
Заголовок сообщения: | Re: Загрузка с флешки |
Куда ret и куда jz exit_? Где инициализация стека? Попробуйте для начала выводить только один символ и сразу после него делать пустой цикл: loop: jmp loop И как правильно сказал pavia, писать надо в нулевой сектор. Кроме того, флешки размечены, как винчестеры, у них есть разделы, а значит, два загрузочных сектора - один MBR, другой - boot сектор соответствующего раздела. Какой из них пишете? Какой утилитой? |
Автор: | Станислав [ 28 окт 2011, 15:10 ] |
Заголовок сообщения: | Re: Загрузка с флешки |
пишу в нулевой программой dmde-free-2.2.2-win32-gui хотел чтобы после загрузки произошло хоть чтонибуть для проверки работоспособности дальше другие задачи |
Автор: | Yoda [ 28 окт 2011, 15:21 ] |
Заголовок сообщения: | Re: Загрузка с флешки |
ОК. Тогда Yoda писал(а): Куда ret и куда jz exit_? Где инициализация стека? Попробуйте для начала выводить только один символ и сразу после него делать пустой цикл: loop: jmp loop А также инициализируйте все сегментные регистры, желательно и CS. |
Автор: | Станислав [ 28 окт 2011, 15:30 ] |
Заголовок сообщения: | Re: Загрузка с флешки |
этот код я скачал из инета. статья про загрузчик с дискеты а я хочю с флешки! но у меня не работает org 07C00h main: jmp far 00:entry1 ; это необходимо для того, чтобы точно знать, что ; мы находимся на 0000:07C00h entry1: cli ; запрещаем прерывания mov ax,cs mov ds,ax ; устанавливаем сегмент данных sti ; разрешаем прерывания mov ah,14 ; в ah - номер процедуры (вывод знаков в режиме ; телетайпа xor bl,bl mov bx,tex ; в bx, адрес выводимой строки ; 14-я функция требует чтобы адрес был в формате 0000:xxxx ; а у нас он в формате 07c0:xxxx ; по этому к адресу надо добавить 7C00h strt: mov al,[bx] test al,al jz exit_ ; если al=0 (конец строки) то выход inc bx int 10h jmp strt exit_: cli jmp $ ; завешиваем компьютер ($ заменяется на адрес текущей команды ; следовательно эта команда будет повторятся бесконечно). tex db 'Real Hello World',0Dh,0 times 510-($-main) db 0 ; эта директива заставляет компилятор заполнить оставшееся (до 512-и байт) место нулями db 0x55, 0xAA |
Автор: | phantom-84 [ 28 окт 2011, 17:10 ] |
Заголовок сообщения: | Re: Загрузка с флешки |
Не сдержался... Код: org 7C00h
xor ax,ax cli mov ss,ax mov sp,$$ ; 7C00h sti mov ds,ax jmp 0:@f @@: mov si,msg call putstr @@: hlt jmp short @b ; bx для адресации строки лучше не использовать, ; потому что функция 0Eh может принимать в нем один из своих параметров ; функция 0Eh не разрушает ни значение регистра si, ни значение флага направления - ; проверено существующими загрузчиками (я сохраняю si и не использую флаг направления ; лишь по традиции) @@: mov bx,7 mov ah,0Eh push si int 10h pop si inc si putstr: mov al,[si] and al,al jg short @b ret msg: db 13,10,"Hello World!",32,0 ; практически все флешки размечаются, как жесткие диски, ; поэтому наш код будет иметь размер 440 байт по примеру MBR-загрузчиков db 440-($-$$) dup 0 |
Автор: | Станислав [ 28 окт 2011, 17:28 ] |
Заголовок сообщения: | Re: Загрузка с флешки |
но если в конце сектора, после 510 байт не будет 0x55, 0xAA то биус не будет считать его загрузчиком?? |
Страница 1 из 13 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |