Заметки по программированию
Sep. 23rd, 2022 01:13 pmВот, вроде много лет занимаюсь программированием. Драйвера всякие ваяю, для контроллеров пишу. Симуятор железа пилил, даже в одной голубой компании работал некоторое время назад, название которой начиналось на "In", а заканчивалось на "tel".
Но столкнулся с тем, что совершенно не понимаю как компилируется программа и как написать программу на си под голый металл. На ассемблере, без проблем. Ассемблер вообще очень простой и понятный язык. Но вот как ту же программу, под голое железо на си написать, всё...
Я молчу, про совершенно упоротый синтаксис AT&T, который разработали бутиратовые наркоманы, но со временем привыкаешь.
Понял, что есть прям глухой пробел по знаниям, как идёт компиляция, и линковка. Линковщик, вообще штука совершенно непонятная. Как писать эти скрипты линковки, открываю документацию написана так, что хоть стой, хоть падай.
Вот допустим, как написать программу, так чтобы её стартануть на голом железе, взять какой-нить процессор, и стартануть на нём твой хелло ворд, да не на ассемблере, а вот на си.
На ассемблере написал, всё булочка. Пытаюсь всё сделать на си, нифига не работает. Как дизассемблировать непонятно. Я ещё архитектуру взял "неудачную", х86. Ну пускай, хочу в реальном режиме сделать, 640 кБ хватит всем. Хочу собрать программу с помощью gcc.
Непонятно с какой стороны подходить к самообразованию в этой области, но удивительно, у меня реально нет знаний абсолютно вот тут.
Негодую.
Но столкнулся с тем, что совершенно не понимаю как компилируется программа и как написать программу на си под голый металл. На ассемблере, без проблем. Ассемблер вообще очень простой и понятный язык. Но вот как ту же программу, под голое железо на си написать, всё...
Я молчу, про совершенно упоротый синтаксис AT&T, который разработали бутиратовые наркоманы, но со временем привыкаешь.
Понял, что есть прям глухой пробел по знаниям, как идёт компиляция, и линковка. Линковщик, вообще штука совершенно непонятная. Как писать эти скрипты линковки, открываю документацию написана так, что хоть стой, хоть падай.
Вот допустим, как написать программу, так чтобы её стартануть на голом железе, взять какой-нить процессор, и стартануть на нём твой хелло ворд, да не на ассемблере, а вот на си.
На ассемблере написал, всё булочка. Пытаюсь всё сделать на си, нифига не работает. Как дизассемблировать непонятно. Я ещё архитектуру взял "неудачную", х86. Ну пускай, хочу в реальном режиме сделать, 640 кБ хватит всем. Хочу собрать программу с помощью gcc.
Непонятно с какой стороны подходить к самообразованию в этой области, но удивительно, у меня реально нет знаний абсолютно вот тут.
Негодую.
no subject
Date: 2022-09-23 02:37 pm (UTC)Возьми простой линкерный скрипт. Ничего там сложного нет совершенно. Ман относительно короткий. Это кидаем сюда, это туда — никакой магии. Ассемблерный выхлоп рядом валяется со сборочниками.
no subject
Date: 2022-09-23 03:07 pm (UTC)no subject
Date: 2022-09-23 03:35 pm (UTC)И по нему есть пачка tutorial-ов, по программированию этого всего (гуглится по имени netwide assembler).
(https://cs.lmu.edu/~ray/notes/nasmtutorial/ просто как первый нагуглившийся пример)
no subject
Date: 2022-09-23 07:58 pm (UTC)С nasm всё легкои просто, и работает из коробки. Не спортивно. А вот gcc, линкер at&t синтаксис, вот где жесть
no subject
Date: 2022-09-23 04:17 pm (UTC)Притом, что привык (когда-то трудилсо на шарагу с началом на микро, а с окончанием на софт).
При всей для меня неродности никсов, там понятного больше. Но форточки роднее, сцуко.
Правда, я был бетатетсером в 90-х, Чикага и 98-я, но то такое.
no subject
Date: 2022-11-07 05:13 pm (UTC)Стал смотреть — сначала проверка версии ОС, потом проверка доступной памяти, потом 10е прерывание зачем то в вешалке меняет. Короче плюнул, до непосредственно своего кода так и не досмотрел.