мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияСледующая версияСледующая версия справа и слева | ||
asm:second3 [03/03/2011 16:39] – arabusov | asm:second3 [03/03/2011 16:56] – arabusov | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ===== Механизм связки Си-Ассемблер ===== | ||
+ | На предыдущих уроках мы познакомились с гибридным программированием. В этом разделе будет дана теоретическая модель построения связи asm-c | ||
+ | |||
+ | Данный способ передачи параметров используется в языках программирования Си, Си++, Пролог и других. Этот метод противопоставлен методу языка Паскаль, | ||
+ | |||
+ | Итак, если мы определим функцию в Си< | ||
+ | < | ||
+ | push c | ||
+ | push b | ||
+ | push a | ||
+ | call foo | ||
+ | add sp, | ||
+ | При этом для правильного использования переданных параметров процедура //foo// может выглядеть так: | ||
+ | < | ||
+ | |||
+ | push bp | ||
+ | mov bp,sp | ||
+ | |||
+ | a = [bp+4] | ||
+ | b = [bp+6] | ||
+ | c = [bp+8] | ||
+ | d = [bp+ah] | ||
+ | |||
+ | ... | ||
+ | |||
+ | pop bp | ||
+ | ret | ||
+ | |||
+ | foo endp</ | ||
+ | |||
+ | |||
==== Пример библиотеки, | ==== Пример библиотеки, | ||
Строка 73: | Строка 104: | ||
В модуле языка Си записано следующее: | В модуле языка Си записано следующее: | ||
- | < | + | <code=c>extern int put_symbol (unsigned char symbol, unsigned char attribut);</ |
Это значит, | Это значит, |