Retour à l'accueil Contact : etienne"point"sauvage"at"gmail.com Retour à la liste des instructions.

BOUND

check array BOUNDs


vé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émoniqueOpcodeDescription
BOUND reg16, mem16&mem1662 /rTeste 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&mem3262 /rTeste 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.)

Instructions apparentées

INT, INT3, INTO

rFLAGS affectés

IDVIPVIFACVMRFNTIOPLOFDFIFTFSFZFAFPFCF
2120191817161413-1211109876420
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.

Exceptions

ExceptionRéel8086
virtuel
ProtégéCause de l'exception
Limite dépassée, #BRXXXUne limite a été dépassée.
Opcode invalide, #UDXXXL'opérande source était un registre.
XCette instruction a été exécutée en mode 64-bit.
Pile, #SSXXXUne adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique.
Protection générale, #GPXXX
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, #PFXXUne faute de page résulte de l'exécution de l'instruction.
Vérification d'alignement, #ACXXUne 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