Насколько я могу судить, emu8086 не эмулирует машину с 8087 FPU.
Любое значение с плавающей запятой, которое вы делаете, должно быть чисто программным, без использования fld
/ fadd
/ fstp
или каких-либо обычных устаревших 1 x87 инструкций .
Если вы хотите использовать инструкции FP в реальном режиме, лучшим вариантом будет эмулятор, такой как DOSBox или BOCHS, который эмулирует более позднюю версию x86 + x87, а не emu8086. Это также имеет то преимущество, что позволяет вам использовать более удобные инструкции, такие как imul ax, 1234
вместо необходимости использовать 1-операнд mul
.
Если вы застряли с emu8086 (или реальным микроконтроллером 8086), большинство проблем можно решить с помощью с фиксированной точкой , а не с плавающей запятой: обрабатывать фиксированное число бит как дробную часть. Это легче сделать в программном обеспечении с целочисленными инструкциями. Но это все еще позволяет вам представлять числа как 1.25
.
Сноска 1: В современном x86 FPU x87 устарел; Теперь мы используем SSE и SSE2 для математических вычислений скалярных и SIMD FP, если в действительности не требуется точность 80 бит. emu8086, конечно, этого тоже не имеет. Современные процессоры x86, конечно, все еще поддерживают инструкции x87; обратная совместимость с существующими двоичными файлами является основной причиной того, что x86 все еще существует.