myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Assembler FPU Stack Problem (https://mygully.com/showthread.php?t=2644434)

essenm 18.06.12 12:19

Assembler FPU Stack Problem
 
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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.