下面显示了计算平方方程解的代码(同时我们计算了一个delta)。结果我们得到两个值:delta和final解决方案。
我对当前值的delta元素有一些问题:相反得到3 (49-4x10=9, sqrt(9)=3)
,我得到9.考虑到我们有9而不是3,作为最终结果我们收到1而不是2.我想请求你的帮助。
section .text
global _start
_start:
FINIT
FLD dword [zmA] ; zmA - st0
FLD dword [zmB] ; zmB - st0, zmA - st1
FLD dword [zmB] ; zmC - st0, zmB - st1, zmC - st2
FLDZ ; 0 - st0, zmC - st1, zmB - st2, zmC - st3
FADD st0,st2 ; zmB,zmC,zmB,zmA
FMUL st0,st2 ; ZmB^2, zmC, zmB, zmA
mov eax,4
mov [delta],eax
FILD dword [delta] ; 4, zmB^2, zmC, zmB, zmA
FMUL st0,st4 ; 4zmA,zmB^2,zmC,zmB,zmA
FMUL st0,st2 ; 4zmAzmC,zmB^2,zmC,zmB,zmA
FSUBP st1,st0 ; zmB^2-4zmAzmC,zmC,zmB,zmA
FSQRT ; making element of delta
FIST dword [delta]
xor ebx,ebx
mov ebx,[delta]
add ebx,48
mov [delta],ebx
mov eax,4
mov ebx,1
mov ecx,delta
mov edx,4
int 80h
FLDZ ; 0, sqrt. delta, zmC, zmB, zmA
FSUB st0,st3 ; -zmB, sqrt. delta, zmC, zmB, zmA
FSUB st0,st1 ; -zmB - sqrt. delta, zmC, zmB, zmA
FXCH st4 ; zmA, sqrt. delta, zmC, zmB, -zmB- sqrt. delta
FLD dword [zmA] ; zmA, sqrt. delta, zmC, zmB, -zmB - sqrt. delta
FADDP st1,st0 ; 2zmA, sqrt. delta, zmC, zmB, -zmB - sqrt. delta
FXCH st4 ; -zmB - sqrt. delta, sqrt. delta, zmC, zmB, 2zmA
FISTP dword [result]
xor ebx,ebx
mov ebx,[result]
add ebx,48
mov [result],ebx
mov eax,4
mov ebx,1
mov ecx,result
mov edx,4
int 80h
mov eax,1
int 80h
section .data
zmA dd 1.0
zmB dd -7.0
zmC dd 10.0
delta dd 0
result dd 0
答案 0 :(得分:3)
你这里有一个错字:
FLD dword [zmB] ; zmC - st0, zmB - st1, zmC - st2
该指示应为FLD dword [zmC]
顺便说一下,你可以替换这两行:
FLDZ ; 0 - st0, zmC - st1, zmB - st2, zmC - st3
FADD st0,st2 ; zmB,zmC,zmB,zmA
使用:
FLD st1