2012-03-13 3 views
2

Пока у меня есть скрипт сборки, который позволяет вам загрузиться с него и написать мир приветствия на экране. теперь я хочу, чтобы иметь возможность написать некоторый c-код и иметь возможность как-то запустить мой скрипт сборки. Im использует mingw gcc для моего компилятора. Это мой Загрузчик в сборке:Запустить c-код из программы загрузчика

org 7C00h 
jmp short Start 
Msg: db "Hello, world" EndMsg: Start: mov bx, 000Fh 
mov cx, 1  
xor dx, dx 
mov ds, dx 
cld    Print: mov si, Msg 

      Char: mov ah, 2  
int 10h 
lodsb 


mov ah, 9 
int 10h 
inc dl  
cmp dl, 80  
jne Skip 
xor dl, dl 
inc dh 
cmp dh, 25  
jne Skip 
xor dh, dh 
Skip: cmp si, EndMsg 
jne Char   
jmp Print  times 0200h - 2 - ($ - $$) db 0  
dw 0AA55h 

Мой вопрос заключается в том, чтобы скомпилировать код на С, так что сборка скрипт будет выполнять его? также как бы отредактировать мой текущий загрузчик, чтобы это было возможно?

+1

Интересно, но вы не задали вопрос. Мы не можем ответить на вопрос, который вы не задали. – abelenky

+0

Возможно, вам захочется найти учебники по разработке операционной системы. Например, [Учебники по разработке Bona Fide OS] (http://www.osdever.net/tutorials/index) или учебники на [OSDev.org] (http://wiki.osdev.org/Expanded_Main_Page) –

+1

Возможный дубликат из [Выполнить программу C на уровне загрузчика через Assembler] (http://stackoverflow.com/questions/6169071/execute-c-program-at-bootloader-level-via-assembler) –

ответ

3

Во-первых, вы должны выбрать компилятор для использования и изучения его спецификаций. Программы C могут быть скомпилированы для «размещенной» среды, которая предполагает стандартную инициализацию, main() как точку входа и стандартную библиотеку, и «автономную» среду, в которой такие гарантии не предоставляются. Чтобы вызвать код C, вы должны выполнить соответствующую настройку среды (стек, сегменты данных и т. Д.) В загрузчике. Подробности для этого зависят от компилятора. Преобразование объектного кода в форму, подходящую для вашего загрузчика, также может быть проблемой. Для 16-битного кода есть, по крайней мере, Turbo C и Watcom C, доступные для бесплатного использования. Watcom является более прогрессивным и современным и теперь является открытым исходным кодом. Обратите внимание, что стандартная библиотека недоступна в такой настройке, поэтому код C должен быть специально написан для вашей среды; это включает такие подводные камни, как, например, умножение 32-битных длин обычно было реализовано в библиотеке, несмотря на то, что вы не пишете вызов библиотеки.

[В целом, я смущен вашей просьбой использовать точно C; как только загрузчик вряд ли нуждается в скорости выполнения, более правильно использовать что-то более применимое для такого контекста, как Forth. Есть готовые к использованию реализации (см FreeBSD загрузчик)]

1

Вам необходимо скомпилировать код C для 16 бит. Затем скопируйте его в заданное положение в загрузочном устройстве. Вам нужно будет изменить загрузчик, чтобы загрузить код в память и перейти к нему. Также обратите внимание, что gcc в настоящее время не может скомпилировать до 16 бит. Я слышал, компилятор Watcom может, поэтому он должен быть полезен.

0

Обычно вам нужно сделать следующие вещи:.

  1. Вы бы лучше подготовить кросс-компилятор, это было бы избежать многих неприятностей .
  2. Ваш загрузчик должен иметь возможность найти каталог/файл на дискете или CD. Например, если вы загружаете загрузчик на CD, вам необходимо найти способ разобрать содержимое компакт-диска. Вы можете обратиться к стандарту «El Torito» для компакт-дисков.
  3. Ваш загрузчик должен подготовить среды для вашей программы c. Например, программа C ожидает, что режим защиты с 32 бит, ваш загрузчик должен подготовить его.
  4. Ваш загрузчик должен загрузить программу C в память и перейти на .
  5. В большинстве случаев вам нужно написать еще один загрузчик. Загрузочный загрузчик # 1 должен загружать загрузчик # 2, а загрузчик загрузчика # 2 загружается вашей программой на C. Ваш второй загрузчик может быть написан на сборке, что будет намного проще проверить вашу работу.
  6. Ваша программа C должна выполняться как автономный режим.

Вам нужны Google много много раз для всех деталей ...

+0

Вам не запрещено использовать 16- бит _C_, если вы специально используете компилятор, который может настраивать 16-битные исполняемые файлы/исполняемые файлы, такие как MSVC 1.52c; OpenWatcom; или что-то вроде компилятора Bruce's Ccc (bcc), доступного на большинстве дистрибутивов Linux. –

Смежные вопросы