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

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

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

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