Pozycja parametrów funkcji na stosie.

Pozycja parametrów funkcji na stosie.
PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 35
0

Potrzebuję napisać program w C++ w którym używam funkcji napisanej w Assemblerze.
Zaraz po wejściu do funkcji już w assemblerze wykonuje:

Kopiuj
push ebp
mov ebp, esp

Gdy oba parametry są typu int to znajdują się w tym momencie na pozycjach [ebp+8] pierwszy parametr, [ebp+12] drugi parametr.

Kopiuj
extern "C" double funkcja (int, int);

Gdy oba parametry są typu double to znajdują się chyba na [ebp+8] pierwszy, [ebp+16] drugi? Tak wpisałem i program działa niby dobrze.

Kopiuj
extern "C" double funkcja (double, double);

Problem jest taki że chciałbym aby moja funkcja przyjmowała jako pierwszy parametr typ double a drugi int i teraz nie wiem jak będzie wyglądał stos.

Kopiuj
extern "C" double funkcja (double, int);

Wpisywałem różne wartości dla tego drugiego parametru i nigdy nie mogłem dostać poprawnego wyniku.
Pierwszy nadal jest na [ebp+8] ale gdzie jest drugi?

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
1

U mnie to wyglada, ze jest na +8, +16, ale jako, ze to assembler to polecam napisac jakas funkcyjke nawet nic nie robiaca w cpp i za pomoca kompilatora wygenerowac kod w assmie, wtedy bedziesz mial jako taka pewnosc.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Gdzie są parametry to teoretycznie można wyliczyć, ale jak już potrzebuję to szukam na chybił-trafił w [ebp±ileś] i zawsze gdzieś się znajdzie :-)
(a czasem są w rejestrach…)

robcio
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Opole
  • Postów: 533
0

można też adresować zmiennej wg ESP dzięki temu zaoszczędzimy rejestr EBP co się przyda w lepszej optymalizacji programu

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Tylko że esp może się zmieniać, więc jest trudniej ręcznie nad tym zapanować. Ale już kompilator może automatycznie śledzić co się dzieje ze stosem, i odwoływać się do parametrów i zmiennych lokalnych za pomocą esp.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.