[Asembler] - problem z dll.

0

Witam mam oto taki problem. Napisałem sobie funkcję w dll z wykorzystanie SSE2.

dividePolynomial proc tabTemp: DWORD,n: DWORD, divisor:REAL8

	mov ecx,[n]
	mov esi,tabTemp
	mov ebx,ecx     ; w EBX liczba wezlow
	shr ecx,1		; przetwarzanie po 2 wezly
	mov edx,ecx     ; EDX = ECX/4
	movhpd xmm0,[divisor]
	movlpd xmm0,[divisor]
	petla:
	movupd xmm1,[esi]
	divpd  xmm1,xmm0
	movupd [esi],xmm1
	add esi,16
	loop petla
	mov eax,tabTemp

ret
dividePolynomial endp

I wyskakuje mi oto taki błąd podczas powrotu z funkcji i nie wiem czemu.

user image

0

Jedyne miejsce gdzie mozesz sobie nadpisac stos to:
movupd [esi],xmm1
Poza tym powinienes zachowac i na koniec odtworzyc wartosci wszystkich modyfikowanych rejestrow zgodnie z calling convention, ktorej uzywasz.

0

shr ecx,1 ; przetwarzanie po 2 wezly
mov edx,ecx ; EDX = ECX/4

Poza tym zgodnie z komentarze powinno byc shr ecx,2

0

Nie bo ja ładuje po dwie wartości. Już rozwiązałem problem, wystarczyło dać w miejscu gdzie wywołuje funkcje

typedef DWORD (__stdcall*MYPROC1)(int*, int,int);

zamiast:typedef DWORD (MYPROC1)(int, int,int);

.

1 użytkowników online, w tym zalogowanych: 0, gości: 1