CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[ASM] xor eax, eax lu mov eax, 0 ?

Clad-HeartLess
Clad-HeartLess
Niveau 9
26 mars 2013 à 22:14:25

Bonjour amis codeurs,

récemment j'ai vu un code assembleur x86 contenant :

xor eax, eax

il était expliqué à juste titre que le OU EXCLUSIF de deux fois la meme chose faisait 0, dans ce cas pourquoi ne pas faire directmeent :

mov eax, 0

?

Y-a-t-il une optimisation avec xor ?
Quelle est vraiment la différence ? :(

Pseudo supprimé
Pseudo supprimé 26 mars 2013 à 22:28:20

J'imagine que tu grattes de la lecture en RAM en ne tapant que sur le registre et simplifie ça en passage à 0. Sans compter que tu dois bien gagner un byte ou deux en taille de programme.

Pseudo supprimé
Pseudo supprimé 26 mars 2013 à 22:29:38

Après j'ai tendance à penser qu'écrire ça à la main relève de la sodomie de drosophiles. Par contre, ça a parfaitement sa place dans un compilateur et dans des bricoles comme un -o6 :D

Clad-HeartLess
Clad-HeartLess
Niveau 9
26 mars 2013 à 22:30:48

"Sans compter que tu dois bien gagner un byte ou deux en taille de programme."

Donc xor est plus accessible que l'opération mov ?
J'ai vu aussi sur stackoverflow qu'un mec disait que c'était plus rapide un xor Z,Z qu'un mov Z, Z

Mais j'aimerais savoir qu'est ce qui fait exactement que c'est comme ça. :(

Clad-HeartLess
Clad-HeartLess
Niveau 9
26 mars 2013 à 22:31:51

Raspberry-Pi
Posté le 26 mars 2013 à 22:29:38
Après j'ai tendance à penser qu'écrire ça à la main relève de la sodomie de drosophiles. Par contre, ça a parfaitement sa place dans un compilateur et dans des bricoles comme un -o6 :D

Jerry :noel:

C'est à pur titre informatif vu que j'étudie un peu l'ASM x86 pour me divertir

Clad-HeartLess
Clad-HeartLess
Niveau 9
26 mars 2013 à 22:36:43

0: b8 00 00 00 00 mov $0x0,%eax
5: 31 c0 xor %eax,%eax

Ah ben voilà la réponse :noel:

L'instruction mov est carrément plus longue que le xor et apparemment ça prend plus de place en cache.

Pseudo supprimé
Pseudo supprimé 26 mars 2013 à 22:36:49

Faudrait regarder dans la référence X86 pour voir comment se convertissent l'un et l'autre. Dans une vie antérieure, je codais en ASM68k directement en langage machine avec le bouquin à côté, ça doit être possible de trouver la même chose en X86 (me contentais de l'assembleur avec cui-là).

Pour le xor plus rapide que le mov, électroniquement, ça s'explique certainement assez facilement. Le xor ne fait qu'inverser des bits, le mov va chopper une zone mémoire et va la mettre à un endroit donner, certainement en faisant un tas de contrôles jolis et mignons.

Pseudo supprimé
Pseudo supprimé 26 mars 2013 à 22:37:12

Voilà qui est fait :p

Clad-HeartLess
Clad-HeartLess
Niveau 9
26 mars 2013 à 22:37:30

"Pour le xor plus rapide que le mov, électroniquement, ça s'explique certainement assez facilement. Le xor ne fait qu'inverser des bits, le mov va chopper une zone mémoire et va la mettre à un endroit donner, certainement en faisant un tas de contrôles jolis et mignons."

Merci pour cet éclaircissement :ok:

PocoIo
PocoIo
Niveau 10
26 mars 2013 à 22:40:57

C'est dur de répondre à une question comme celle-là car cela implique de connaitre en détail l'architecture du processeur utilisé.

Les performances peuvent varier d'un processeur à l'autre.

Pseudo supprimé
Pseudo supprimé 26 mars 2013 à 22:41:42

Le truc le plus évolué que j'ai codé en x86, c'était un casse brique avec "flou de vitesse". Ah, et les briques rayonnaient des couleurs de l'arc-en-ciel lors de leur destruction. En 68k, j'avais commencé à reprogrammer prince of persia 2. C'était il y a une douzaine d'années sur ti92, j'ai arrêté par manque de mémoire : j'avais juste un niveau et le rpince qui crapahutait dedans. C'est fou ce qu'un sprite animé peut bouffer en mémoire et c'est fou à quel point on remplis vite 128k de mémoire :D

J'approuve ta quête de l'assembleur :)

Pseudo supprimé
Pseudo supprimé 26 mars 2013 à 22:42:53

Pocoio :d) Pas tant que ça sur ce genre d'opérations.

Clad-HeartLess
Clad-HeartLess
Niveau 9
26 mars 2013 à 22:45:10

L'assembleur me fascine :noel:

Pseudo supprimé
Pseudo supprimé 26 mars 2013 à 22:50:52

L'assembleur, c'est fascinant.
Tu vas finir par te mettre à l'électronique :D

Clad-HeartLess
Clad-HeartLess
Niveau 9
27 mars 2013 à 13:17:11

L'électronique ça fait déjà un petit moment :noel:

Pseudo supprimé
Pseudo supprimé 27 mars 2013 à 14:56:54

Comme quoi...

Clad-HeartLess
Clad-HeartLess
Niveau 9
27 mars 2013 à 15:57:35

Merci pour le lien j'avais entendu parler de ça mais là c'est mieux expliqué.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware