Компиляция и линковка

Допустим, имеем следующий каркас:

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

asm/bcc_nasm.txt · Последние изменения: 10/04/2013 21:31 — arabusov
CC Attribution-Noncommercial 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0