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/