ALP中的协处理器调用

时间:2018-04-13 14:17:14

标签: assembly nasm x86-64 fpu

我用64位写了一个ALP代码来找出给定数据集的均值,方差和标准差。平均值很容易计算,但方差出现无穷大。我甚至尝试使用gdb调试程序,它仍然将变量值显示为0.数学处理器调用已经使用过。使用的汇编程序是NASM

    %macro rw 3
    mov rax,%1
    mov rdi, 01
    mov rsi,%2
    mov rdx,%3
    syscall
   %endmacro rw

   section .data 

    msg1: db 10,"Mean is: %lf"
    len1 equ $-msg1
    msg2: db 10,"Variance is: %lf"
    len2 equ $-msg2
    msg3: db 10,"SD is: %lf"
    len3 equ $-msg3
    array: dq 10,20,30,40,50
    format db "asdas %lf" 
    count dq 5

   section .bss
    mean resq 1
    m1 resq 1
    var resq 1
    sd resq 1
    temp resq 1
    temp_ar resq 5


   section .text
   extern printf
   global main
   main:

    ;;;;;;;;;;;;;;;;;;;;;MEAN CALCULATION;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    mov rdi,array
    xor rcx,rcx
    mov rcx,5
    fldz
    loop_mean:
            fadd qword[rdi]
            add rdi,8
    loop loop_mean
    fdiv qword[count]
    fstp qword[mean]
    mov rax,qword[mean]
    mov qword[m1],rax
    ;;;;print mean;;;;
    ;rw 1,msg1,len1
    lol:




    ;;;;;;;;;;;;;;;;VAR CALCULATION;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    mov rdi,array
    mov r8,temp_ar
    xor rcx,rcx
    mov rcx,5

    loop_var:
            fld qword[rdi]
            fsub qword[m1]
            fstp qword[temp]
            fld qword[temp]
            fmul qword[temp]
            fstp qword[r8]
            add r8,8
            add rdi,8

    loop loop_var
     mov rdi,temp_ar
    xor rcx,rcx
    mov rcx,5
    fldz
    loop_here:
            fadd qword[rdi]
            add rdi,8
    loop loop_here

    mov qword[count],5
    fdiv qword[count]
    fstp qword[var]
    mov rax,qword[var]
    here:


    ;;;;;;;;;;;;;;;;;;;SD;;;;;;;;;;;;;;;;;;;;;
    mov rdi,msg1
    sub rsp,8
    mov rax,2
    movsd xmm0,[mean]
    movsd xmm1,[var]
    movsd xmm2,[sd]
    call printf
    add rsp,8

    call exit


    exit:
    mov rax,60
    mov rdx,00
    syscall

0 个答案:

没有答案