==== Компиляция и линковка ==== Допустим, имеем следующий каркас: //main.c:// extern int test (); int main () { test (); return 0; } //test.s:// use16 bits 16 global _test section .text _test: mov ax,0x1234 ret Тогда команды компиляции и сборки следующие: bcc -c main.c -o main.obj -0 nasm test.s -o test.obj -f as86 ld86 main.obj test.obj -o test.exe ====Передача параметров ==== В этом разделе будет дана теоретическая модель построения связи asm-c Данный способ передачи параметров используется в языках программирования Си, Си++, Пролог и других. Этот метод противопоставлен методу языка Паскаль, поэтому связка asm-pascal будет выглядеть по-другому! Итак, если мы определим функцию в Сиint foo (int a,int b,int c,int d);то при вызове функции выполнятся следующие машинные инструкции: push d push c push b push a call _foo add sp,8 ;Освобождение стека осуществляется автоматически! При этом для правильного использования переданных параметров процедура //foo// может выглядеть так: _foo: push bp mov bp,sp ;a = [bp+4] ;b = [bp+6] ;c = [bp+8] ;d = [bp+0xa] ;... pop bp ret