mov vs. xor
-
KLUGSCHEISSER !!
-
wenn 2 mal xor gemacht wird bzw. mov, würde man mehr speicher bei mov (bzw mehr 4bytes) gehollen. könnte langsammer sein.
rapso->greets();
-
mov hat einen entscheidenden Vorteil gegenüber xor, da dort alle Flags ihren Wert behalten.
aus einer schon etwas älteren Intel Doku:
MOV - Move Byte or Word
Usage: MOV dest,src
Modifies flags: NoneCopies byte or word from the source operand to the destination
operand. If the destination is SS interrupts are disabled except
on early buggy 808x CPUs. Some CPUs disable interrupts if the
destination is any of the segment registersClocks Size
Operands 808x 286 386 486 Bytesreg,reg 2 2 2 1 2
mem,reg 9+EA 3 2 1 2-4 (W88=13+EA)
reg,mem 8+EA 5 4 1 2-4 (W88=12+EA)
mem,immed 10+EA 3 2 1 3-6 (W88=14+EA)
reg,immed 4 2 2 1 2-3
mem,accum 10 3 2 1 3 (W88=14)
accum,mem 10 5 4 1 3 (W88=14)
segreg,reg16 2 2 2 3 2
segreg,mem16 8+EA 5 5 9 2-4 (W88=12+EA)
reg16,segreg 2 2 2 3 2
mem16,segreg 9+EA 3 2 3 2-4 (W88=13+EA)
reg32,CR0/CR2/CR3 - - 6 4
CR0,reg32 - - 10 16
CR2,reg32 - - 4 4 3
CR3,reg32 - - 5 4 3
reg32,DR0/DR1/DR2/DR3 - 22 10 3
reg32,DR6/DR7 - - 22 10 3
DR0/DR1/DR2/DR3,reg32 - 22 11 3
DR6/DR7,reg32 - - 16 11 3
reg32,TR6/TR7 - - 12 4 3
TR6/TR7,reg32 - - 12 4 3
reg32,TR3 3
TR3,reg32 6XOR - Exclusive OR
Usage: XOR dest,src
Modifies flags: CF OF PF SF ZF (AF undefined)Performs a bitwise exclusive OR of the operands and returns
the result in the destination.Clocks Size
Operands 808x 286 386 486 Bytesreg,reg 3 2 2 1 2
mem,reg 16+EA 7 6 3 2-4 (W88=24+EA)
reg,mem 9+EA 7 7 2 2-4 (W88=13+EA)
reg,immed 4 3 2 1 3-4
mem,immed 17+EA 7 7 3 3-6 (W88=25+EA)
accum,immed 4 3 2 1 2-3Trotzdem sollte man xor imho verwenden, sofern Flags keine Rolle spielen.
-
ich würd zu mov neigen (ausser man ist voll auf kleine programme angewiesen) weil wie gesagt der unterschied nimmer so gross bzw. weil mehrere movs hintereinander sogar schneller sind... und dann kommt noch das argument das das mov irgendwas,0 in meinen augen besser zeigt was gemacht wird
-
letzteres ist kein Argument, wenn du Code willst, der besser das widerspiegelt was du machen willst, mußt du eine Hochsprache nehmen.
-
genau aus dem grund schreibe ich extra unübersichlichen c code weil für lesbaren code ja c++ vorhanden ist.
-
willst du mir damit sagen, dass du Assembler für eine problemorientierte Sprache hältst?
-
es ging mir darum das, wenn man kein klares urteil fällen kann was von beidem schneller is. das man auf andere kriterien zurückgreiffen muss und dann finde ich das sinnvoll...
-
Moin, Moin...
Mag sein, dass ich etwas nicht so ganz richtig verstanden habe bezüglich Optimierung, aber macht es heutzutage wirklich einen Unterschied, ob ich ein Register mit mov oder mit xor lösche? In früheren Zeiten mag das ein Frage gewesen sein, über die sich nachzudenken lohnte. Heute dürfte der Unterschied wohl kaum ins Gewicht fallen. Auch der Speicherplatzbedarf ist doch wohl kein Argument für oder gegen eine der beiden Möglichkeiten. Wenn mein Programm 100 KB Speicher nutzt, ist ein gespartes Byte doch irgendwie irrelevant. Und ob ich meiner Hyper-Mega-CPU mit 2 GHz zwei Taktzyklen erspare, ist wohl auch eher unwichtig. Gibt es nicht wichtigere und lohnendere Optimierungsansätze?
Ciao...
-
hey Kal El:
Prozessoren stecken nicht nur in deinem PC...
-
Original erstellt von Kal El:
**Und ob ich meiner Hyper-Mega-CPU mit 2 GHz zwei Taktzyklen erspare, ist wohl auch eher unwichtig. Gibt es nicht wichtigere und lohnendere Optimierungsansätze?
**Wenn der Code nur einmal aufgerufen wird ja. Wenn der Betreffende Algorithmus aber eine Schleife enthält, die 10 Milliarden mal aufgerufen wird und der Inhalt der Schleife nur 20 Takte lang ist, nein.
-
Original erstellt von Kal El:
Wenn mein Programm 100 KB Speicher nutzt, ist ein gespartes Byte doch irgendwie irrelevant. Und ob ich meiner Hyper-Mega-CPU mit 2 GHz zwei Taktzyklen erspare, ist wohl auch eher unwichtig. Gibt es nicht wichtigere und lohnendere Optimierungsansätze?Natürlich sind 2 Takte irgend wo rauszuholen nicht welt bewegend und es ist auch nicht vernünftig, dafür irgend wo inline Assembler oä. einzusetzen. Aber davon auszugehen, dass man eine 2GHZ CPU hat oder man 1GB RAM für ein Appel und ein Ei bekommt, ist volkommen falsch! Heute benutzen Leute Geräte, die von der Leistung so hochgepusht wurden (oft an falscher Stelle, anstelle die dumme x86 Architektur zu ersetzen, hat man einfach die MHZ Schraube hochgedreht, sieht auch viel toller aus... Ich kann in einen Trabbi auch einen Porsche Motor einbauen, ist aber auch nicht das ware), als bessere Schreibmaschine und warum das alles? Weil sich Firmen denken, ach Computer sind so billig geworden. Es gibt ein sehr verbreites OS, was alle 3 Jahre in einer neuen Version rauskommt, idr. mit minimalen Änderungen, aber trotzdem deutlich höhere Hardware Anforderungen hat. Den Leuten werden Textprogramme forgesetzt, von denen sie vielleicht 5% nutzen und mit dem Rest total überfordert sind.
Die NASA hat es mir 32KB RAM in den Apollo Kapseln geschafft Leute sicher zum Mond zu bringen! Wenn ich heute einen kleinen Satz tippen will, soll ich mir gleich 256MB RAM kaufen!
Ein Marsroboter hatte eine 80C85 CPU mit 176KB PROM und 576KB RAM und konnte damit nicht nur sich selbst steuern, sondern konnte auch Hochauflösende Aufnahmen und Wissenschaftliche Daten senden.
Was wurde falsch gemacht?