ubuntuusers.de

Assembler fidiv mit 64 bit value in memory

Status: Gelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

mollitz

Anmeldungsdatum:
2. September 2007

Beiträge: 103

Wohnort: Tübingen

Hi,

Ich bin gerade dabei einen Float durch einen Integer zu teilen. Beides sind QuadWords (also Double und Long). In Intels Assembler Referenz finde ich dazu aber keinen Befehl, beziehungsweise nicht die richtigen Operanden. Da heißt es bei fidiv entweder 32-bit(Was auch wunderbar tut) oder aber und aber 16-bit. Und jetzt kommt das richtig merkwürdige: Wenn als Operand ein 16-bit Int (m16int) angegeben ist, so steht in der beschreibung folgendes:

Divide ST(0) by m64int and store result in ST(0).

Wo ist da der Sinn frag ich mich?

Gruß,

Moritz

TraumFlug

Avatar von TraumFlug

Anmeldungsdatum:
16. Juli 2009

Beiträge: 999

Wohnort: zwischen den ohren

ist echt lustig...ich hab's jetzt nicht selbst getestet, aber verschiedene referenzen/seiten zu den opcodes geben da unterschiedliche sachen an; vergleich mal (google "fidiv 64"): das hier mit dem hier.

ich tippe auf einen fehler in irgendeiner basisreferenz, der sich da über diverse sachen fortgesetzt hat (operand speicheraddresse zu einem 16bit wert soll auf einmal auf einen 64bit wert zeigen?).

probier einfach mal mit diversen assemblern (gas, nasm), was die so ausspucken, wenn man sowas macht (bin jetzt nicht so der crack, aber man kann glaube ich in nasm über die addresse angeben, auf welche "speichergrösse" zugegriffen wird (dw), und bei gas kriegt der opcode evtl. ein "q" hintendran...). wäre interessant, ob die assembler schon fehler ausspucken, und wie die ergebnisse so sind (und die generierten opcodes).

ansonsten: der "fild" opcode hat auf jeden fall 64bit-mem als operand, und dann halt normale division, würde ich sagen. fidiv macht auch nichts anderes (laut referenzen wird der integer in's interne fliesskommaformat konvertiert - was fild auch macht - und dann erfolgt eine division zwischen den beiden fliesskommawerten).

mollitz

(Themenstarter)

Anmeldungsdatum:
2. September 2007

Beiträge: 103

Wohnort: Tübingen

Hi,

Ich weiß jetzt was ist: NASM akzeptiert nur word und dword als typ. Letztendlich ist also nur die Beschreibung falsch und es gibt einfach keine Möglichkeit durch einen 64-bit integer, ohne explizite Konvertierung desselbigen, zu teilen. Bei den anderen fi{add|sub|mul} ist das genauso.

Danke für die Recherche

Gruß,

Moritz

Antworten |