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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2011, 19:11   #21
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> gcc компилим

ну gcc это особый случай )
по-любому ничего сложнее for юзать будет низя
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 27.01.2011, 19:56   #22
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Я глянул ту ссылку. Но мне кажется для начала слишком громоздко и сложно. Хотелось бы для начала просто загрузить написанный на Си код.

Код:
#include <stdio.h>

int main()
{
printf("Hello World!\n");
return 0;
}
я компилирую с помощью gcc полностью через консоль: gcc main.c -o test.exe

Так вот хотелось бы узнать, что именно, какие ключи или флаги нужно прописывать при компиляции, что бы получить чистый машинный код, который поймет компьютер. Далее записать этот код на загрузочный сектор дискеты, и загрузить?
Артэс вне форума Ответить с цитированием
Старый 27.01.2011, 20:08   #23
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

странное у вас представление о компиляторах С, словно это компилятор С#, который генерит CIL.

вобще, надо беспокоиться не о том, чтобы процессор понял результаты работы компилятора (а куда он денется), а о том, чтобы код, сформированный компилятором, имел хоть какой-то смысл в вашем любимом бутсекторе. Под смыслом я понимаю настройку адресов, для начала.

думаю, вы догадываетесь, что ехе файл предназначен не совсем для запуска из бутсектора, и помимо машинного кода содержит служебную информацию для ОС (ДОС, виндос, не важно), о том, как этот все попытаться запустить.

ситуация с сом файлами попроще, но тоже имеет свои особенности
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 27.01.2011, 20:18   #24
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Да, я понимаю что .ехе файл имеет дополнительную информацию, потому и спросил, как получить чистый код. Т.е все же целесообразней будет сделать загрузчик, который подготовит компьютер к работе уже с самой программой?

Мне все же интересно, именно на самом Си, существует ли пример, в котором только необходимый минимум указан?
Артэс вне форума Ответить с цитированием
Старый 27.01.2011, 21:20   #25
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
по-любому ничего сложнее for юзать будет низя
это ваше мнение, причем видно что опыта в этой сфере у вас нет.
по ссылке есть исходники, и там отнюдь не фором ограничевается.
Цитата:
Так вот хотелось бы узнать, что именно, какие ключи или флаги нужно прописывать при компиляции, что бы получить чистый машинный код, который поймет компьютер. Далее записать этот код на загрузочный сектор дискеты, и загрузить?
ключи, никакие.
надо забыть про libc(готовую) и если вам нужна printf то написать её самостоятельно(или посмотреть сорцы по ссылке)
Цитата:
Мне все же интересно, именно на самом Си, существует ли пример, в котором только необходимый минимум указан?
по ссылке не ходили чую.
там есть готовый загрузчик, и так же примеры кодов для вывода текста и тп.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.01.2011, 01:27   #26
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

я смотрел ссылку. Просто я думал, загрузчик тоже на чистом Си можно написать.

Как в той теме написано, я скомпилировал бинарный файл на Си, только интересно, почему он 4.01 кб весит, когда функция всего пару строк имеет. Получается это не чисто машинный код?

И каким образом на Си вывести на экран хотя бы 1 символ, если не юзая библиотек, даже putchar(); нет?
Артэс вне форума Ответить с цитированием
Старый 28.01.2011, 03:44   #27
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
И каким образом на Си вывести на экран хотя бы 1 символ, если не юзая библиотек, даже putchar(); нет?
а надо разбиратся в том как оно все работает.
ну хотя в том что такое текстовый буфер.
Цитата:
Как в той теме написано, я скомпилировал бинарный файл на Си, только интересно, почему он 4.01 кб весит, когда функция всего пару строк имеет. Получается это не чисто машинный код?
надо еще релоки резать и тп чтоб меньше было.
там немного лишнего получается всетаки, но работает
вы скомпилили obj(gcc) или уже bin(ld и objcopy)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.01.2011, 06:25   #28
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
по ссылке есть исходники, и там отнюдь не фором ограничевается.
и тут же ниже:

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
надо забыть про libc(готовую) и если вам нужна printf то написать её самостоятельно(или посмотреть сорцы по ссылке)
ЧТД )

я не спорю, опыт в создании загрузчиков у меня может не такой и большой, но что генерит компилятор С на вызов printf я примерно догадываюсь.

Цитата:
а надо разбиратся в том как оно все работает.
а вот кстати, действительно, как заставить С заюзать 10-e прерывание, без асмовых вставок? (все, ушeл читать ссылку... )

вернулся ) ясно, 10-е прерывание заменяется на:

Код:
    vgaadr = (unsigned short *)0xb8000;
    memcpy(vgaadr, .....);
ну тоже вариант, конечно.

Кстати, так и не увидел по ссылке что-либо сложнее for )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 28.01.2011 в 06:41.
veniside вне форума Ответить с цитированием
Старый 28.01.2011, 10:38   #29
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Кстати, так и не увидел по ссылке что-либо сложнее for )
работа с IDT/FDD для вас на уровне фора?
вообще оно понятно, что все сводится к банальным командам, но тем не менее нельзя это скидывать к фору, ибо там все сложнее.
Цитата:
а вот кстати, действительно, как заставить С заюзать 10-e прерывание, без асмовых вставок?
немного внимательности, в той теме код на Си работает в защищенном режиме процессора.
потому прерываний там нет.(всмысле тех же что в реальном режиме)
Цитата:
ну тоже вариант, конечно.
по сути прерывание тоже самое и делает.
Цитата:
вернулся ) ясно, 10-е прерывание заменяется на:
я не помню, Вован, вроде в текстовом режиме так и оставался, поэтому насчет кода работы с VGA я не знаю
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.01.2011, 11:42   #30
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> работа с IDT/FDD для вас на уровне фора?

нет, конечно. Просто изначальный поитн был в том, что нельзя будет пользовать привычные сишниые библиотеки. А так, руками можно наворотить много чего, вопросов нет. Пишешь свой менеджер памяти, и вот уже malloc() заработал )

> в защищенном режиме процессора

да, чё-то я не подумал, что биос тут не поможет. Но, думаю, автор топика в защищённый режим ещё не скоро доберётся ) Так что putc() он сможет реализовать одним вызовом int 10, но вот как сказать об этом компилятору С, без вставки на асме, я не знаю (об этом и был мой вопрос, кстати ).

> работы с VGA

да та же фигня, только вместо 0xB8000 юзаем 0xA0000, ну и фонты свои нарисовать. Только перейти в графику желательно _до_ перехода в защищенный режим.


Автору топика может быть интересно заглянуть в исходники граба, на асме там совсем маленький кусочек, который стартует в CS:IP 0:0x7c00, его сложно на С компильнуть. Остальное чистейший С, без всяких библиотек (т.е. ничего сложнее for там нет, ггг).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Звук Звууууук Звук ... не рабоает звук.. Zvuuuuk Компьютерное железо 2 22.01.2011 17:53
Тюнер для гитары в делфи. (Считывать с микрофона звук и выводить какой частоты этот звук). Серего Мультимедиа в Delphi 8 12.01.2011 14:39
Звук 5.1 Air Свободное общение 4 20.05.2010 11:29
Звук xakkkkker Мультимедиа в Delphi 4 05.05.2008 08:13
звук и делфи, левый правый звук snusmumric Win Api 2 29.10.2007 11:10