            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