uP:Ciąg

Z Wiki Rafał (ert16) Trójniak

Temat zadania

Napisać program testujący (w C) oraz funkcję (w ASM) wyznaczającą metodą iteracyjną wartość k-tego wyrazu (k>=0) ciągu danego wzorem

  • a_k+2=a_k - a_k+1
  • a_0=0
  • a_1=1.

Deklaracja funkcji:

int compute_value(int k);

Program testujący powinien wypisać 10 pierwszych wyrazów ciągu.

asm.s

.text
.type compute_value, @function
.global compute_value
#int compute_value(int k);
compute_value:
	pushl %ebp
	movl %esp, %ebp
	xor %eax, %eax
	movl 8(%ebp), %eax
	cmp $1, %eax
	jbe finish
 
#	a_k=a_k-2 - a_k-1
	dec %eax
	pushl %eax
	call compute_value
	popl %ebx
	dec %ebx
	pushl %eax
	pushl %ebx
	call compute_value
	addl $4,%esp
	popl %ebx
	sub %ebx, %eax
finish:
	movl %ebp, %esp
	popl %ebp
	ret

main.c

#include <stdio.h>
 
int compute_value(int k);
 
int main()
{
	unsigned l, w;
	for(l=0;l<10;l++){
		w=compute_value(l);
		printf("f(%d) = %d\n", l, w);
	}
	return 0;
}
Osobiste