Microprocesseur - 8086 jeux d'instructions

Le microprocesseur 8086 prend en charge 8 types d'instructions -

  • Instructions de transfert de données
  • Instructions arithmétiques
  • Instructions de manipulation de bits
  • Instructions de chaîne
  • Instructions de transfert d'exécution de programme (instructions de branche et de boucle)
  • Instructions de contrôle du processeur
  • Instructions de contrôle d'itération
  • Instructions d'interruption

Parlons maintenant de ces jeux d'instructions en détail.

Instructions de transfert de données

Ces instructions sont utilisées pour transférer les données de l'opérande source vers l'opérande de destination. Voici la liste des instructions sous ce groupe -

Instruction pour transférer un mot

  • MOV - Utilisé pour copier l'octet ou le mot de la source fournie vers la destination fournie.

  • PPUSH - Utilisé pour mettre un mot en haut de la pile.

  • POP - Utilisé pour obtenir un mot du haut de la pile à l'emplacement indiqué.

  • PUSHA - Utilisé pour mettre tous les registres dans la pile.

  • POPA - Utilisé pour obtenir des mots de la pile vers tous les registres.

  • XCHG - Utilisé pour échanger les données de deux endroits.

  • XLAT - Utilisé pour traduire un octet en AL en utilisant une table en mémoire.

Instructions pour le transfert des ports d'entrée et de sortie

  • IN - Utilisé pour lire un octet ou un mot du port fourni vers l'accumulateur.

  • OUT - Utilisé pour envoyer un octet ou un mot de l'accumulateur vers le port fourni.

Instructions pour transférer l'adresse

  • LEA - Utilisé pour charger l'adresse de l'opérande dans le registre fourni.

  • LDS - Utilisé pour charger le registre DS et d'autres registres fournis à partir de la mémoire

  • LES - Utilisé pour charger le registre ES et tout autre registre fourni à partir de la mémoire.

Instructions pour transférer les registres d'indicateurs

  • LAHF - Utilisé pour charger AH avec l'octet de poids faible du registre d'indicateur.

  • SAHF - Utilisé pour stocker le registre AH dans l'octet bas du registre d'indicateur.

  • PUSHF - Utilisé pour copier le registre des drapeaux en haut de la pile.

  • POPF - Utilisé pour copier un mot en haut de la pile dans le registre des indicateurs.

Instructions arithmétiques

Ces instructions sont utilisées pour effectuer des opérations arithmétiques telles que l'addition, la soustraction, la multiplication, la division, etc.

Voici la liste des instructions sous ce groupe -

Instructions pour effectuer l'ajout

  • ADD - Utilisé pour ajouter l'octet fourni à l'octet / mot au mot.

  • ADC - Utilisé pour ajouter avec carry.

  • INC - Utilisé pour incrémenter l'octet / mot fourni de 1.

  • AAA - Utilisé pour ajuster ASCII après l'addition.

  • DAA - Utilisé pour ajuster la décimale après l'opération d'addition / soustraction.

Instructions pour effectuer une soustraction

  • SUB - Utilisé pour soustraire l'octet de l'octet / mot du mot.

  • SBB - Utilisé pour effectuer une soustraction avec emprunt.

  • DEC - Utilisé pour décrémenter l'octet / mot fourni de 1.

  • NPG - Utilisé pour annuler chaque bit de l'octet / mot fourni et ajouter le complément 1/2.

  • CMP - Utilisé pour comparer 2 octets / mot fournis.

  • AAS - Utilisé pour ajuster les codes ASCII après la soustraction.

  • DAS - Utilisé pour ajuster la décimale après la soustraction.

Instruction pour effectuer la multiplication

  • MUL - Utilisé pour multiplier l'octet non signé par octet / mot par mot.

  • IMUL - Utilisé pour multiplier l'octet signé par octet / mot par mot.

  • AAM - Utilisé pour ajuster les codes ASCII après la multiplication.

