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

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

На моем канале Old Programmer уже более 90 статей и роликов. Чтобы разобраться в них обращаемся сюда, где все материалы разбиты на темы и обновление происходит сразу после появления нового материала: Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). А здесь все об ассемблере. Продолжу рассматривать вопрос взаимодействия ассемблера и C. Данная статья является прямым продолжением предыдущей. Так что если вы не знакомы с ней, прочтите в начале ее. В данной же статье я привожу пример того, что доступ к модулю на языке ассемблера можно получить не только через вызов функции, но и на прямую обратившись к области памяти, которую мы зарезервировали в ассемблерном модуле. Модули на языке ассемблера и C. Взаимодействие через глобальные переменные Обратимся к программе main70.c. Обратите внимание, что мы определили в ней не только внешнюю функцию, но и внешнюю переменную. Эта внешняя переменная зарезервирована в модуле asm13.s. При вычислении суммы мы не только возв

На моем канале Old Programmer уже более 90 статей и роликов. Чтобы разобраться в них обращаемся сюда, где все материалы разбиты на темы и обновление происходит сразу после появления нового материала: Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). А здесь все об ассемблере.

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

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

Обратимся к программе main70.c. Обратите внимание, что мы определили в ней не только внешнюю функцию, но и внешнюю переменную. Эта внешняя переменная зарезервирована в модуле asm13.s. При вычислении суммы мы не только возвращаем результат через rax, но и помещаем его в num. В программе же на C печатаются данные, возвращенные и функцией и через переменную (глобальную) num (extern).

Полная трансляция осуществляется последовательностью команд:
as --64 asm13.s -o asm13.o
gcc -c main70.c
gcc -no-pie main70.o asm13.o -o asm13

Обратим внимание, что программа на языке C теперь нами написано с использованием только 64-битовых чисел.

Пока, на сегодня это все об ассемблере. Подписываемся на мой канал Old Programmer.

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