==== Компиляция и линковка ====
Допустим, имеем следующий каркас:
//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