Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

1

02.03.2008, 21:57

Kurze frage zur CPU geschwindigkeit

Hi,

wie die meisten im channel mitgekriegt haben, lerne ich seit einiger zeit asm für den intel 386 und es macht mir wahnsinnig spass(Danke auch an dot für seine hilfe :D ).

So nun will ich aber zur sache kommen:
Welche Anweisung ist auf der oben genannten CPU(und auch auf neueren CPUs) schneller?

mov eax, 0

oder:
xor eax, eax

Klar ist, dass die 2. zumindest kürzeren code erzeugt, aber das heisst ja noch nichts, wie "enter" und "leave" eindrucksvoll beweisen xD.

Socke

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

02.03.2008, 22:29

Kürzer kann auch schneller heißen, weil dann mehr Maschineninstruktionen in den Cache passen.

Sicaine

unregistriert

3

03.03.2008, 03:09

Naja so pauschal kann man das garnicht beantworten. Viele Instruktionen sind in heutigen CPU's hoch optimiert.

Vielleicht hilft dir ja fuer diese Frage AMDs CodeAnalyser oder Intels VTune

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

4

03.03.2008, 10:21

mov eax, 0

Da muss erstma der Wert 0 in eins der Register gejagt werden, dann wird er nach eax verschoben.

xor eax, eax

Die Rechnung wird direkt auf die Register angewandt und Gott sei Dank ist eax auch das Ergebnisregister. Also geht das schon schneller. Ist aber nur ein unterschied von wenigen p-Secs.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

03.03.2008, 11:26

Zitat von »"rootnode"«

mov eax, 0

Da muss erstma der Wert 0 in eins der Register gejagt werden, dann wird er nach eax verschoben.

xor eax, eax

Die Rechnung wird direkt auf die Register angewandt und Gott sei Dank ist eax auch das Ergebnisregister. Also geht das schon schneller. Ist aber nur ein unterschied von wenigen p-Secs.


Ha! Das rechnet sich aber! ;) Bei mov eax, 0 müssen ja noch 4 Bytes abgerufen werden (das ist ja so elendig langsam. Bei 57.063.000.000.000.000.000 Instruktionen pro psec [entspricht in etwa: 3,33 Ghz Quadcore von Intel] macht sich das gleich bemerkbar!)

Außerdem, nicht zu vergessen, die Platzverschwendung. Ein mov eax, 0 benötigt ja immerhin ganze drei Byte mehr als ein einfaches xor eax, eax.

Also! Hier kann optimiert werden ohne Ende! :badgrin:
@D13_Dreinig

6

12.04.2008, 23:17

Ich hatte da mal nen Buch, da stand zu jedem ASM-Befehl dessen benoetigte Taktzahl. Vielleicht solltest du dir sowas aus dem Netz fuer deinen Prozessor ziehen, als Datenblatt. Das Laden des Befehls scheint nicht so problematisch, da sowieso alles gepiped wird.

Werbeanzeige