Я хочу написать программу, которая принимает вводимые пользователем данные и выполняет некоторые вычисления с этими числами с использованием 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]
Буду очень благодарен за любую помощь