如何解决变量在函数之间丢失浮点数据
我有一个程序,我必须通过寄存器、堆栈和公共变量将参数传递给我的函数,而且似乎我丢失了它们之间的数据,因为即使在第一个函数之后,我在“保存”变量中也得到了 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 举报,一经查实,本站将立刻删除。