Мне было поручено написать простое приложение на смешанном C / ASM, которое должно использовать математический сопроцессор.
Есть функция цилиндр (float x, float y, float z), которая возвращает 1, если данная точка находится внутри цилиндра (цилиндр имеет основание в x = 0, y = 0, радиус = 5 и высоту = 10. ) и 0, если это не так.
Итак, выглядит просто. Проверьте, находится ли z в пределах <0,10>, а затем проверьте, если x ^ 2 + y ^ 2 <25.
Но мои знания о x87 равны нулю.
Это все, что я написал.
_cylinder PROC
push ebp
mov ebp, esp
sub esp,8 ; I can't use .data in the application, so I reserve some space on the stack for numbers 10 and 25
mov [esp],10
mov [esp+4],25
finit
fldz
fld [ebp+8]
;here i get stuck
add esp, 8
pop ebp
_cylinder ENDP
Итак, я застрял. Итак, я пытаюсь найти, какие инструкции можно использовать в приложении. И здесь я застреваю, потому что каждый список руководств / инструкций, который я нахожу в сети, написан так плохо, что я почти ничего не могу понять.
Вопрос в том, что происходит, когда я извлекаю что-то из математического сопроцессора? Где я могу найти всплывающее значение? Как он конвертирует из 80-битного значения в 32-битное (если, конечно) Другой вопрос, как работает FCOM (FCOMP для популярного варианта)? Он сравнивает что с чем (st0 с st1 или st1 с st0?), И где я могу увидеть, меньше ли / равно / больше значение?
Спасибо за любую помощь!