[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, botów: 0