Moin,
folgender Quellcode akzeptiert keine Variablen auf dem FPU Stack und MASM meckert rum, wenn ich Register auf den FPU Stack schreibe.
Der Code-Abschnitt berechnet PI nach der Formel PI = 4 * ( 1+Vorzeichen * Bruch) über die FPU.
Code:
[...].DATA
N EQU 1000
Summe DW 1
Vorzeichen DW 1
i DW 2
Minus DW -1
Bruch DW 0
zwei DW 2
temp DW ?
.CODE
;Berechnung von PI
Rechnung PROC
push Bx
mov bx,N
pi:
cmp i,Bx
ja Ende
FWAIT
FILD Vorzeichen
FIlD Minus
FMUL
FISTP temp
mov dx,temp
mov Vorzeichen,dx
FWAIT
FILD i
FILD zwei
FMUL
FISTP temp
mov dx,temp
mov bruch,dx
FWAIT
FLD1
FILD Bruch
FSUB
FLD1
FDIV
FILD Vorzeichen
FMUL
FILD Summe
FADD
FISTP temp
mov dx,temp
mov Summe,dx
inc i
jmp pi
[...]
Es befindet sich alles in der selben Datei und beim ersten FMUL wird schon bestätigt, dass der Stack leer
und eine Ungültige Operation - vermutlich wegen multiplizieren von zwei leeren Stackelementen - durchgeführt wird. Die Variable temp verwende ich so, dass ich beim umlagern Stichprobenartig nachschauen kann via Codeview, was sich nach den Operationen in der jeweiligen Variable befindet. Laut Codeview werden die Variablen initialisiert, aber anscheinend können sie nicht auf den FPU Stack gepusht werden.
EDIT: Der Fehler, weshalb die Variablen keine Werte annahmen ist behoben, jedoch hat nicht den zugewiesenen Wert 2, sondern fängt bei 128D an und geht somit nicht in die Schleife pi. Summe wird ebenfalls nicht mit 1 initialisiert, sondern bekommt den Wert 301D. Zu beiden Werten konnte ich nichts finden. Sind das Fehlercodes? Wenn ja, was bedeuten sie? Wenn nein, wie umgehe ich die Falschinitialisierung?