как загрузить этот код? - PullRequest
0 голосов
/ 02 ноября 2011

Я новичок в сборке и программировании на C (используйте GCC в Linux)

Может кто-нибудь здесь сказать мне, как скомпилировать код C в сборку и загрузиться с него с помощью флешки

Я использую команду (в терминале Linux):

 gcc -S bootcode.c

код дает мне загрузочный код. S файл

что мне делать с этим ???

Я просто хочу скомпилировать следующий код и запустить его прямо с USB-накопителя

#include<stdio.h>
void main()
{
  printf ("hi");
}

любая помощь здесь ???

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Прежде всего

Вы должны знать, что когда вы пишете коды загрузчика, вы должны знать, что вы СОЗДАЕТЕ СВОЮ СОБСТВЕННУЮ СРЕДУ КОДА, что означает, что нет такой готовой библиотеки C, доступной вам или чего-либо подобного, ТОЛЬКО и ТОЛЬКО BIOS УСЛУГИ (или ПРЕРЫВАНИЯ МАРШРУТОВ).

Теперь, если вы получили это, вы, вероятно, поймете, что приведенный выше код не загружается, поскольку у вас нет заголовка "stdio.h", это означает, что ЦП при выполнении вашего скомпилированного кода выиграл ' не может найти этот заголовок и, следовательно, не поймет, что такое «printf» (поскольку printf является методом заголовка stdio.h). Поэтому, если вы хотите напечатать любую строку, вам нужно написать эту функцию ВАШЕЙ СОБСТВЕННОСТЬЮ либо в отдельном файле в качестве заголовка, и связать его объектный файл во время компиляции при создании конечного двоичного файла или в том же файле. это зависит от вас. Могут быть и другие способы, я не очень хорошо с ними знаком, просто проведу некоторые исследования.

Еще одна вещь, которую вы должны знать, это BIOS, который отвечает за загрузку этого загрузочного кода (ваш код выше в вашем случае) в ячейку памяти 0x07C00 (0x0000h: 0x7C00 в сегменте: представление смещения), так что вы должны упомянуть в ваш код, который вы пишете этот код в этой области памяти, либо

1 - с использованием инструкции ORG

2-Или, загрузив соответствующие регистры для этого (cs, ds, es)

Кроме того, вы должны ознакомиться с сегментом: схема представления смещенной памяти, просто зайдите в Google или прочитайте руководства Intel.

Наконец, чтобы BIOS загружал ваш код в 0x07C00, загрузочный код не должен превышать 512 байт (ТОЛЬКО НА ПЕРВОМ СЕКТОРЕ ЗАГРУЗКИ НОСИТЕЛЕЙ, поскольку сектор составляет 512 байт), и он должен найти последние два байта этого первый сектор (байт 510 и байт 511) вашего кода - подпись загрузки 0x55AA, в противном случае BIOS не сочтет этот код загрузочным. Обычно это кодируется как:

ORG 0x7C00

...

Ваш загрузочный код и для загрузки большего количества кодов, так как 512 байт будет недостаточно.

...

умножить на 510 - ($ - $$) 0x00; Zerofill до 510 байт

               dw 0xAA55 ;Boot Sector signature,written in reverse order since it

                             will be stored as little endian notation

Просто чтобы вы знали, я здесь не все освещаю, потому что если это так, я буду писать страницы об этом, вам нужно искать больше ресурсов в сети, и вот ссылка для начала ( кодировка в сборке):

http://www.brokenthorn.com/Resources/OSDevIndex.html

Вот и все, надеюсь, это было полезно для вас ... ^ _ ^

Хило - Алжир

2 голосов
/ 04 ноября 2011

Загрузка компьютера не так проста. Загрузчик должен быть написан. Загрузчик должен соблюдать определенные правила и соответствовать аппаратному обеспечению, например ПЗУ. Вам также нужно отключить прерывания, зарезервировать часть памяти и т. Д. Посмотрите MikeOS, это отличный проект, который может помочь вам лучше понять процесс. Приветствия

...