Einzelnen Beitrag anzeigen

CarstenP

Registriert seit: 4. Aug 2006
Ort: Dortmund
8 Beiträge
 
#5

Re: asm-Befehle innerhalb eines Delphi Programmes

  Alt 12. Dez 2006, 16:48
Ich hätte nie gedacht, das es so aufwendig wird.

Ich habe zwar den Anfängerkurs nochmal gelesen, leider wird da nicht direkt drauf eingegangen wie man "simple" Gleitkomma Zahlen in den Gleitkommastack bekommt.

Nun gut. Ich weiss halt noch das es für Gleitkommawerte ja eine IEEirgendwas Darstellung gab. Und meine Erste Annahme ist, das die FPU NUR damit rechnet.

Wenn ich also einen "simplen" Single Wert wie 0.5 in einen Gleitkommawert übertragen will, dann benutze ich ein Tool, das ich hier entdeckt habe.

http://www.h-schmidt.net/FloatApplet/IEEE754de.html

Um ein wenig abzukürzen, 0.5 Ist als IEE7.. Wert in Hex 3F000000

Weiterhin erinnere ich mich auch noch daran, das Intel (oder besser x86) CPUs eine andere endian Darstellung haben.

Also wird aus 3F000000 0000003F.

Darüber hinaus nehme ich an, das die FPU mit EINFACHER Genauigkeit (32Bit) arbeitet.

Kurzum, um meine 0,5 in den Gleitkommastack zu packen brauche ich.

FLD DOUBLEWORD $0000003F
geht nicht

fld dd $0000003F
auch nicht

muss man vielleicht 0.5 erst als "assembler" variable belegen?
B DD $0000003F
fld B
Nein, wenn, dann zumindest nicht so.

Bah, warum ist das so schwer? Die einzige Möglichkeit die ich sehe, ist folgende:
function RSqrt(x: single): single;
var
r: single;
const
constZeroPointFive : single = 0.5;
asm
fld constZeroPointFive
....

Aber ist das nicht schon wieder sehr viel overhead?

Meine Frage wäre dann: Gibt es nicht einen einfacheren Weg eine KONSTANTE Gleitkommazahl in den Gleitkommastack zu werfen?

Danke nochmal,
Carsten
  Mit Zitat antworten Zitat