Cycles de mov

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 15 sept. 2004 à 12:54
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 - 23 nov. 2004 à 13:53
Je me demandais si les instructions suivantes étaient équivalentes en termes de performances, ou si certaines d'entres elles demandaient plus de cycles:
[code]
mov eax, edx
mov eax, dword ptr[esi]
mov eax, dword ptr[esi + 4]
[code]
Merci de m'éclairer, car cela me semble bizarre notamment de les 2 dernières prennent le même nombre de cycles...
AU fait, j'aimerais aussi savoir où on peut connaitre le nombre de cycles d'une instruction donnée, car cela ne semble as apparaitre dans ces chers manuel d'Intel.

3 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
15 sept. 2004 à 13:09
salut,

tout est indiqué dans le manuel intel dont voici un extrait pour l'instruction mov:

Opcode|Instruction|Clocks|Description
88/r|MOV r/m8,r8|2/2|Move byte register to r/m byte
89/r|MOV r/m16,r16|2/2|Move word register to r/m word
89/r|MOV r/m32,r32|2/2|Move dword register to r/m dword
8A/r|MOV r8,r/m8|2/4|Move r/m byte to byte register
8B/r|MOV r16,r/m16|2/4|Move r/m word to word register
...

r,r16,r32 sont les registres généraux.
m8,m16,m32 sont les acces memoire.
c8,c16,c32 sont les constantes.

le nombre de clocks est indiqué dans le manuel.
la methode de calcul des clocks, pour chaque instruction est donné précisement.

@++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
20 sept. 2004 à 09:52
re,

c'est incomplet, regarde ce chapitre aussi: 17.2.2.3 Clocks

@++
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
23 nov. 2004 à 13:53
C'est normal

déjà un mov de registre à registre (
mov eax, edx
) sera plus rapide qu'un mov reg/mem car dans ce cas il faudra un cycle de bus pour aller checher l'opérande en mémoire contrairement aux registres qui sont internes au processeur.

Maintenant pour la diff entre les 2 dernières, il y a peut de différences car il me semble qu'un
mov eax, [esi]
est traité comme un
mov eax, [esi+0]


Core Breaker :)
0