Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2020, 12:49   #21
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Pavia, Под жесткие диски.
Тогда у вас MBR. И вам надо ужать ваш код до 440 бат. А заним расположить все необходимые структуры. Указанные в вике.

https://osdev.fandom.com/ru/wiki/%D0...81%D1%8C_(MBR)

Нужен 1 активный раздел с кодом 80h в таблице разделов. Если не путаю то Virtual Box это проверяет.
И сигнатура MBR на своем месте. Её проверяют все без исключения.
UniqueMBRSignature - код отличный от 0. Это проверяют некоторые БИОСы эмуляторам по моему без разницы.

Для работы программных прерываний int 13h и тд в qemu необходимо разрешить аппаратные прерывания sti.

Стек тоже надо настроить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 02.11.2020 в 12:55.
Pavia вне форума Ответить с цитированием
Старый 02.11.2020, 12:49   #22
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 02.11.2020 в 12:50. Причина: Дубль
Pavia вне форума Ответить с цитированием
Старый 04.11.2020, 06:18   #23
TheReactiveMouse
Пользователь
 
Регистрация: 02.10.2020
Сообщений: 17
По умолчанию

Pavia, Как я понял без страданий и примеров из инета по реализации это реализовать так же сложно как написать DOS.
TheReactiveMouse вне форума Ответить с цитированием
Старый 12.11.2020, 14:51   #24
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Всю переписку не читал, но...

В бородатом 2002 году писал прогу, которая зашивает в MBR загрузчик. Этот загрузчик при удержании горячей клавиши (например, Ctrl – настраивается) загружает и запускает boot-сектор с дискеты, иначе – оригинальный MBR (который записывается в первый свободный сектор после MBR, насколько я помню). Сделал, чтобы грузиться с дискет без переключения в BIOS

Комментов там достаточно, так что смотрите, разбирайтесь. Так и сам загрузчик и установщик.
Правда, тут не FASM, а MASM, но думаю, перевести, больших проблем не будет.

Если вдруг надо будет под винду (установщик), то: https://github.com/jin-x/mbrset (Delphi).
Вложения
Тип файла: zip bstrap.zip (19.1 Кб, 0 просмотров)
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru

Последний раз редактировалось 7in; 12.11.2020 в 15:07.
7in вне форума Ответить с цитированием
Старый 12.11.2020, 15:14   #25
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Начать загрузчик лучше со следующих строк (в коде bstrap выше не совсем не так).

Если мы НЕ будем ничего загружать в адрес 0:7C00:
Код:
org 0x7C00

    xor ax,ax
    mov ss,ax  ; cli/sti тут не нужны, т.к. между mov ss,* (pop ss) и следующей инструкцией не может возникнуть прерывания (есть такая особенность)
    mov sp,0x7C00
    mov ds,ax  ; если надо
    mov es,ax  ; если надо
    jmp 0:continue  ; на случай, если попадётся странный BIOS, который установит cs:ip != 0:7C00 (например, 7C0:0)

continue:
Если будем загружать что-то в адрес 0:7C00:
Код:
org 0x600

    xor ax,ax
    mov ss,ax  ; cli/sti тут не нужны, т.к. mov ss,* (pop ss) и следующая инструкция никогда не прерываются
    mov sp,0x7C00
    mov ds,ax  ; если надо
    mov es,ax  ; если надо
    mov si,sp
    mov di,0x600
    mov cx,0x100
    cld
    rep movsw  ; копируем себя в 0:0x600
    jmp 0:continue  ; продолжаем работу по адресу 0:0x6??

continue:
Кстати, загрузчику на старте всегда передаётся одно значение: DL = номер диска (для int 13h), с которого загружен текущий сектор MBR.
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru

Последний раз редактировалось 7in; 12.11.2020 в 15:44.
7in вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение\Запись в загрузочный сектор AntonCH Помощь студентам 3 29.11.2017 14:39
записать свой загрузочный сектор на флешку MetR Помощь студентам 0 10.12.2011 18:15
Загрузочный диск ХР avare65 Windows 4 03.12.2009 15:36
загрузочный диск Maxxx 83 Операционные системы общие вопросы 6 10.07.2009 13:31
ЗАПИСЬ В ЗАГРУЗОЧНЫЙ СЕКТОР ERASERROR Общие вопросы Delphi 6 15.01.2008 23:27