Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35

Небольшой загрузчик

27.11.2018, 17:54. Показов 4126. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте

У меня есть bin файл. И мне надо его как-то запустить из кода asm(fasm). Решил пойти на такие "отчаянные" меры просто потому, что ассемблер более-менее знаю, а с GRUB`oм разобраться никак не получается...

Заранее спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.11.2018, 17:54
Ответы с готовыми решениями:

Загрузчик
Нужно создать загрузчик, чтоб можно было с флэшки загрузите командную строку как ОС? Это можно сделать или нет?

Загрузчик на C
Раньше был загрузчик на асме. Но потребовалось усложнить загрузку драйверов. И на асме это сложно. Решил переписать на Си. Как сделать...

Загрузчик Ос с дискеты
Здравствуйте уважаемые программисты! У меня поставлена следующая задача: Я должен написать загрузчик на дискету,который при загрузки...

14
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8663 / 4500 / 1670
Регистрация: 01.02.2015
Сообщений: 13,921
Записей в блоге: 13
27.11.2018, 18:58
А какая связь между названием темы "Небольшой загрузчик" и
Цитата Сообщение от Kukushkha Посмотреть сообщение
У меня есть bin файл. И мне надо его как-то запустить из кода asm(fasm)
.............
а с GRUB`oм разобраться никак не получается...
0
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
27.11.2018, 20:57  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
А какая связь
Ну, мне надо сделать загрузчик на ассемблере, который будет загружаться сам и вызывать метод main, находящийся в bin-файле. А про GRUB написал потому, что некоторые любят писать "лучше, использовать GRUB" или "те, кто начинает писать свой загрузчик, на нем и заканчивают" и т.д.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
27.11.2018, 21:11
Цитата Сообщение от Kukushkha Посмотреть сообщение
мне надо сделать загрузчик на ассемблере,
с какого носителя будешь грузиться? флопик, флэшка или что-там ещё..
1
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
27.11.2018, 21:19  [ТС]
Цитата Сообщение от R71MT Посмотреть сообщение
с какого носителя будешь грузиться
ну. буду тестить на виртуалке. поэтому, виртуальный флопик
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
27.11.2018, 21:37
тогда вот, когда-то тестил на физическом флопике..
файловая система не нужна, поэтому можешь затирать первый сектор и кидать этот загрузчик прямо туда. Во второй сектор образа флопа записывай свой код, который после ребута считается в память и запустится на исполнение:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
use16
org 7C00h
jmp start
 
mess0   db  ' READ BOOT-SECTOR: OK!',13,10
        db  '  L - load OS',13,10,'  R - reboot'
mess1   db  ' Loading "DEMO-OS v0.1"....'
error   db  ' ERROR!'
 
start:
; сегментные регистры в нуль, и устанавливаем стэк
   cli
   xor   ax,ax
   mov   ds,ax
   mov   es,ax
   mov   ss,ax
   mov   sp,600h      ; стэк мне нужен для CALL/RET
   sti
 
; ставим режим 80х25 и убираем курсор
   mov   ax,3
   int   10h
   mov   ah,1
   mov   ch,20h
   int   10h
 
; выводим мессагу, что мы по-адресу 0:7C00h
   mov   bp,mess0
   xor   dx,dx
   mov   cx,51
   call  printStr
 
; ждём дальнейших указаний..
@@:
   xor   ax,ax
   int   16h
   cmp   al,'L'
   je    @loading
   cmp   al,'R'
   je    @reboot
   jmp   @b
 
; переходим к загрузки ОС из сектора(2) флопа..
@loading:
   mov   bp,mess1      ; мессага
   mov   dx,1419h      ; позиция текста в окне
   mov   cx,27         ; длина строки
   call  printStr      ;
 
   mov   bp,3          ; счётчик попыток чтения сектора
   mov   al,1          ; считать 1 сектор,
   mov   bx,7E00h      ;    ..на адрес 7Е00h
   mov   cx,2          ; номер сектора для чтения
   xor   dx,dx         ; головка/диск = нуль
@@:            ;
   mov   ah,2          ; считать сектор!
   int   13h           ;
   jnc   @ok           ; ОК, если нет ошибки
   dec   bp        ; иначе: уменьшаем счётчик попыток
   jz    @error        ; три попытки - ERROR!
   xor   ah,ah         ; иначе: сброс контролёра флопа
   int   13h           ;
   jmp   @b        ; сл.попытка..
 
; считали ОС! передаём ей управление!
@ok:
   jmp   7E00h
 
; мессага обработчика ошибки и ребут
@error:
   mov   bp,error
   mov   dx,1523h
   mov   cx,7
   call  printStr
   xor   ax,ax
   int   16h
@reboot:
   int   19h
 
;=========== функция вывода сообщений ======================
printStr:
  mov   ax,1
  mov   bx,0Fh
  mov   ah,13h
  int   10h
ret
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
27.11.2018, 22:03
Цитата Сообщение от Kukushkha Посмотреть сообщение
У меня есть bin файл.
Этот бин, может работать в чистом CPU?
7C00h - помещается загрузчик, 0-400h - таблица прерываний. Ну ещё несколько областей служебных данных, в остальном адресном пространстве этот бин может работать?

