Section courante

A propos

Section administrative du site

Format de l'opérande

Afin de décrire complètement les codes d'opération et les pseudo-opérations, il faut d'abord présenter la forme du champ d'opérande, car il est utilisé dans presque toutes les instructions. Les expressions dans le champ opérande se composent d'opérandes simples, d'étiquettes, de constantes et de mots réservés, combinés dans des sous-expressions correctement formées par des opérateurs arithmétiques et logiques. Le calcul de l'expression est effectué par l'assembleur au fur et à mesure de l'assemblage. Chaque expression doit produire une valeur 16 bits lors de l'assemblage. De plus, le nombre de chiffres significatifs dans le résultat ne doit pas dépasser l'utilisation prévue. Autrement dit, si une expression doit être utilisée dans une instruction immédiate de déplacement d'octet, les 8 bits les plus significatifs de l'expression doivent être zéro. La restriction sur la signification de l'expression est donnée avec les instructions individuelles.

Étiquettes

Comme indiqué ci-dessus, une étiquette est un identifiant qui apparaît sur une instruction particulière. En général, l'étiquette reçoit une valeur déterminée par le type d'instruction qu'elle précède. Si l'étiquette apparaît sur une instruction qui génère du code machine ou réserve de l'espace mémoire (par exemple, une instruction MOV ou une pseudo opération DS), l'étiquette reçoit la valeur de l'adresse du programme qu'elle étiquette. Si l'étiquette précède un EQU ou un SET, l'étiquette reçoit la valeur résultant de l'évaluation du champ d'opérande. À l'exception de l'instruction SET, un identificateur ne peut étiqueter qu'une seule instruction.

Lorsqu'une étiquette apparaît dans le champ opérande, sa valeur est remplacée par l'assembleur. Cette valeur peut ensuite être combinée avec d'autres opérandes et opérateurs pour former le champ d'opérande d'une instruction particulière.

Constantes numériques

Une constante numérique est une valeur de 16 bits dans l'une de plusieurs bases. La base, appelée base de la constante, est indiquée par un indicateur de base de fin. Voici les indicateurs de base :

Indicateur Description
B Cet indicateur est une constante binaire (base 2).
O Cet indicateur est une constante octale (base 8).
Q Cet indicateur est une constante octale (base 8).
D Cet indicateur est une constante décimale (base 10).
H Cet indicateur est une constante hexadécimale (base 16).

Q est un indicateur de base alternatif pour les nombres octaux car la lettre O est facilement confondue avec le chiffre 0. Toute constante numérique ne se terminant pas par un indicateur de base est une constante décimale.

Une constante est donc composée d'une séquence de chiffres, suivie d'un indicateur de base facultatif, où les chiffres sont dans l'intervalle appropriée pour la base. Les constantes binaires doivent être composées de chiffres 0 et 1, les constantes octales peuvent contenir des chiffres compris entre 0 et 7, tandis que les constantes décimales contiennent des chiffres décimaux. Les constantes hexadécimales contiennent des chiffres décimaux ainsi que des chiffres hexadécimaux A(10D), B(11D), C(12D), D(13D), E(14D) et F(15D). Notez que le premier chiffre d'une constante hexadécimale doit être un chiffre décimal pour éviter de confondre une constante hexadécimale avec un identificateur. Un 0 devant suffira toujours. Une constante composée de cette manière doit s'évaluer en un nombre binaire pouvant être contenu dans un compteur 16 bits, sinon elle est tronquée à droite par l'assembleur. Semblables aux identificateurs, les signes "$" intégrés sont autorisés dans les constantes pour améliorer leur lisibilité. Enfin, l'indicateur de base est traduit en majuscule si une lettre minuscule est rencontrée. Voici toutes les instances valides de constantes numériques :

1234 1234D 1100B 1111$0000$1111$0000B
1234H 0FFEH 3377O 33$77$22Q
3377o 0fe3h 1234d 0ffffh

Mots réservés

Il existe plusieurs séquences de caractères réservés ayant des significations prédéfinies dans le champ opérande d'une instruction. Les noms des registres 8080 sont donnés ci-dessous, qui, lorsqu'ils sont rencontrés, produisent les valeurs indiquées à droite :

Caractère Valeur
A 7
B 0
C 1
D 2
E 3
H 4
L 5
M 6
SP 6
PSW 6

(Encore une fois, les noms en minuscules ont les mêmes valeurs que leurs équivalents en majuscules). Les instructions machine peuvent également être utilisées dans le champ opérande ; ils évaluent à leurs codes internes. Dans le cas d'instructions nécessitant des opérandes, où l'opérande spécifique devient une partie du modèle binaire binaire de l'instruction (par exemple, MOV A, B), la valeur de l'instruction (dans ce cas MOV) est le modèle binaire de l'instruction avec des zéros dans les champs optionnels (par exemple, MOV produit 40h).

Lorsque le symbole "$" apparaît dans le champ de l'opérande (non intégré dans les identificateurs et les constantes numériques), sa valeur devient l'adresse de la prochaine instruction à générer, sans compter l'instruction contenue dans la ligne logique actuelle.

Constantes de chaîne de caractères

Les constantes de chaîne de caractères représentent des séquences de caractères ASCII et sont représentées en encadrant les caractères dans des symboles d'apostrophe. Toutes les chaînes de caractères doivent être entièrement contenues dans la ligne physique actuelle (autorisant ainsi les symboles "!" dans les chaînes de caractères) et ne doivent pas dépasser 64 caractères. Le caractère apostrophe lui-même peut être inclus dans une chaîne de caractères en le représentant comme une double apostrophe (les deux touches ''), devenant une apostrophe simple lorsqu'elle est lue par l'assembleur. Dans la plupart des cas, la longueur de la chaîne de caractères est limitée à un ou deux caractères (la pseudo-opération DB est une exception), auquel cas la chaîne de caractères devient une valeur de 8 ou 16 bits, respectivement. Les chaînes de caractères de deux caractères deviennent une constante de 16 bits, le deuxième caractère étant l'octet de poids faible, et le premier caractère comme octet de poids fort.

La valeur d'un caractère est son code ASCII correspondant. Il n'y a pas de traduction de cas dans les chaînes de caractères; les caractères majuscules et minuscules peuvent être représentés. Notez cependant que seuls les caractères ASCII graphiques (imprimables) sont autorisés dans les chaînes de caractères. Les chaînes de caractères valides sont :

Chaînes de caractères valides : Comment l'assembleur lit les chaînes de caractères :
'A' 'AB' 'ab' 'c' A AB ab c
'' 'a''' '''' '''' a '''
'Ni ni quoi.' Ni ni quoi.
'Elle m'a dit "Bonjour".' Elle m'a dit "Bonjour".
'Je lui ai dit "Bonjour".' Je lui ai dit "Bonjour".

Opérateurs arithmétiques et logiques

Les opérandes décrits ci-dessus peuvent être combinés en notation algébrique normale en utilisant n'importe quelle combinaison d'opérandes, d'opérateurs et d'expressions entre parenthèses correctement formés. Les opérateurs reconnus dans le champ opérande sont décrits dans ce tableau :

Les opérateurs Signification
a + b somme arithmétique non signée de a et b
a - b différence arithmétique non signée entre a et b
+ b unaire plus (produit b)
- b moins unaire (identique à 0 - b)
a * b multiplication de magnitude non signée de a et b
a / b division de grandeur non signée de a par b
a MOD b reste après a / b.
NOT b inverse logique de b (tous les 0 deviennent des 1, les 1 deviennent des 0), où b est considéré comme une valeur de 16 bits
a AND b logique bit à bit et de a et b
a OR b logique bit à bit ou de a et b
a XOR b exclusif logique bit à bit de a et b
a SHL b la valeur résultant du déplacement de a vers la gauche d'une quantité b, avec un remplissage de zéro
a SHR b la valeur résultant du déplacement de a vers la droite d'une quantité b, avec un remplissage de zéro

Dans chaque cas, a et b représentent des opérandes simples (étiquettes, constantes numériques, mots réservés et chaînes de caractères à un ou deux caractères) ou des sous-expressions entièrement entre parenthèses, comme celles présentées dans les exemples suivants :

10+20 10h+37Q L1 /3 (L2+4) SHR 3
('a' and 5fh)+'0' ('B'+B)OR(PSW+M) (1+(2+c))shr(A-(B+1))

Notez que tous les calculs sont effectués au moment de l'assemblage en tant qu'opérations non signées 16 bits. Ainsi, -1 est calculé comme 0-1, ce qui donne la valeur 0ffffh (c'est-à-dire, tous les 1). L'expression résultante doit correspondre au code d'opération dans lequel elle est utilisée. Par exemple, si l'expression est utilisée dans une instruction ADI (ajout immédiat), les 8 bits de poids fort de l'expression doivent être zéro. En conséquence, l'opération "ADI -1" produit un message d'erreur (-1 devient 0ffffh, ne pouvant pas être représenté comme une valeur de 8 bits), tandis que "ADI (-1) AND 0FFH" est accepté par l'assembleur car l'opération AND remet à zéro les bits de poids fort de l'expression.

Priorité des opérateurs

Pour la commodité du programmeur, ASM suppose que les opérateurs ont une priorité relative d'application permettant au programmeur d'écrire des expressions sans niveaux imbriqués de parenthèses. L'expression résultante a supposé des parenthèses étant définies par la priorité relative. L'ordre d'application des opérateurs dans les expressions sans parenthèses est indiqué ci-dessous. Les opérateurs répertoriés en premier ont la priorité la plus élevée (ils sont appliqués en premier dans une expression sans parenthèses), tandis que les opérateurs répertoriés en dernier ont la priorité la plus faible. Les opérateurs répertoriés sur la même ligne ont la même priorité et sont appliqués de gauche à droite lorsqu'ils sont rencontrés dans une expression :

Ainsi, les expressions affichées à gauche ci-dessous sont interprétées par l'assembleur comme les expressions entièrement entre parenthèses affichées à droite ci-dessous :

a*b+c (a*b) + c
a+b*c a + (b*c)
a MOD b*c SHL d ((a MOD b) * c) SHL d
a OR b AND NOT c+d SHL e a OR (b AND (NOT (c + (d SHL e))))

Des sous-expressions équilibrées entre parenthèses peuvent toujours être utilisées pour remplacer les parenthèses supposées ; ainsi, la dernière expression ci-dessus pourrait être réécrite pour forcer l'application des opérateurs dans un ordre différent, comme indiqué :

( a OR b ) AND ( NOT c ) + d SHL e

Cela se traduit par ces parenthèses supposées :

(a OR b ) AND ( (NOT c ) + ( d SHL e ) )

Notez qu'une expression sans parenthèses n'est bien formée que si l'expression résultant de l'insertion des parenthèses supposées est bien formée.



Dernière mise à jour : Lundi, le 16 janvier 2023