微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

变量在函数之间丢失浮点数据

如何解决变量在函数之间丢失浮点数据

我有一个程序,我必须通过寄存器、堆栈和公共变量将参数传递给我的函数,而且似乎我丢失了它们之间的数据,因为即使在第一个函数之后,我在“保存”变量中也得到了 0.0 我认为我搞砸了一些关于寻址变量的事情,因为我对 MASM32 语法很陌生,而且它有一些奇怪的限制。虽然也许我只是想打印错误

文件

extern funcNum1:proto
extern funcNum2:proto
extern funcNum3:proto
public giveVal1,giveVal2

    .data?
      save dd ?
      giveVal1 dd ?
      giveVal2 dd ?

    .data
      array dq 12.0,0.87,9.7,8.64

.code

start:
    call main
    inkey
    exit
main proc

    cls
    print "List number 27,variant 6",10

    lea ecx,array
    lea edx,array+24
    lea eax,save
    call funcNum1    


    push eax
    lea ecx,array+16
    push ecx
    call funcNum2
    pop eax ; save

    printf("Result is %f\n",save) 

    mov esi,dword ptr array
    mov dword ptr giveVal2,esi
    mov esi,dword ptr array+8
    mov dword ptr giveVal1,esi
    call funcNum3
    fld giveVal1
    fld qword ptr [edi]
    fxch
    fdiv
    fstp save

    printf("Result is %f\n",save)    

    ret

main endp

end start

函数文件

extrn giveVal1:DWORD,giveVal2:DWORD
public funcNum1,funcNum2,funcNum3

.data?
    valuef dq ?
    reg1 dq ?
    reg2 dq ?

.data      
    value1 dq 53
    value2 dq -2
    value3 dq 4
    

.code       ; code section

funcNum1 proc
    fld qword ptr [ecx]
    fld qword ptr [edx]
    fdiv
    fsin
    fstp qword ptr [eax]
    ret
funcNum1 endp


funcNum2 proc
    pop edx
    pop eax ; array[2]
    pop ecx ; save
    fild value1
    fld qword ptr [ecx]
    fsub
    fstp valuef
    finit
    fild value2
    fld qword ptr [eax]
    fmul
    fld valuef
    fadd
    fstp qword ptr [ecx]
    finit
    push ecx
    push edx
    ret
funcNum2 endp

funcNum3 proc
    fld qword ptr [giveVal1]
    fild qword ptr [value3]
    fdiv
    fld qword ptr [giveVal2]
    fsub
    fstp giveVal1
    ret
funcNum3 endp

end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。