NASM 协处理器 - 计算平方方程

NASM coprocessor - calculating square equation

下面显示了计算平方方程解的代码(同时我们计算了 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

你这里有错字:

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