деление 8086/8087 1/3 = 3? - PullRequest
       84

деление 8086/8087 1/3 = 3?

1 голос
/ 25 марта 2012

У меня огромная проблема с использованием fdiv !!!! Я пытаюсь разделить 1/3, вот что я делаю

.model small
.stack 100h 
.data 

var1 dd 1
var2 dd 3 
var3 dd 2
resultado dt 0.0

.code 

mov ax,@data 
mov ds,ax 
finit 
fild var1
fild var2
fdiv
fstp resultado
ffree 

.exit 

Как вы можете видеть, я перемещаю результат в resultado, потому что я не вижу результат в st(0) (я использую tasm, поэтому я просто вижу переменные в отладчике), результат должен быть 3EAAAA3A но я получаю 40400000 ... это 3 !!! как это возможно?? Я попытался обмен переменных и ничего !!! Вы можете мне помочь?? = (

Ответы [ 2 ]

5 голосов
/ 25 марта 2012

Если FPU столь же старый, как 8087, вы должны поставить инструкцию fwait после fdiv.В противном случае вы можете прочитать результат из FPU, пока FPU все еще выполняет разделение, и результат, который вы записываете, не определен.

Эта «функция» была удалена в 80287 FPU.

1 голос
/ 25 марта 2012

Представленный код не демонстрирует заявленной проблемы.Он вычисляет 0,3 (3) с FDIV (на самом деле FDIVP ST(1), ST, поэтому он делит ST (1) = 1,0 на ST (0) = 3,0), а затем сохраняет его как последовательность из 10 байтов (AB AA AA AAAA AA AA AA FD 3F) в resultado.

...