Instructions pour effectuer la division

  • DIV - Utilisé pour diviser le mot non signé par octet ou mot double non signé par mot.

  • IDIV - Utilisé pour diviser le mot signé par octet ou double mot signé par mot.

  • AAD - Utilisé pour ajuster les codes ASCII après la division.

  • CBW - Utilisé pour remplir l'octet supérieur du mot avec les copies du bit de signe de l'octet inférieur.

  • CWD - Utilisé pour remplir le mot supérieur du mot double avec le bit de signe du mot inférieur.

Instructions de manipulation de bits

Ces instructions sont utilisées pour effectuer des opérations impliquant des bits de données, c'est-à-dire des opérations telles que logique, décalage, etc.

Voici la liste des instructions sous ce groupe -

Instructions pour effectuer une opération logique

  • NOT - Utilisé pour inverser chaque bit d'un octet ou d'un mot.

  • AND - Utilisé pour ajouter chaque bit dans un octet / mot avec le bit correspondant dans un autre octet / mot.

  • OR - Utilisé pour multiplier chaque bit dans un octet / mot avec le bit correspondant dans un autre octet / mot.

  • XOR - Utilisé pour effectuer une opération OU exclusif sur chaque bit dans un octet / mot avec le bit correspondant dans un autre octet / mot.

  • TEST - Utilisé pour ajouter des opérandes pour mettre à jour les indicateurs, sans affecter les opérandes.

Instructions pour effectuer les opérations de quart

  • SHL/SAL - Utilisé pour décaler les bits d'un octet / mot vers la gauche et mettre zéro (S) dans les LSB.

  • SHR - Utilisé pour décaler les bits d'un octet / mot vers la droite et mettre zéro (S) dans les MSB.

  • SAR - Utilisé pour décaler les bits d'un octet / mot vers la droite et copier l'ancien MSB dans le nouveau MSB.

Instructions pour effectuer des opérations de rotation

  • ROL - Utilisé pour faire pivoter les bits d'octet / mot vers la gauche, c'est-à-dire MSB vers LSB et vers Carry Flag [CF].

  • ROR - Utilisé pour faire pivoter les bits d'octet / mot vers la droite, c'est-à-dire LSB vers MSB et Carry Flag [CF].

  • RCR - Utilisé pour faire pivoter les bits d'octet / mot vers la droite, c'est-à-dire LSB vers CF et CF vers MSB.

  • RCL - Utilisé pour faire pivoter les bits d'octet / mot vers la gauche, c'est-à-dire MSB vers CF et CF vers LSB.

Instructions de chaîne

String est un groupe d'octets / mots et leur mémoire est toujours allouée dans un ordre séquentiel.

Voici la liste des instructions sous ce groupe -

  • REP - Utilisé pour répéter l'instruction donnée jusqu'à CX ≠ 0.

  • REPE/REPZ - Utilisé pour répéter l'instruction donnée jusqu'à ce que CX = 0 ou zéro drapeau ZF = 1.

  • REPNE/REPNZ - Utilisé pour répéter l'instruction donnée jusqu'à ce que CX = 0 ou zéro drapeau ZF = 1.

  • MOVS/MOVSB/MOVSW - Utilisé pour déplacer l'octet / mot d'une chaîne à une autre.

  • COMS/COMPSB/COMPSW - Utilisé pour comparer deux octets / mots de chaîne.

  • INS/INSB/INSW - Utilisé comme chaîne / octet / mot d'entrée du port d'E / S à l'emplacement de mémoire fourni.

  • OUTS/OUTSB/OUTSW - Utilisé comme chaîne / octet / mot de sortie de l'emplacement de mémoire fourni vers le port d'E / S.

  • SCAS/SCASB/SCASW - Utilisé pour scanner une chaîne et comparer son octet avec un octet dans AL ou un mot de chaîne avec un mot dans AX.

  • LODS/LODSB/LODSW - Utilisé pour stocker l'octet de chaîne dans AL ou le mot de chaîne dans AX.

Instructions de transfert d'exécution du programme (instructions de branchement et de boucle)

Ces instructions sont utilisées pour transférer / dériver les instructions lors d'une exécution. Il comprend les instructions suivantes -

