segment .data x dd 0.0, 1.0, 2.0 y dd 1.0, 3.0, 5.0 segment .text global main, dot_product main: lea rcx, [x] lea rdx, [y] call dot_product xor eax, eax ret dot_product: movss xmm0, [rcx] mulss xmm0, [rdx] movss xmm1, [rcx+4] mulss xmm1, [rdx+4] addss xmm0, xmm1 movss xmm2, [rcx+8] mulss xmm2, [rdx+8] addss xmm0, xmm2 ret