Используем C в Ассембли

Серия Программирование

Разрабатывая стандартную библиотеку для своего языка, столкнулся с проблемой: как связывать код написанный на C с ассембли. Первый подход – компиляция C в ассембли и ручное копирование кода – оказался не самым удобным. Две проблемы этого способа это несовместимость синтаксиса GCC и Nasm и постоянное дублирование кода при малейших изменениях.

Решение

Теперь расскажу о способе, который является оптимальным – линковке объектных файлов.

Пример

Приведу пример из моего языка программирования – функция для печати целых чисел.

debug.c

Важно, что функция объявлена с модификатором extern, то есть доступна глобально.


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

debug.c

debug.h

Теперь, создаём объектный файл.

gcc -nostdlib -no-pie -fno-stack-protector -c debug.c -o debug.o

Флаги -no-pie и -fno-stack-protector нужны для совместимости с ассембли.

main.asm

Компилируем и компонуем с объектным файлом стандартной библиотеки

nasm -f elf64 main.asm -o main.o

gcc -nostdlib -no-pie main.o debug.o -o main

Получаем одиночный бинарный файл, в котором включены и стандартная библиотека и главный файл.

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


P.S: Тело функции

Лига программистов

2.2K постов12K подписчик

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

0
Автор поста оценил этот комментарий
Если не секрет, в каких сферах применяется это?
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

В разработке компиляторов, правда сам ассемблер мало где именно пишется, но используется

Автор поста оценил этот комментарий

И в чём же сакральный смысл использования NASM в разработке своей стандартной библиотеки, если вы только что продемонстрировали, что свои библиотечные функции вы пишете как раз на C??? И зачем писать вызывающий код на ассемблере?? Всё с ног на голову.


Флаги -no-pie и -fno-stack-protector нужны для совместимости с ассембли.

Что это вообще *#!~$ значит.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

В том, что мой язык компилируется в x86 ассемблер и потом линкуется с C библиотекой. Так бы можно было писать ее на ассемблере, но я не думаю, что это удобно

2
Автор поста оценил этот комментарий

Ассембли? Ты бля где такое слово нашел вообще? В русском языке ассемблер, в английском assembly это вообще глагол.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Транслитерация английского варианта

показать ответы
0
Автор поста оценил этот комментарий
А надо? Перечитай, написанное: слишком кривой перевод (ну или ты не русский, или тотально безграмотен).
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Даже свой пойнт не можешь подтвердить, просто грязь льёшь в комментах из-за того что в жизни не можешь, так как из дома не выходишь)

0
Автор поста оценил этот комментарий
Ты даже чужую статью перевести не можешь нормально, но телегу свою прорекламировать не забываешь.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Покажи оригинал

показать ответы
1
Автор поста оценил этот комментарий
Кто-то это ещё делает? Пишет на ассемблере???
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества