
- •Сергеев Сергей Набор данных прямого доступа (da - Direct access data sets)
- •Суворова Василиса
- •Ярков Павел
- •3. Описание блока управления данными ( для bsam(Basic sequential access method))
- •Наборы данных – pds и pdse
- •5.9.3 Что такое pdse?
- •Наборы данных vsam
- •Совмещение c и ассемблера Беляев Максим
- •Встроенные функции
- •СовмещениеC и модулей на ассемблере
- •Встроенный ассемблер
- •Вызов программ ассемблера из c
- •Создание скелетного кода
- •Соглашение о вызовах
- •Выборсоглашенияо вызовах
- •Функциональные объявления
- •Сохранение рабочих регистров
- •Вызов функции
- •Выход из функции
- •Ограничение для специальных типов функций
Совмещение c и ассемблера Беляев Максим
AVRIARC / C ++ Компилятор обеспечивает несколько способов совмещения C или C++ и ассемблера:
Модули, написанныеполностьюнаассемблере
Встроенныефункции (альтернатива C)
Встроенныйассемблер.
Наиболее привлекательно использовать простой встроенный ассемблер. Однако,нужно тщательно выбирать который метод использовать.
Встроенные функции
Компилятор обеспечивает малое число предопределенных функций, позволяющих прямой доступ к низкоуровневым процессорным инструкциям, без необходимости использовать язык ассемблера. Эти Функции известны как встроенные функции. Они могут быть очень полезны.
Встроенная функция напоминает нормальный функциональный запрос, но это - действительно встроенная функция, которую распознает компилятор. Встроенные функции компилируются в линейное кодирование, как отдельная команда, или как короткая последовательность команд.
Преимущество встроенной функции в сравнении с использованием встроенного ассемблера состоит в том, что компилятор имеет всю необходимую информацию, чтобы связать с помощью интерфейса последовательность должным образом с регистром размещения и переменных. Компилятор также знает, как оптимизировать функции с таким последовательностями; кое-что компилятор не может делать со встроенными последовательностями ассемблера. Результат, в котором вы получаете желательную последовательность, должным образом интегрируется в написанный код, и компилятор может оптимизировать её.
СовмещениеC и модулей на ассемблере
Когда приложение написано частично на языке ассемблеров и частично на C или C++, возникает множество вопросов:
как ассемблерный код должен быть написан, чтобы его можно было вызывать из C?
Где ассемблерный код берет параметры, и как возвращается значение вызывающей программе?
как ассемблер должен быть написан, чтобы вызывать функции написанные в C?
как к глобальным переменным C обращаться из кода, написанного на языке ассемблера?
почему отладчик не отображает стек вызовов, когда отлаживается код ассемблера?
Ответ на последний вопрос – в том, что стек вызовов может быть отображен, когда идет работа с кодом ассемблера в отладчике. Однако отладчик требует информации относительно структуры вызовов, которая должна быть оформлена как аннотация в исходном файле ассемблера.
Можно написать части вашего приложения на ассемблере и совместить их с C или C++ модулями. Это выгодно по нескольким причинам:
хорошо определенный функциональный механизм запроса
кодбудетпросточитать
оптимизатор может работать с функциями C или C ++.
Будет иметься некоторые предварительные последовательности команд в форме вызова функции и возврата команды, и компилятор расценит некоторые из регистров как рабочие. Однако, компилятор также предполагает, что все рабочие регистраторы разрушены встроенными командами ассемблера. Во многих случаях, предварительная последовательность из дополнительных команд компенсирует работу оптимизатора.
Рекомендуемый метод для совмещения C или C++ с модулями ассемблера описан в Вызов подпрограмм ассемблера из C и Вызов подпрограмм ассемблера из C++.