Я использую HCS08 и Code Warrior. Я вызываю функцию C из сборки. Как передать параметр этой функции C?Как передать параметр функции из сборки в C
ответ
нажмите его в стек, а затем позвоните по номеру.
Что вы хотите - это ABI, или Application Binary Interface для вашей платформы. Это объяснит, например, как передать аргументы функциям (регистры, стек, микс), которые регистрируют, являются сбережениями вызывающего абонента и которые сохраняются, специальные цели для определенных регистров и т. Д. Следуя общему ABI, вы можете связывать библиотеки, созданные разными компиляторами, смешивать языки высокого уровня и т. Д.
Для «больших» платформ обычно легко найти документ с указанием ABI. Для других вам, возможно, придется полагаться на разборку функции C и на то, что она делает. Обратите внимание на то, какие регистры он сохраняет в своем прологе и какие из них могут разбить. Также обратите внимание, как пролог сохраняет указатель стека (или указатель кадра) на запись, потому что вам придется подражать этому, если вы хотите, чтобы отладчики работали.
Похоже, что соглашение о вызове для HCS08 задокументировано Freescale в an appnote.
+1 для обоих, где искать соглашение о вызове, и как разобраться в этом, если документация не может быть найдена. – Sparky
Ну, я нашел решение.
В файле сборки объявить переменную как:
XREF varaible1
и использовать его в качестве ячейки памяти
В файле C объявить переменную как глобальные.
extern char variable1;
Запишите версию c (возможно, это просто заглушка, передающая только аргументы) для вашей функции и проанализируйте код. Выполняйте свою функцию одинаково. Метод вызова для конкретной функции (в большинстве случаев) однозначно определяется его набором аргументов.
Общим способом является то, что сначала некоторые аргументы, если они являются целыми числами или указателями, передаваемыми в регистры, а остальные помещаются в стек. Но также обратите внимание, что varargs часто передаются по-разному, чем не-varargs.
Специально для 6808, у которых есть несколько регистров, все параметры, вероятно, передаются через стек.
- 1. CGO, как передать параметр NULL функции C
- 2. C++: передать функцию как параметр другой функции
- 3. Как передать параметр XSLT из функции Javascript
- 4. Как передать параметр из массива в C#?
- 5. Как передать параметр функции gen_server?
- 6. Как передать расширенный параметр функции?
- 7. Как передать параметр функции обещания
- 8. MATLAB: Как передать параметр функции?
- 9. Как передать функцию как параметр другой функции в C?
- 10. Как передать параметр функции onTimer в flex?
- 11. Как передать параметр функции преобразования?
- 12. передать делегат от C# до c как параметр функции
- 13. Как передать массив как параметр функции в C?
- 14. Как передать json как параметр в функции
- 15. Как передать параметр функции объекта в Javascript?
- 16. передать массив как параметр функции в javascript
- 17. Как передать 2D-массив функции сборки x86 в C
- 18. Как передать параметр в функции внутреннего
- 19. Как передать параметр вычисленной функции в нокаут?
- 20. Как передать параметр функции Javascript .done из функции .success?
- 21. Javascript: как передать значение в параметр функции?
- 22. Вызов функции сборки из C
- 23. Как передать входной текстовый параметр функции C# в ASP.NET Razor?
- 24. Как вызвать и передать параметр функции R в C++?
- 25. как передать параметр функции oracle в среде C#
- 26. Невозможно передать параметр моей функции?
- 27. Передать переменную как параметр в функции javascript
- 28. как передать php-параметр в функции datepicker
- 29. как передать параметр строки в OnClick функции
- 30. Как передать параметр функции в casperjs?
Вы имеете в виду сделать что-то вроде этого: pshA jsr cdc_putc где cdc_putc является функцией C void cdc_putc (char c) Итак, C получит значение аккумулятора? – Punit
ну, это не решило проблему, я получаю «НЕЗАКОННОЕ ВР» на отладчике. – Punit