Я пытаюсь получить общее представление об операциях с плавающей запятой на x86. Я понимаю, что у нас есть выделенный FPU со стеком, но я не нахожу много актуальной информации о том, как ведет себя стек с точки зрения различных инструкций.
В основном меня смущает адресация регистров fpu. Если я имею в виду st(#), я говорю о конкретном регистре? Или это смещение от вершины стека?
Я думаю, что на большинство моих вопросов можно ответить на этом примере:
Если у меня есть пустой стек FPU, и я запускаю:
fld x
fld y
fmul st, st(1)
Будет ли результат:
ST(0) = y * x
ST(1) = x
or:
ST(0) = x * y
ST(1) = y
?
Обратите внимание, что разница между ними — это значение в ST(1).