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