Assembleur 80x86 | TEST |
---|---|
INTEL 8088+, x86-64 | Test |
Syntaxe
TEST opérandecible,opérandesource |
Description
Cette instruction permet d'effectuer un «Et binaire» sur une opérande cible sans modifier sa valeur et définit les drapeaux d'état SF, ZF et PF en fonction du résultat.
Remarque
- En mode 64 bits, l'utilisation d'un préfixe REX sous la forme REX.R permet d'accéder à des registres supplémentaires (R8 à R15). L'utilisation d'un préfixe REX sous la forme de REX.W favorise le fonctionnement à 64 bits.
Algorithme
MODULE TEST(opérandecible,opérandesource) TEMP ← opérandecible ∩ opérandesource SF ← MSB(TEMP) SI TEMP = 0 ALORS ZF ← 1 SINON ZF ← 0 FIN SI PF ← BitwiseXNOR(TEMP(0 à 7)) CF ← 0 OF ← 0 |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
TEST AL, imm8 | A8h ib | Effectue un test de «Et binaire» avec une valeur immédiate de 8 bits sur le registre AL et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST AX, imm16 | A9h iw | Effectue un test de «Et binaire» avec une valeur immédiate de 16 bits sur le registre AX et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST EAX, imm32 | A9h id | Effectue un test de «Et binaire» avec une valeur immédiate de 32 bits sur le registre EAX et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST RAX, imm32 | A9h id | Effectue un test de «Et binaire» avec une valeur immédiate de 32 bits sur le registre RAX et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST reg/mem8, imm8 | F6h /0 ib | Effectue un test de «Et binaire» avec une valeur immédiate de 8 bits sur l'opérande registre ou mémoire 8 bits et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST reg/mem16, imm16 | F7h /0 iw | Effectue un test de «Et binaire» avec une valeur immédiate de 16 bits sur l'opérande registre ou mémoire 16 bits et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST reg/mem32, imm32 | F7h /0 id | Effectue un test de «Et binaire» avec une valeur immédiate de 32 bits sur l'opérande registre ou mémoire 32 bits et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST reg/mem64, imm32 | F7h /0 id | Effectue un test de «Et binaire» avec une valeur immédiate de 32 bits sur l'opérande registre ou mémoire 64 bits et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST reg/mem8, reg8 | 84h /r | Effectue un test de «Et binaire» avec un registre de 8 bits sur l'opérande registre ou mémoire 8 bits et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST reg/mem16, reg16 | 85h /r | Effectue un test de «Et binaire» avec un registre de 16 bits sur l'opérande registre ou mémoire 16 bits et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST reg/mem32, reg32 | 85h /r | Effectue un test de «Et binaire» avec un registre de 32 bits sur l'opérande registre ou mémoire 32 bits et indique le résultat de la comparaison sur le registre des drapeaux. |
TEST reg/mem64, reg64 | 85h /r | Effectue un test de «Et binaire» avec un registre de 64 bits sur l'opérande registre ou mémoire 64 bits et indique le résultat de la comparaison sur le registre des drapeaux. |
Exceptions
Message | Mode réel | Virtuel 8086 | Mode protégé | Description |
---|---|---|---|---|
#SS(Pile non-canonique) | X | X | X | Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique |
#GP(Protection général) | X | X | X | Une adresse mémoire dépasse la limite du segment de données ou n'est pas canonique |
X | L'opérande de destination n'est pas dans un segment non écrivable | |||
X | Un segment de données nulle est utilisé comme référence mémoire | |||
#PF(Faute de page) | X | X | Une faute de page résultat de l'exécution de l'instruction | |
#AC(Vérifie l'alignement) | X | X | Un désalignement de la référence mémoire est effectué quand une vérification d'alignement est activé |
Exemples
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre le registre AL et la valeur 1 :
- TEST AL,1
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre le registre AX et la valeur 1 :
- TEST AX,1
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre le registre EAX et la valeur 1 :
- TEST EAX,1
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre le registre RAX et la valeur 1 :
- TEST RAX,1
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre le registre AL et le registre BL :
- TEST AL,BL
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre le registre AX et le registre BX :
- TEST AX,BX
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre le registre EAX et le registre EBX :
- TEST EAX,EBX
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre le registre RAX et le registre RBX :
- TEST RAX,RBX
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre l'emplacement EAX et le registre RBX :
- TEST [EAX],EBX
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre l'emplacement RAX et le registre RBX :
- TEST [RAX],RBX
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre l'adresse absolue et le registre EAX :
- TEST [01234ABC],EAX
L'exemple suivant permet d'effectuer une comparaison par «Et binaire» entre l'adresse d'un symbole et le registre EAX :
- TEST [UnSymbole],RAX
Voir également
Instruction assembleur 80x86 - Instruction AND
Instruction assembleur 80x86 - Instruction CMP
Mathématique - Algèbre de Boole - Table de vérité
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 838
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 418
AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions, Edition Advanced Micro Devices, Revision 3.14, September 2007, Publication No. 24594, page 241.
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 505 à 507.