Instructions pour transférer l'instruction lors d'une exécution sans aucune condition -

  • CALL - Utilisé pour appeler une procédure et enregistrer son adresse de retour dans la pile.

  • RET - Permet de revenir de la procédure au programme principal.

  • JMP - Utilisé pour sauter à l'adresse fournie pour passer à l'instruction suivante.

Instructions pour transférer l'instruction lors d'une exécution avec certaines conditions -

  • JA/JNBE - Utilisé pour sauter si l'instruction supérieure / non inférieure / égale satisfait.

  • JAE/JNB - Utilisé pour sauter si l'instruction ci-dessus / pas en dessous satisfait.

  • JBE/JNA - Utilisé pour sauter si une instruction inférieure / égale / non supérieure satisfait.

  • JC - Utilisé pour sauter si porter le drapeau CF = 1

  • JE/JZ - Utilisé pour sauter si drapeau égal / zéro ZF = 1

  • JG/JNLE - Utilisé pour sauter si une instruction supérieure / non inférieure à / égale satisfait.

  • JGE/JNL - Utilisé pour sauter si supérieur / égal / non inférieur à l'instruction satisfait.

  • JL/JNGE - Utilisé pour sauter si l'instruction inférieure / non supérieure à / égale satisfait.

  • JLE/JNG - Utilisé pour sauter si inférieur / égal / sinon supérieur à l'instruction satisfait.

  • JNC - Utilisé pour sauter si aucun drapeau de report (CF = 0)

  • JNE/JNZ - Utilisé pour sauter sinon égal / zéro flag ZF = 0

  • JNO - Utilisé pour sauter si aucun drapeau de débordement OF = 0

  • JNP/JPO - Utilisé pour sauter sinon parité / parité impaire PF = 0

  • JNS - Utilisé pour sauter sinon signer SF = 0

  • JO - Utilisé pour sauter si le drapeau de débordement OF = 1

  • JP/JPE - Utilisé pour sauter si parité / parité même PF = 1

  • JS - Utilisé pour sauter si le drapeau de signe SF = 1

Instructions de contrôle du processeur

Ces instructions sont utilisées pour contrôler l'action du processeur en définissant / réinitialisant les valeurs d'indicateur.

Voici les instructions sous ce groupe -

  • STC - Utilisé pour définir le drapeau de retenue CF sur 1

  • CLC - Utilisé pour effacer / remettre le drapeau de report CF à 0

  • CMC - Utilisé pour mettre le complément à l'état de carry flag CF.

  • STD - Utilisé pour définir le drapeau de direction DF sur 1

  • CLD - Utilisé pour effacer / remettre le drapeau de direction DF à 0

  • STI - Utilisé pour mettre l'indicateur d'activation d'interruption à 1, c'est-à-dire activer l'entrée INTR.

  • CLI - Utilisé pour effacer l'indicateur d'activation d'interruption à 0, c'est-à-dire désactiver l'entrée INTR.

Instructions de contrôle d'itération

Ces instructions sont utilisées pour exécuter les instructions données plusieurs fois. Voici la liste des instructions sous ce groupe -

  • LOOP - Utilisé pour boucler un groupe d'instructions jusqu'à ce que la condition soit satisfaite, c'est-à-dire CX = 0

  • LOOPE/LOOPZ - Utilisé pour boucler un groupe d'instructions jusqu'à ce qu'il satisfasse ZF = 1 & CX = 0

  • LOOPNE/LOOPNZ - Utilisé pour boucler un groupe d'instructions jusqu'à ce qu'il satisfasse ZF = 0 & CX = 0

  • JCXZ - Utilisé pour sauter à l'adresse fournie si CX = 0

Instructions d'interruption

Ces instructions sont utilisées pour appeler l'interruption pendant l'exécution du programme.

  • INT - Utilisé pour interrompre le programme pendant l'exécution et l'appel du service spécifié.

  • INTO - Utilisé pour interrompre le programme pendant l'exécution si OF = 1

  • IRET - Utilisé pour revenir du service d'interruption au programme principal