мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
asm:bcc_nasm [10/04/2013 22:13] – создано arabusovasm:bcc_nasm [10/04/2013 22:31] (текущий) arabusov
Строка 1: Строка 1:
 +==== Компиляция и линковка ====
 Допустим, имеем следующий каркас: Допустим, имеем следующий каркас:
  
Строка 21: Строка 22:
 nasm test.s -o test.obj -f as86 nasm test.s -o test.obj -f as86
 ld86 main.obj test.obj -o test.exe</code> ld86 main.obj test.obj -o test.exe</code>
 +====Передача параметров ====
 +В этом разделе будет дана теоретическая модель построения связи asm-c
 +
 +Данный способ передачи параметров используется в языках программирования Си, Си++, Пролог и других. Этот метод противопоставлен методу языка Паскаль, поэтому связка asm-pascal будет выглядеть по-другому!
 +
 +Итак, если мы определим функцию в Си<code=c>int foo (int a,int b,int c,int d);</code>то при вызове функции выполнятся следующие машинные инструкции:
 +<code=asm> push d
 + push c
 + push b
 + push a
 + call _foo
 + add sp,8 ;Освобождение стека осуществляется автоматически!</code>
 +При этом для правильного использования переданных параметров процедура //foo// может выглядеть так:
 +<code=asm>_foo:
 +
 + push bp
 + mov bp,sp
 +
 + ;a = [bp+4]
 + ;b = [bp+6]
 + ;c = [bp+8]
 + ;d = [bp+0xa]
 +
 + ;...
 +
 + pop bp
 + ret
 +</code>