I am writing an assembly module for my c++ program. Procedure f_sin calculates sine of some value that is stored in one array and puts result in other array. But when I run my program, sine array seems to be filled with garbage values. I can't really get where it fails.
I'm using Visual Studio 2019.
main.cpp
#include<iostream>
extern "C" void f_sin(int* res, int N, double* sine);
int main() {
int N = 3;
int arr[N] = {1, 2, 3};
double sine[3];
f_sin(arr, N, sine);
for (int i = 0; i < N; i++)
std::cout << sine[i] << " ";
return 0;
}
proc.asm
.586p
.MODEL FLAT, C
.CODE
PUBLIC C f_sin
f_sin PROC C arr: dword, Nint: dword, sinarr: dword
push esi
push edi
push ebp
mov edi, sinarr
mov esi, arr
mov ecx, Nint
count:
finit
fld dword ptr [esi]
fsin
fstp dword ptr [edi]
add edi, 4
add esi, 4
loop count
pop ebp
pop edi
pop esi
ret
f_sin ENDP
END