Retour à l'accueil | Contact : etienne"point"sauvage"at"gmail.com | Retour à la liste des instructions. |
BOUND | check array BOUNDsvérifie les BOrds d'UN tableau |
Vérifie si un index de tableau (premier opérande) est à l'intérieur des limites d'un tableau (second opérande). L'index de tableau est un entier signé dans le registre spécifié. Si l'attribut de taille d'opérande est 16, l'opérande tableau est un emplacement mémoire contenant une paire d'entiers en format mot signé; si l'attribut de taille d'opérande est 32, l'opérande tableau est un emplacement mémoire contenant une paire d'entiers en format double-mot signé. Le premier mot ou double-mot spécifie la limite inférieure du tableau et le second mot ou double-mot en spécifie la limite supérieure.
L'index de tableau doit être supérieur ou égal à la limite inférieure et inférieur ou égal à la limite supérieure. Si l'index n'est pas inclus dans les limites spécifiées, le processeur génère une exception de limite dépassée (BOUND Range exceeded) : #BR.
Les limites d'un tableau, consistant en deux mots ou double-mots contenant les limites basse et haute d'un tableau, réside habituellement dans une structure de données juste avant le tableau lui-même, rendant les limites adressables par un décalage constant par rapport au début du tableau. Avec l'adresse d'un tableau dans un registre, cette pratique réduit le nombre de cycles du bus nécessaires pour déterminer l'adresse effective des limites du tableau.
L'utilisation de cette instruction en mode 64-bit génère une exception d'opcode invalide.
Mnémonique | Opcode | Description |
BOUND reg16, mem16&mem16 | 62 /r | Teste si un index de tableau de 16 bits est inclus dans les limites spécifiées par les deux valeurs de 16 bits contenues dans mem16&mem16. (Invalide en mode 64-bit.) |
BOUND reg32, mem32&mem32 | 62 /r | Teste si un index de tableau de 32 bits est inclus dans les limites spécifiées par les deux valeurs de 32 bits contenues dans mem32&mem32. (Invalide en mode 64-bit.) |
INT, INT3, INTO
ID | VIP | VIF | AC | VM | RF | NT | IOPL | OF | DF | IF | TF | SF | ZF | AF | PF | CF |
21 | 20 | 19 | 18 | 17 | 16 | 14 | 13-12 | 11 | 10 | 9 | 8 | 7 | 6 | 4 | 2 | 0 |
Note : les bits 31-22, 15, 5, 3 et 1 sont réservés. Un drapeau mis à 1 ou nettoyé à 0 est M (modifié). Les drapeaux non affectés sont blancs. Les drapeaux non définis sont U. |
Exception | Réel | 8086 virtuel | Protégé | Cause de l'exception |
Limite dépassée, #BR | X | X | X | Une limite a été dépassée. |
Opcode invalide, #UD | X | X | X | L'opérande source était un registre. |
X | Cette instruction a été exécutée en mode 64-bit. | |||
Pile, #SS | X | X | X | Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique. |
Protection générale, #GP | X | X | X | Une adresse mémoire dépasse la limite d'un segment de données. | X | Un segment de données NULL a été utilisé pour référencer la mémoire. |
Faute de page, #PF | X | X | Une faute de page résulte de l'exécution de l'instruction. | |
Vérification d'alignement, #AC | X | X | Une référence mémoire non alignée a été faite pendant que la vérification d'alignement était active. |
Source : AMD x86-64 Architecture PROGRAMMER'S MANUAL Volume 3 General-Purpose and System Instructions, 24594 Rev. 3.02 August 2002.
Retour à l'accueil | Contact : etienne"point"sauvage"at"gmail.com | Retour à la liste des instructions |