Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: bitmaster am 13. March 2008, 16:50
-
Hi,
ich möchte eine 16 Bittige Zahl in ax durch 1024 teilen und den quotient (mit zwei Stellen hinter dem Komma) in einer Zeichenkette kopieren.
also z.B wenn ax = 1200, dann soll die Zeichenkette folgenden Wert beinhalten:
Zeichenkette db " ", " ", " ", " ", "1", ",", "1", "7", 00h ;max. 65535,00
Geht das auch ohne floating point unit oder brauche ich die dafür?
danke!!!
-
einfach den Divisionsrest mal 100 und noch mal durch 1024 dann solltest du die zweistellige zahl, die rauskommt, als deine nachkommastellen nehmen können.
d.h. wenn z.b. 1 rauskommt dann hast du ?,01
wenn der Rest der bei der zweiten Division dann größer als 511 ist musst du aufrunden.
wie du integer in nen String konvertierst wirst du wissen, oder?
-
Das ist ein Argument. :wink:
vielen dank!!!
-
Moin
Der Vorschlag von MNemo nennt sich glaubich zumindest Festpunktarithmetik
und wieso bei einem Teiler der der Konvention 2^x entspricht eine Division anstossen? schieben würde auch genügen.
a / ( 2^x) = a >> x
Aber ob das alles bei heutigen PC prozessoren wirklich schneller ist?
Gruss
-
Aber ob das alles bei heutigen PC prozessoren wirklich schneller ist?
Ich würde mal sagen es erleichtert es dem Prozessor die Pipeline auszunutzen, da es weniger Register nutzt als die Division. Das ist jetzt aber nur ins Blaue hinein geraten.
-
Na ja, die Division gibt ein den Rest gleich mit aus, beim Verschieben muss ich mehrere Aktionen durchführen. Von daher dürfte das eine nicht unbedingt schneller sein als das andere. :-P
bitmaster
-
Mir gings eher darum wieviele Registerabhängigkeiten die beiden Befehle haben. Und da ist die Division klar im Nachteil, da sie 2 Register liest und 2 Register schreibt, ein Shift hingegen nur eins schreibt/liest.
Das heißt, dass andere Befehle die weiter hinten in der Pipeline sind evtl noch nicht ausgeführt werden können bzw. div noch nicht ausgeführt werden kann, da die zwei Register noch nicht gefüllt wurden.
Bei > 20 Pipelinestufen bei einem Pentium 4 könnte das schon einen Unterschied machen. Aber wie gesagt, dass ist geraten, da ich nicht viel Ahnung davon habe.
btw. ich glaube beide Befehle gehen seit langem in einem Taktzyklus, aber auch das habe ich jetzt nicht nachgeschaut.
-
Ist auch egal. Es funktioniert und das reicht mir erstmal. Noch mal danke an allen die mir dabei geholfen haben.
bitmaster