Найти в Дзене
Old Programmer

Программирование на ассемблере. Статья 9 (ассемблер и C)

Все ссылки на статьи и ролики моего канала Old Programmer, распределенные по темам найдете здесь:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer) Интеграция ассемблера и языка C в ОС Linux Подходим к очень интересному вопросу об интеграции языка ассемблера с языком C. Идея здесь очень проста. На втором этапе трансляции вместо компоновщика ld нужно использовать компилятор gcc. Он автоматически пытается интегрировать объектный модуль со стандартной библиотекой C. И если вы в команде call используете имя, которое есть в этой библиотеке, то gcc попытается связать ваш вызов с библиотечной функцией. Важно передавать параметры согласно соглашению о вызовах Linux 64 (см. здесь). Пример вызова библиотечной функции C и программы на языке ассемблера Пример программы на ассемблере дан в asm10.s. Мы вызываем стандартную функцию C puts, которая имеет один параметр - адрес, выводимой на стандартное устройство, строки. Адрес на начало строки я передаю через регистр rdi.
Оглавление

Все ссылки на статьи и ролики моего канала Old Programmer, распределенные по темам найдете здесь:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer)

Интеграция ассемблера и языка C в ОС Linux

Подходим к очень интересному вопросу об интеграции языка ассемблера с языком C. Идея здесь очень проста. На втором этапе трансляции вместо компоновщика ld нужно использовать компилятор gcc. Он автоматически пытается интегрировать объектный модуль со стандартной библиотекой C. И если вы в команде call используете имя, которое есть в этой библиотеке, то gcc попытается связать ваш вызов с библиотечной функцией. Важно передавать параметры согласно соглашению о вызовах Linux 64 (см. здесь).

Пример вызова библиотечной функции C и программы на языке ассемблера

Пример программы на ассемблере дан в asm10.s. Мы вызываем стандартную функцию C puts, которая имеет один параметр - адрес, выводимой на стандартное устройство, строки. Адрес на начало строки я передаю через регистр rdi.

Для правильной трансляции программы следует выполнить следующие строки:

as --64 asm10.s -o asm10.o
gcc -no-pie asm10.o -o asm10

В результате получаем исполняемый модуль, который выводит строку.

Почему для ассемблера весьма актуально использовать библиотеки C и других языков? Да потому что программирование на ассемблере дело трудоемкое, а здесь мы значительно сокращаем время разработки.

Пока, сколько программ на ассемблере вы уже написали? Подписывайтесь на мой канал Old Programmer.

Программа asm10.s
Программа asm10.s