Работой делать манипуляции на стеке с плавающей запятой:NASM
fld qword [perResult] ;load st0 with perimeter
fsub qword [firstSide] ;take st0 and minus firstSide, st0= perimeter - firstSide
fmul qword [perResult] ;take st0 and multiply by perimeter, st0 = difference of first equation * perimeter
fstp qword [res1] ;take the result off of st0 and place them into variable equation1
;setting up to take perimeter minus second side
fld qword [perResult] ;load up perimeter into st0
fsub qword [secondSide] ;take st0 and minus secondSide, st0 = perimeter - secondSide
fstp qword [eq2]
По какой-то причине, если я закомментировать уравнение, чтобы получить eq2
, я получу правильный выход в предыдущем уравнении, чтобы получить res1
,
, но если оставить уравнение 2 раскомментируйте я получаю 0
в качестве выходного сигнала
и то же самое для следующего уравнения, по какой-то причине это обнуление его, если есть функция после того, как го e предыдущий.
Кто-нибудь когда-либо сталкивался с этой проблемой раньше?
здесь функция печати
mov rdi, areaMsg
call print_string
xor r14,r14
movsd xmm0, [eq2] ;move sumResult into xmm0 for printing
mov qword rax, 1
mov r14, [eq2] ;move result into r14 register for printing float
call print_float
call print_nl
jmp Decision
ОК, гул тогда он должен быть так, как я печатаю, – user1050632