RSS Feed

Functie cu numar variabil de parametri - C/C++/ASM

December 15th, 2007

In topicul anterior am vorbit despre modurile in care putem extrage parametrii de pe stiva. Cum in C nu puteam sti exact cati parametri sa luam, am apelat la 2 artificii . Ori stiam cati parametri urmau sa apara, ori stiam unde sa ne oprim . C/C++ -ul nu permite in mod normal sa cunoastem numarul de parametri cu care am apelat o functie ( cu numar variabil de parametri ) . Insa acest lucru se poate rezolva cu ajutorul ASM. Nu vom mai folosi stdarg.h , prin urmare nu mai avem nevoie de acel prim parametru static al functiei. Urmatoarea functie afiseaza toti parametrii cu care a fost apelata...

C++:
  1. void functie(...)
  2. {
  3.     unsigned char nr_parametri;
  4.     int *parametru,i;
  5.  
  6.     _asm
  7.     {
  8.         mov eax,[ebp+4]
  9.         add eax,2
  10.         mov al,[eax]
  11.         shr al,2
  12.         mov nr_parametri,al
  13.         mov parametru,ebp
  14.         add parametru,8
  15.     }
  16.  
  17. for(i=0;i<nr_parametri;i++)
  18. cout<<parametru[i]<<" ";
  19. }

Acum,in vectorul parametru, avem toti parametrii si ne putem juca dupa cum dorim cu ei ... va ramane ca tema sa modificati functia astfel incat sa calculeze suma :D

Leave a reply...