SWAP DE DEUX VARIABLES EN C++ / ASM

Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
- - Dernière réponse : BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
- 5 août 2006 à 00:02
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38766-swap-de-deux-variables-en-c-asm

Afficher la suite 
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
Il y a 2 pipelines sur Pentium.
; eax échange ecx
mov edx, eax
mov eax, ecx ; 1er cycle fini, pas de pénalité car EAX
nop ; surement autre chose à faire dans le prog, mais bon...
mov ecx, edx

Michael Abrash a écrit des chapitres passionnants sur le sujet, s'y reporter.
zeratul67
Messages postés
98
Date d'inscription
mardi 9 avril 2002
Statut
Membre
Dernière intervention
11 mai 2008
-
C'est vrai que pour les débutants, cela peut induire en erreur. Malgré tout, les commentaires peuvent être intéressants, avec entre autre l'URL donnée par vecchio56 et les information sur la façon d'écrire de l'ASM dans du code C (les deux syntaxe différentes).
Finalement, histoire ce clore au cas où tout cela serait supprimé, qu'est-ce qui est le plus rapide, sans utiliser l'ASM ? Les mov avec variable temporaire, les xor ?

J'ai également un peu de mal à te comprendre BruNews, la série de mov qui permet l'échange est parallelizable ?!
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
Ce genre de "source" est à oublier, ne peut qu'induire un débutant en erreur.
L'optimisation asm ne vaut que si la fonction est complet en asm, autrement c'est tout le contraire qui est obtenu. Il est impossible de savoir si le compilo a créé des variables sur pile ou si les valeurs sont tenues en registre, en ce cas des PUSH POP sont une totale aberration quand 3 MOV suffisaient.
XCHG est obsolète depuis le 486 et à bannir depuis le pentium avec lequel les MOV sont parallélisables.

Cette ineptie disparaitra samedi soir au plus tard.
vecchio56
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7 -
En général quand on code en C, on se moque des flags du CPU
Mais dans ton exemple ya pas d'overflow a mon avis, car 0xFFFFFFFE représente -2 (donc a+b=0 et non 1)
vinc1008881
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
-
j'en sais rien, peut-etre que sa marche avec toute les valeurs, mais ce que je peux dire c'est que le flag of du registre flags du CPU sera peut-etre à 1 à cause de cet overflow.