2012-04-23 4 views
38

Я видел файлы .S в различных проектах, таких как ядро ​​Linux, ядро ​​FreeBSD или в некоторых других проектах. Что делают эти файлы и почему у нас нет файлов .C?Что такое файлы .S?

ответ

41

.S файлы кода исходные файлы, написанные на ассемблере. Сборка - чрезвычайно низкоуровневая форма программирования. Файлы содержат инструкции по сборке для процессора в последовательном порядке и обычно скомпилированы на основе выбранной архитектуры. Примеры таких файлов часто видны в ядре linux для конкретных архитектур, например. x86, SPARC, ARM и т.д.

Для получения дополнительной информации о языке ассемблера:

5

Они assembler code файлов:

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

и поэтому эти файлы не совпадают с файлами кода C.

Отметьте, что C files can be inlined with assembly instructions.

4

Расширение .S указывает на assembly language file.

Почему мы не имеем файлы .C?

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

2

.S файлы - это код, написанный на языке ассемблера, т.е. низкий уровень o f программирование. В исходном коде ядра linux .S обычно являются стартовыми файлами, которые ядро ​​запускает при запуске ядра linux (например .:- head.S). Мы пишем это в .S, а не в .C, потому что мы не готовы запускать .C скомпилированный файл .O в это время. Нам нужно работать с регистрами, зависящими от архитектуры, и запускать ядро.

9

* .S файлы являются сборными файлами. Почему .s & Почему бы и нет .c файлы? Это связано с тем, что аппаратно-зависимый файл/ранняя инициализация, например настройка кеша &, может выполняться только командой уровня сборки, например инструкциями ввода-вывода. Ядро не имеет роскоши библиотеки libc, чтобы заботиться о первоначальной настройке различных ресурсов. И аппаратные ресурсы в любой момент, даже во время выполнения приложений, накладывают системные вызовы, которые вызывают процедуры ввода/вывода, закодированные на языке ассемблера.

+0

Проверьте эту ссылку ... Его последовательность ARM BOOT ... – user1457958

+0

http://www.linux-arm.org/LinuxBootLoader/MONItor! – user1457958

4

.S файлы являются файлами языка ассемблера.Это форма машинного кода. Он находится на низком уровне программирования. Весь машинный код написан на языке ассемблера. Язык ассемблера отличается для разных процессоров.

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