Tuesday, January 14, 2014

ACSO (ASM) - Varianta 2

Să se scrie o funcție f(int n) ce primește ca parametru variabila int n și returnează rezultatul calculului: 

2 + 2*4 + 2*4*6 + 2*4*6*8 + … +2*4*6*8*…*2n.


Rezolvare:

int f(int){
 _asm{
  mov esi, [ebp+8]
  shl esi, 1 // folosim siftare pentru inmultirea cu 2 
  // deoarece este mai rapida decat instructiunea "mul"
  mov eax, 1 // folosim eax pentru produsele din adunare
  mov ecx, 2 // contor
  mov ebx, 0 // suma propriu-zisa
loop_1:
  cmp ecx, esi
  jg final_loop_1
  mul ecx
  add ebx, eax
  add ecx, 2
  jmp loop_1
final_loop_1:
  mov eax, ebx

 }
}

No comments:

Post a Comment