Indicateur de parité
Dans un processeur d'ordinateur l'indicateur de parité est un bit unique dans le registre d'état permettant d'indiquer la parité du résultat de la dernière opération arithmétique ou de décalage ou de rotation. Plus précisément, cette indicateur est positionné à 1
si la somme des bits de ce résultat est paire, à 0
si elle est impaire.
Par exemple, dans le cas où le résultat de la dernière opération était 26 (Octet 00011010 en binaire), l'indicateur de parité devrait être à 0
puisque le nombre de bits à 1
est impaire. Inversement, si le résultat avait été 10 (Octet 00001010 en binaire) alors l'indicateur de parité devrait être à 0
.
Processeurs X86
Concernant les processeurs X86, l'indicateur de parité reflète uniquement la parité de la somme des bits de l'octet de pois le plus faible du résultat[1],[2].
Si on se réfère au manuel[2] de l'Intel 80386, la série des processeurs x86 met l'indicateur de parité selon le résultat des instructions suivantes :
- Toutes les opérations arithmétiques ;
- Les instructions de comparaison (équivalent aux instructions de soustractions sans stocker le résultat) ;
- Instructions logiques -
XOR
,AND
,OR
; - L'instruction TEST (équivalent aux /instructions
AND
sans stocker le résultat).
Pour ce qui est des branchements conditionnels, l'indicateur de parité est mis en œuvre au travers des instructions JPO (branchement si l'indicateur est à 0
) et JNP (branchement si l'indicateur est à 1
). L'indicateur de parité peut aussi être lu indirectement via les instructions de sauvegarde d'état comme PUSHF ou PUSHAF qui poussent sur la pile le ou les registres d'état.
Le test d'un indicateur de l'unité de calcul en virgule flottante (UVF/FPU) est une des raisons qui amène à tester l'indicateur de parité[3]. Pour les processeurs x86, l'unité de calcul en virgule flottante fournit quatre indicateurs (C0, C1, C2, C3) qui ne peuvent pas être testés directement. Pour les tester, il convient de préalablement les copier dans le registre d'état. L'indicateur C0 est alors placé dans l'Indicateur de retenue, l'indicateur C2 dans l'indicateur de parité et l'indicateur C3 dans l'Indicateur de zéro. Cet indicateur C2 est positionné à 1
dès lors que l'unité de calcul en virgule flottante échoue sur une comparaison entre des valeurs en virgule flottante avec les instructions FUCOM.
Références
- (en) Stefan Heule, Eric Schkufza, Rahul Sharma, Alex Aiken, Stratified Synthesis: Automatically Learning the x86-64 Instruction Set, Association for computing machinery, (ISBN 978-1-4503-4261-2, lire en ligne), p. 6.
- (en) « Intel® 64 and IA-32 Architectures Software Developer Manuals », sur Intel, (consulté le ), p. 16.
- (en) « Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture », sur Intel, , p. 97–98
Voir aussi
- Portail de l’informatique