Codes d'opération
Les codes d'opération en langage assembleur constituent la partie principale des programmes en langage assembleur et forment le champ d'opération de l'instruction. En général, ASM accepte tous les mnémoniques standard du micro-ordinateur Intel 8080, étant détaillés dans le manuel de programmation du langage d'assemblage Intel 8080. Les étiquettes sont facultatives sur chaque ligne d'entrée. Les opérateurs individuels sont brièvement répertoriés dans les sections suivantes par souci d'exhaustivité, bien que les manuels Intel doivent être référencés pour les détails exacts de l'opérateur. Dans les tableaux suivants, les valeurs de bit ont la signification suivante :
Symbole | Description |
---|---|
e3 | Représente une valeur de 3 bits dans l'intervalle de 0 à 7 pouvant être l'un des registres prédéfinis A, B, C, D, E, H, L, M, SP ou PSW. |
e8 | Représente une valeur de 8 bits dans l'intervalle de 0 à 255. |
e16 | Représente une valeur 16 bits dans l'intervalle de 0 à 65535. |
Ces expressions peuvent être formées à partir d'une combinaison arbitraire d'opérandes et d'opérateurs. Dans certains cas, les opérandes sont limités à des valeurs particulières dans l'intervalle autorisée, comme l'instruction PUSH. Ces cas sont notés au fur et à mesure qu'ils sont rencontrés.
Dans les sections suivante, chaque code d'opération est répertorié dans sa forme la plus générale, accompagné d'un exemple spécifique, d'une brève explication et de restrictions spéciales.
Sauts, appels et retours
Les instructions de saut, d'appel et de retour autorisent plusieurs formes différentes testant les drapeaux de condition définis dans l'unité centrale du micro-ordinateur 8080. Les formulaires sont présentés dans le tableau suivant :
Instruction | Valeur de bits | Exemple | Description |
---|---|---|---|
JMP | e16 | JMP L1 | Saute inconditionnellement à l'étiquette |
JNZ | e16 | JNZ L2 | Saute si la condition n'est pas zéro pour l'étiquette |
JZ | e16 | JZ 100H | Saute si la condition est zéro pour l'étiquette |
JNC | e16 | JNC L1+4 | Saut s'il n'y a pas de retenue à l'étiquette |
JC | e16 | JC L3 | Saute s'il y a une retenue de défini pour l'étiquette |
JPO | e16 | JPO $+8 | Saute si la parité est impaire pour l'étiquette |
JPE | e16 | JPE L4 | Saute si la parité est paire pour l'étiquette |
JP | e16 | JP GAMMA | Saute si le résultat est positif pour l'étiquette |
JM | e16 | JM A1 | Saute si moins pour l'étiquette |
CALL | e16 | CALL S1 | Appel le sous-programme sans condition |
CNZ | e16 | CNZ S2 | Appel le sous-programme sur une condition non zéro |
CZ | e16 | CZ 100H | Appel le sous-programme à l'état zéro |
CNC | e16 | CNC SI+4 | Appel le sous-programme si aucune retenue n'est définie |
CC | e16 | CC S3 | Appel le sous-programme si la retenue est défini |
CPO | e16 | CPO $+8 | Appel le sous-programme si la parité est impaire |
CPE | e16 | CPE $4 | Appel le sous-programme si parité paire |
CP | e16 | CP GAMMA | Appel le sous-programme si le résultat est positif. |
CM | e16 | CM b1$c2 | Appel le sous-programme si le drapeau est moins |
RST | e3 | RST 0 | Redémarrage programmé, équivalent à CALL 8*e3, sauf appel d'un octet. |
RET | Retour du sous-programme | ||
RNZ | Renvoie si un drapeau différent de zéro est défini | ||
RZ | Renvoie si le drapeau zéro est défini | ||
RNC | Retour si pas de retenue | ||
RC | Renvoie si le drapeau de retenue est défini | ||
RPO | Renvoie si la parité est impaire | ||
RPE | Renvoie si la parité est paire | ||
RP | Retour si résultat est positif | ||
RM | Renvoie si le drapeau moins est défini |
Instructions d'opérande immédiates
Plusieurs instructions sont disponibles chargeant des registres simple ou double précision ou des cellules mémoire simple précision avec des valeurs constantes, ainsi que des instructions effectuant des opérations arithmétiques ou logiques immédiates sur l'accumulateur (registre A). Le tableau suivant décrit les instructions d'opérande immédiat :
Instruction | Valeur de bits | Exemple | Description |
---|---|---|---|
MVI | e3,e8 | MVI B,255 | Déplacer les données immédiates vers le registre A, B, C, D, E, H, L ou M (mémoire) |
ADI | e8 | ADI 1 | Ajouter un opérande immédiat à A sans retenue |
ACI | e8 | ACI 0FFH | Ajouter un opérande immédiat à A avec retenue |
SUI | e8 | SUI L + 3 | Soustraire de A sans retenue inférieure |
SBI | e8 | SBI L AND 11B | Soustraire de A avec retenue inférieur |
ANI | e8 | ANI $ AND 7FH | Et logique A avec données immédiates |
XRI | e8 | XRI 1111$0000B | Ou exclusif A avec données immédiates |
ORI | e8 | ORI L AND 1+1 | Ou logique A avec données immédiates |
CPI | e8 | CPI 'a' | Compare A avec données immédiates, identique à SUI sauf que le registre A n'a pas été modifié. |
LXI | e3,e16 | LXI B, 100H | Charge immédiate étendue pour enregistrer la paire. e3 doit être équivalent à B, D, H ou SP. |
Instructions d'incrémentation et de décrémentation
Le 8080 fournit des instructions pour incrémenter ou décrémenter les registres à simple et double précision. Les instructions sont décrites dans le tableau suivant :
Instruction | Valeur de bits | Exemple | Description |
---|---|---|---|
INR | e3 | INR E | Registre d'incrémentation simple précision. e3 produit l'un des A, B, C, D, E, H, L, M. |
DCR | e3 | DCR A | Registre de décrémentation simple précision. e3 produit l'un des A, B, C, D, E, H, L, M. |
INX | e3 | INX SP | Paire de registres d'incrémentation à double précision. e3 doit être équivalent à B, D, H ou SP. |
DCX | e3 | DCX B | Paire de registres de décrémentation à double précision. e3 doit être équivalent à B, D, H ou SP. |
Instructions de déplacement des données
Les instructions déplaçant les données de la mémoire vers le microprocesseur et du microprocesseur vers la mémoire sont données dans le tableau suivant :
Instruction | Valeur de bits | Exemple | Description |
---|---|---|---|
MOV | e3,e3 | MOV A,B | Déplace les données vers l'élément le plus à gauche depuis l'élément le plus à droite. e3 produit l'un des A, B, C, D, E, H, L ou M. MOV M,M n'est pas autorisé. |
LDAX | e3 | LDAX B | Charge le registre A à partir de l'adresse calculée. e3 doit produire B ou D. |
STAX | e3 | STAX D | Enregistre le registre A dans l'adresse calculée. e3 doit produire B ou D. |
LHLD | e16 | LHLD L1 | Charge HL directement depuis l'emplacement e16. Charge à double précision sur H et L. |
SHLD | e16 | SHLD L5+x | Entrepose HL directement à l'emplacement e16. Entreposage à double précision de H et L dans la mémoire. |
LDA | e16 | LDA Gamma | Charge le registre A à partir de l'adresse e16. |
STA | e16 | STA X3-5 | Enregistre le registre A en mémoire en e16. |
POP | e3 | POP PSW | Charge la paire de registres à partir de la pile, définissez SP. e3 doit produire l'un des B, D, H ou PSW. |
PUSH | e3 | PUSH B | Entrepose la paire de registres dans la pile, définissez SP. e3 doit produire sur B, D, H ou PSW. |
IN | e8 | IN 0 | Charge le registre A avec les données du port e8. |
OUT | e8 | OUT 255 | Envoi les données du registre A au port e8. |
XTHL | Échange les données du haut de la pile avec HL. | ||
PCHL | Remplir le compteur de programme avec les données de HL. | ||
SPHL | Remplir le pointeur de pile avec les données de HL. | ||
XCHG | Échange la paire DE avec la paire HL. |
Opérations d'unité logique arithmétique
Les instructions agissant sur l'accumulateur simple précision pour effectuer des opérations arithmétiques et logiques sont données dans le tableau suivant :
Instruction | Valeur de bits | Exemple | Description |
---|---|---|---|
ADD | e3 | ADD B | Ajoute le registre donné par e3 à l'accumulateur sans report. e3 doit produire l'un des A, B, C, D, E, H ou L. |
ADC | e3 | ADC L | Ajoute le registre à A avec retenue, e3 comme ci-dessus. |
SUB | e3 | SUB H | Soustrait reg e3 de A sans retenue, e3 est défini comme ci-dessus. |
SBB | e3 | SBB 2 | Soustrait le registre e3 de A avec report, e3 défini comme ci-dessus. |
ANA | e3 | ANA 1+1 | Et Logique de registre avec A, e3 comme ci-dessus. |
XRA | e3 | XRA A | Ou exclusif avec A, e3 comme ci-dessus. |
ORA | e3 | ORA B | Ou logique avec A, e3 défini comme ci-dessus. |
CMP | e3 | CMP H | Compare le registre avec A, e3 comme ci-dessus. |
DAA | Registre de réglage décimal A basé sur la dernière opération d'unité logique arithmétique. | ||
CMA | Complément les bits du registre A. | ||
STC | Réglez le drapeau de retenue sur 1. | ||
CMC | Complément le drapeau de retenue. | ||
RLC | Fait pivoter les bits vers la gauche, (ré)réglez la retenue effet secondaire. Le bit d'ordre supérieur A devient une retenue. | ||
RRC | Faites pivoter les bits vers la droite, (ré)réglez la retenue comme effet secondaire. Le bit de poids faible A devient une retenue. | ||
RAL | Tourne le registre de retenue/A vers la gauche. La retenue est impliqué dans la rotation. | ||
RAR | Fait pivoter le registre de retenue/A vers la droite. La retenue est impliqué dans la rotation. | ||
DAD | e3 | DAD B | Ajoute une paire de registres double précision e3 à HL. e3 doit produire B, D, H ou SP. |
Consignes de contrôle
Les quatre instructions restantes, classées comme instructions de contrôle, sont les suivantes :
Nom | Description |
---|---|
HLT | Arrête le processeur 8080. |
DI | Désactive le système d'interruption. |
EI | Active le système d'interruption. |
NOP | Signifie pas d'opération. |