1 Востаннє редагувалося 2andnot (29.06.2017 16:56:03)

Тема: можливості Сі

в мене є такий ряд питань,не запитуйте нащо і чому, це не виліковне :D
1) якщо допустити що программа на Сі запущена в режимі реального часу, то чи можу я викликати преривання біосу просто записав у відповідні адресса потрібну інформацію? наскільки правильно я зрозумів всі ці преривання знаходяться у певному відділу пам’яті.
2) чи є реалізація Сі яка дозволяє звертатись до регістрів процессору,напряму ссилатись на адрессу оперативної пам’яті та створювати com программи для різних режимів 16, 32, 64бита? можливо безглузде запитання, але якщо взяти микропроцессори то там можна

всі ці запитання в мене виникли коли мені доказували що зараз на Сі можно написати повністью ОС, за виключеням завантажувача. Тепер мені не дає спокою думка, як написати щось на Сі щоб запустилось без операційної системи. Можливо навіть в майбутньому свою операційну систему зробить, нехай вона буде дуже примітивна, але все одно приємно буде. Чи може Сі в цих задачах замінити Ассемблер? колись хотів вивчити і його, але мене відлякувало що може зміниться архітектура і все що я знаю вже  буде не потрібне, та й стільки в нього діалектів що не знаешь на якому краще писать.

2 Востаннє редагувалося 0x9111A (30.06.2017 10:32:08)

Re: можливості Сі

http://wiki.osdev.org/Bare_Bones#Writing_a_kernel_in_C

https://github.com/cfenollosa/os-tutorial

Подякували: 0xDADA11C7, leofun012

3

Re: можливості Сі

2andnot написав:

1) якщо допустити що программа на Сі запущена в режимі реального часу, то чи можу я викликати преривання біосу просто записав у відповідні адресса потрібну інформацію? наскільки правильно я зрозумів всі ці преривання знаходяться у певному відділу пам’яті.

Ліл, в режимі реального часу. Реальний режим роботи процесора не дорівнює операційній системі реального часу, у вас в голові мішанка. Преривання викликаються системою або застосунком за допомогою машинної команди int. Напиклад, 0x21 переривання відповідало за хвункції MS DOS, а 0х10 переривання відповідає за ВідеоБіос.

2andnot написав:

2) чи є реалізація Сі яка дозволяє звертатись до регістрів процессору,напряму ссилатись на адрессу оперативної пам’яті та створювати com программи для різних режимів 16, 32, 64бита? можливо безглузде запитання, але якщо взяти микропроцессори то там можна

Зазвичай в Сі є вбудований асемблер, тому прости вчіть цю мову й архітектуру комп'ютера.

всі ці запитання в мене виникли коли мені доказували що зараз на Сі можно написати повністью ОС, за виключеням завантажувача.

На голе залізо не напишеш "чисто" мовою с. Є така річ як HAL (Hardware Access Layer), це частина операційки, яка пишеться здебільшого мовою асемблера та ,відповідно до назви, слугує прошарком для роботи з залізом.

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

Не хочете вчити асмеблер - засуньте в сраку мрію про свій професійний рост в галузі системного програмування, та й роботи з залізяками.

Подякували: LoganRoss, leofun01, koala3

4

Re: можливості Сі

До речі, оцей код виконається правильно на 98% комп'ютерів, але це скоріше брудний хак який нікому не потрібний, а не промисловий підхід до справи. Тобто кодер дума, що йому вже не потрібно встановлювати відеорежим, бо біос вже про все подбав, що є в корні невірно. Через відмову від асма "оце"(ядром то складно назвати, навіть зачатками) навіть рядок з клавіатури зчитати не може!

0x9111A
Я випадково відредагував ваше повідомлення, будь ласка, відновіть друге посилання.

5

Re: можливості Сі

0xDADA11C7 написав:

До речі, оцей код виконається правильно на 98% комп'ютерів, але це скоріше брудний хак який нікому не потрібний, а не промисловий підхід до справи. Тобто кодер дума, що йому вже не потрібно встановлювати відеорежим, бо біос вже про все подбав, що є в корні невірно. Через відмову від асма "оце"(ядром то складно назвати, навіть зачатками) навіть рядок з клавіатури зчитати не може!

0x9111A
Я випадково відредагував ваше повідомлення, будь ласка, відновіть друге посилання.

Бачив дописаний варiант який може кнопки читати.
Ну там був виклик 1 команди через мiтку asm (власне так воно i читати може).

6

Re: можливості Сі

сішний код, у якому є асемблерні вставки, компілюється сішним компілятором разом з ними чи тільки чисто сішною частиною? Чи можуть сішні копілятори компілювати чисто асемблерний код? Чи можуть асемблерні компілятори, наприклад насм, компілювати сішний код?

7

Re: можливості Сі

