Assembleur 80x86 |
LDS |
INTEL 8088+ |
Load in DS |
Syntaxe
LDS opérande_cible,opérande_source
|
Description
Cette instruction permet de copier une adresse de mémoire contenu sur 32 bits dans la paire de registre de segment DS et dans un registre d'offset spécifié.
Algorithme
Registre d'offset ← Source
Registre de segment DS ← Source + 2
|
Mnémonique
Instruction |
Opcode |
Description |
LDS reg16, mem16:16 |
C5h /r |
Charge le DS:reg16 avec un pointeur long dans la mémoire. Invalide en mode 64 bits. |
LDS reg32, mem16:32 |
C5h /r |
Charge le DS:reg32 avec un pointeur long dans la mémoire. Invalide en mode 64 bits. |
Cycles d'horloge
Opérande |
Cycle d'horloge |
Taille en octets |
8086 |
80286 |
80386 |
80486 |
reg16,reg32 |
16+EA |
7 |
7 |
6 |
2 à 4 |
reg,reg (PM) |
- |
- |
22 |
12 |
5 à 7 |
Exceptions
Message |
Mode réel |
Virtuel 8086 |
Mode protégé |
Description |
#UD(Opcode invalide) |
X |
X |
X |
L'opérande source est un registre. |
|
|
X |
Cette instruction est exécuté en mode 64-bits. |
#NP(Sélecteur) |
|
|
X |
Le registre DS, ES, FS ou GS est chargé avec un sélecteur de segment non-nulle et le segment est marqué comme non présent. |
#SS(Pile) |
X |
X |
X |
Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique |
#SS(Sélecteur) |
X |
X |
X |
Le registre SS est chargé avec un sélecteur de segment non-nulle et le segment est marqué comme non présent. |
#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 |
Un segment de données nulle est utilisé comme référence mémoire |
#GP(Sélecteur) |
X |
X |
X |
Un registre de segment est chargé, mais le descripteur de segment dépasse la limite du descripteur de la table. |
X |
X |
X |
Un registre de segment est chargé et le bit TI de sélecteur de segment est fixé, mais le sélecteur LDT est un sélecteur nulle. |
X |
X |
X |
Le registre SS est chargé avec un sélecteur de segment nulle dans un mode 64-bits ou avec CPL = 3. |
X |
X |
X |
Le registre SS est chargé avec un sélecteur de segment RPL et le descripteur de segment DPL n'est pas égale au CPL. |
X |
X |
X |
Le registre SS est chargé et le pointeur de segment n'est pas dans un segment de données écrivable. |
X |
X |
X |
Le registre DS, ES, FS ou GS n'est pas chargé et le segment pointe sur des données ou un segment de code non-conforme, mais le RPL ou CPL est supérieur au DPL. |
X |
X |
X |
Le registre DS, ES, FS ou GS n'est pas chargé et le segment pointe sur des données ou un segment de code en lecture. |
#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é |
Exemple
L'exemple suivant permet de copier le contenu de la mémoire au déplacement 4326h dans le registre DS vers le registre BL, le contenu de 4327h vers le registre BH.
Le contenu à un déplacement de 4328h et 4329h est copié dans le registre DS :
- LDS BX,[4326h]
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 817
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 409
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 143.
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 642 à 646.
Dernière mise à jour : Lundi, le 1 septembre 2014