XOR'ing a register with itself is the idiom for zeroing it out. Why not sub?
L'article explique que xor eax, eax est l'instruction la plus compacte pour mettre un registre à zéro sur x86, car elle évite d'encoder une constante de quatre octets. Il compare xor eax, eax à sub eax, eax et montre que les deux s'encodent de la même manière et ont des performances similaires, mais que xor laisse le drapeau AF indéfini tandis que sub le remet à zéro. L'auteur propose une explication historique par effet de masse : un léger avantage initial de xor aurait conduit les compilateurs et les programmeurs à le privilégier, renforçant ainsi son adoption. Intel a ajouté dans le décodage une détection spéciale pour xor r,r et sub r,r qui renomme la destination vers un registre interne nul et élimine l'exécution, rompant aussi les dépendances. L'article mentionne des inquiétudes selon lesquelles certains fabricants pourraient n'implémenter que le cas spécial pour xor, des anecdotes personnelles et le fait qu'Itanium dispose d'un registre zéro dédié qui rend ce tour de passe-passe inutile.