сішний код, у якому є асемблерні вставки, компілюється сішним компілятором разом з ними чи тільки чисто сішною частиною?

Спочатку все перетворюється на асемблер, а потім вже компілюється асемблерний код.

Чи можуть сішні копілятори компілювати чисто асемблерний код?

Тут варто уточнити що ви маєте на увазі під "чисто асемблерний код".

Чи можуть асемблерні компілятори, наприклад насм, компілювати сішний код?

Ні

Подякували: leofun011

8

Re: можливості Сі

0xDADA11C7 написав:

сішний код, у якому є асемблерні вставки, компілюється сішним компілятором разом з ними чи тільки чисто сішною частиною?

Спочатку все перетворюється на асемблер, а потім вже компілюється асемблерний код.

Чи можуть сішні копілятори компілювати чисто асемблерний код?

Тут варто уточнити що ви маєте на увазі під "чисто асемблерний код".

Тобто, сішні компілятори можуть компілювати асемблерний код, а асемблерні сішний- ні?

9

Re: можливості Сі

Саме так.

Подякували: htoznasho1

10

Re: можливості Сі

не саме так, а навіщо

11

Re: можливості Сі

а якщо на асм компіляторі створити а\обєктний файл, а потім уже лінкувати його GCC  ?

12 Востаннє редагувалося ch0r_t (14.05.2021 21:36:37)

Re: можливості Сі

reverse2500 написав:

а якщо на асм компіляторі створити а\обєктний файл, а потім уже лінкувати його GCC  ?

Але що тоді буде з inline, та оптимізацією, як все вкладеться як слід? Знаю з цим, принаймні на півмісяці з хрестами проблеми. Експерементував зі включенням асм. коду для швидкості але вдалось уникнути, поглиблення своїх поверхневих знань асм за допомогою бібліотеки на ній для C++. Та так ніколи не робив.

13

Re: можливості Сі

reverse2500 написав:

а якщо на асм компіляторі створити а\обєктний файл, а потім уже лінкувати його GCC  ?

GCC вміє генерувати об'єктні файли з асемблерного коду через ключик -c. Очевидно, що потім його можна злінкувати з іншим об'єктним файлом, навіть якщо спочатку він був написаний на С.

Подякували: leofun011

14

Re: можливості Сі

reverse2500 написав:

а якщо на асм компіляторі створити а\обєктний файл, а потім уже лінкувати його GCC  ?

Лінкеру все одно, що лінкувати, але асмові функції мають праивильно розбирати передані аргументи, а С-шний код має правильно їх передати.
Особливо якщо в C є всі оті cdecl/fastcall/...
Треба дивитися ABI конкретного компілятора в конкретному режимі коли писати асм-код і правильно описати в h-файлі асмові функції.
На C++ відповідно асмові функції треба обізвати extern "C".
Звісно, вони не будуть inline. З оптимізацією С/С++ коду буде як було, просто асмові функції зовнішні.

Якщо асемблер inline, то поведінка оптимізатора залежить від компілятора і оформлення асм-вставки.
Зокрема, gcc може й викинути asm-вставку зовсім, якщо вирішить, що це не впливає на результат, а сама вставка не позначена volatile.

Подякували: ch0r_t, leofun012

15

Re: можливості Сі

htoznasho написав:

Чи можуть сішні копілятори компілювати чисто асемблерний код? Чи можуть асемблерні компілятори, наприклад насм, компілювати сішний код?

Для початку - "асемблерний компілятор" формально зветься асемблером, а мова програмування - мовою асемблера. Ну то таке.
По суті - можуть, якщо це код-поліглот(англ). Звичайний код - не можуть.

16 Востаннє редагувалося ReAl (15.05.2021 08:54:20)

Re: можливості Сі

Деяка плутанина виникла тому, що програма-контроллер cc
(яка колись окрім  препроцесора  запускала по черзі окремі програми залежно від ключів оптимізації -- декілька проходів компілятора з проміжними файлами на диску, конвертор в асемблер, асемблер та лінкер),
відповідно до ключів чи могла запускати лише асемблер (і за потреби лінкер). Через що і виникає враження, що С-компілятор компілює асемблерний текст, хоча, як вже сказано, зазвичай він приховано від користувача створює проміжний асемблерний файл, який згодовує асемблеру, тобто він навіть С-шний код до об'єктного не доводить (навіть, а мо й не «навіть», а «й поготів» у випадку LTO, коли вниз передається взагалі проміжне представлення, не доведене до асемблера).

Зараз пам'яті побільшало, ті проходи cc1, cc2, cc3 об'єднані в один виконуваний файл. Але загальна структура збереглася і cc/gcc вміє по ключах просто віддати асемблерний файл програмі асемблера, як і для випадку С-шного тексту доповнивши за потреби додатковими ключами.

Подякували: koala, leofun012