Цитата Сообщение от Kukushkha Посмотреть сообщение
а с GRUB`oм разобраться никак не получается
Сам Груб-стартер, 512 байт(минус довесок). Дальше: код - загрузить туда, другой-сюда и потом по заведомо известным адресам передать управление, что там разбираться? Контролируете адрес загрузки и длину самого кода, всё как на листке бумаги, с карандашиком.
1
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
01.12.2018, 14:21  [ТС]
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Этот бин, может работать в чистом CPU?
Просто так нет. Нужно запускать метод main

Добавлено через 41 минуту
Цитата Сообщение от Constantin Cat Посмотреть сообщение
что там разбираться
делал по туториалу тут. Как-бы сказать... У меня отсутствуют описанные на хабре файлы(stage1, stage2, fat_stage1_5). И я вообще без понятия, где их взять... В папке grub есть файлы mod и т.п., но именно тех, о которых идет речь в статье нету.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
08.02.2019, 09:20
Лучший ответ Сообщение было отмечено Kukushkha как решение

Решение

В той статье, похоже, показан пример работы со "старым" GRUB (GRUB Legacy) .
С тех пор большинство дистрибутивов перешли на GNU GRUB 2.0
https://en.wikipedia.org/wiki/GNU_GRUB
1
4 / 4 / 2
Регистрация: 09.10.2010
Сообщений: 141
24.03.2019, 16:36
Добрый день! вот кусок загрузки mikeos он на nasm, я прокоментирю на русском как понимаю что происходит в коде и для чего и если я не прав поправьте пожалуйста, а я в любом случае буду не прав так как плохо разбираюсь в ассемблере но очень заинтересован понять что происходит на низком уровне
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        mov ax, 07C0h           ; тут стандартные действия как я понимаю отодвинуть указатель стека
    add ax, 544         ; на то место где нечего затерать,  как я понял могут лежать какието системные данные 
    cli             ; тут без коментов
    mov ss, ax                ; тут напрямую нельзя ложить в ss  потому и из ax копируем
    mov sp, 4096            ; далее от перемщенного указателя стека резервируем буфер
    sti             ; без коментов
 
    mov ax, 07C0h           ; обозначаем указатель данных от куда загружаемся
    mov ds, ax                        ;  также на прямую нельзя только и регистра
 
    mov [bootdev], dl       ; сохраняем девайс загрузки
    mov ah, 8           ;       получаем драйвер  девайса, особо не понял что проиходит 
    int 13h                      ;  но после прерывания идет поток байтов скажем так в отладчике шагов 50 и  вижу вот 
                                        ; типо такого 
                                        ; │0xd5b2  add    %al,(%bx,%si)   буду признателен если кто нибудь объяснит
    jc fatal_disk_errory    ; тут если все нормально то идем дальше, тоесть если флага ошибки нет
    and cx, 3Fh         ; максимальный номер сектора, тоже не понял но так понимаю узнать  максимум
    mov [SectorsPerTrack], cx   ;начальный сектор для чтения
    movzx dx, dh            ; Maximum head number тут не понятно
    add dx, 1           ; Head numbers start at 0 - add 1 for total тоже не понятно
    mov [Sides], dx
объясните пожалуста в кратце особенно важно что за поток байтов типа
%al,(%bx,%si)
заранее спасибо!
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,305
Записей в блоге: 12
28.03.2019, 13:51
Цитата Сообщение от serrggeee Посмотреть сообщение
%al,(%bx,%si)
Это AT&T-синтаксис. Означает [bx+si],al, т.е. в данном случае add [bx+si],al

Добавлено через 2 минуты
https://ru.wikipedia.org/wiki/AT%26T-синтаксис
1
4 / 4 / 2
Регистрация: 09.10.2010
Сообщений: 141
28.03.2019, 14:33
тоесть [bx+si],al таким образом я так понимаю в сегдмент памяти ну тоесть где обозначен сегмент данных кладется какято инфа, но такие строчки команд происходит послед прерывания, получается команда прерывания отдает чтото в ответ и данноай инфой можно както воспользоваться или нет так понял?
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
30.03.2019, 00:56
Цитата Сообщение от serrggeee Посмотреть сообщение
тоесть [bx+si],al таким образом я так понимаю
[bx+si],al это аргументы команды, а где сама команда ? Она mov что-ли ? Ну будем считать, что mov
Цитата Сообщение от serrggeee Посмотреть сообщение
кладется какято инфа
Почему какая-то ? Вполне конкретная - содержимое регистра AL
Цитата Сообщение от serrggeee Посмотреть сообщение
или нет так понял?
А книжку из серии "Ассемблер для начинающих" почитать не пробовал ?
1
4 / 4 / 2
Регистрация: 09.10.2010
Сообщений: 141
30.03.2019, 16:28
я понимаю что делает команда я не понимаю почему таких команд возникает после прерывания или такой функционал прерывания что он выполняет заполнение сегмента данных отмеченного в данном скрипте?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
06.05.2019, 12:07
Необязательно всё, что дизассемблировал отладчик, есть исполняемая процессором инструкция.
Вполне возможно, что Вы видете какие-нибудь данные, константы и т.п. А дизассемблер показывает это как страницу бессмысленных повторяющихся команд.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2019, 12:07
Помогаю со студенческими работами здесь

Загрузчик не видит файлов
Здравствуйте! Я решил написать свой загрузчик для своей ОС FAT16. При попытке поиска файла загрузчик его просто не видит((. Также...

Загрузчик ОС на смешанном коде
Нашёл в интернете небольшой загрузчик, а на каком ассемблере - не знаю :( Подскажите, пжл, на каком ассемблере компилировать и есть ли...

Загрузчик ОС для CD-ROM
Извиняюсь что влажу в тему, просто новую такую же создавать будет глупо. Но действительно, как сделать загрузчик ОС только на CD? А то я...

Нужно добавить время и дату в загрузчик
org 0x7C00 bits 16 mov ax, 0 mov ds, ax mov es, ax mov ss, ax mov sp, 0x7C00 mov si, welcome

Первичный загрузчик - Ошибка boot о невозможности чтения загрузочного диска
Доброго времени суток. Вобщем дело такое написал на fasm - е "загрузчик" ( copy/paste и немного изменил ), он ничего особенного не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru