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