Получение пользовательского ввода и загрузка его в стек FPU - что я делаю не так? - PullRequest
1 голос
/ 27 мая 2020

Я хочу написать программу, которая принимает вводимые пользователем данные и выполняет некоторые вычисления с этими числами с использованием fpu. Я использую C функцию scanf. Для моих расчетов мне также понадобится число -4, поэтому я тоже объявил его в коде. На данный момент я просто пытаюсь отобразить значение, полученное от пользователя, чтобы убедиться, что они хорошо загружаются, и только позже я буду go в вычислениях.

Я беру числа у пользователя и загрузите стек fpu, как показано ниже. В принципе все в порядке, но число в [esp + 8] всегда отображается с дополнительной дробной частью, например, если я ввожу 2 - отображается 2,000001, если 3 - 3,000001 и каждое число аналогично. Думаю, это небольшая ошибка, но я не могу ее найти

        [bits 32]

        call print1
       formatA: db "a = ", 0
print1: 
       call[ebx+3*4];
       sub esp, 8
       push esp
       call scan_a
formatA2: db "%lf", 0
scan_a:
       call [ebx+4*4]
       add esp, 2*4

       call print2
formatB: db "b = ", 0
print2:
       call[ebx+3*4];
       sub esp, 8
       push esp
      call scan_b
formatB2: db "%lf", 0
scan_b:
       call [ebx+4*4]
       add esp, 2*4

       call getaddr

format db "x1 = %lf", 0xA,
       db "x2 = %lf", 0xA, 0

offset equ $ - format
minusfour  dq -4.0

getaddr:

        finit

        ;mov esi, [esp]
        ;lea esi, [esi+offset] ; esi = -4

        fld qword[esp]
        fld qword[esp+8]

        fstp qword[esp+4]
        fstp qword[esp+12]

        call[ebx+3*4] ;print function
        add esp, 3*4

        push 0
        call[ebx+0*4]


Буду очень благодарен за любую помощь

...