OSDev

для всех
Текущее время: 26 дек 2024, 14:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу 1, 2, 3, 4, 5 ... 13  След.
Автор Сообщение
 Заголовок сообщения: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 12:26 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Кто нибудь знает как загрузиться с флешки?
Если на фасме написать простейший загрузчик и записать на первый сектор флешки и указав при загрузки грузиться с флешки ни чего не происходит. Почему?
И какой диск указывать при чтении следующих секторов этой флешки?
use16
org 7c00h
mov ah,00 ;Функция установки режима
mov al,13h ;320x200
int 10h ;Вызвать BIOS
ret ;Завершим программу
times(512-2-($-07C00h)) db 0
db 0x55, 0xAA ;сигнатура, символизирующая о завершении загрузочного сектора


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 13:28 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
А ваш код ничего и не делает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 13:42 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 14:30 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Советую не сваливать всё в одну кучу, а разбираться со всем по степенно.

Цитата:
Если на фасме написать простейший загрузчик и записать на первый сектор

Надо не в первый, а в нуливой.

А почему у вас не работает я точно не знаю.

Цитата:
И какой диск указывать при чтении следующих секторов этой флешки?

Читай Boot Bios Specification там расписано.

Цитата:
; в bx, адрес выводимой строки
; 14-я функция требует чтобы адрес был в формате 0000:xxxx
; а у нас он в формате 07c0:xxxx
; по этому к адресу надо добавить 7C00h

Смаилик с круглыми глазами.

Там еще одна ошибка. Совет научиться пользоваться стеком.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 14:56 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 972
Откуда: Дагоба
Куда ret и куда jz exit_?
Где инициализация стека?
Попробуйте для начала выводить только один символ и сразу после него делать пустой цикл:
loop: jmp loop

И как правильно сказал pavia, писать надо в нулевой сектор.
Кроме того, флешки размечены, как винчестеры, у них есть разделы, а значит, два загрузочных сектора - один MBR, другой - boot сектор соответствующего раздела. Какой из них пишете? Какой утилитой?

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 15:10 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
пишу в нулевой программой dmde-free-2.2.2-win32-gui

хотел чтобы после загрузки произошло хоть чтонибуть для проверки работоспособности
дальше другие задачи


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 15:21 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 972
Откуда: Дагоба
ОК. Тогда
Yoda писал(а):
Куда ret и куда jz exit_?
Где инициализация стека?
Попробуйте для начала выводить только один символ и сразу после него делать пустой цикл:
loop: jmp loop

А также инициализируйте все сегментные регистры, желательно и CS.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 15:30 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
этот код я скачал из инета.
статья про загрузчик с дискеты
а я хочю с флешки!
но у меня не работает

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 17:10 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Не сдержался...

Код:
   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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 28 окт 2011, 17:28 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
но если в конце сектора, после 510 байт не будет 0x55, 0xAA то биус не будет считать его загрузчиком??


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу 1, 2, 3, 4, 5 ... 13  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB