Yo !
Du coup j'ai fini mes opérateurs :
- TST :
Fait- TEQ :
Fait- CMP :
Fait- CMN :
Fait- ORR :
Fait- MOV :
Fait- BIC :
Fait- MVN :
FaitJe vais revenir du coup sur leur fonctionnement. Je rappelle, une instruction en data-processing a la forme suivante :
Où :
-
opcode est le numéro de l'opérateur (ADD, SUB, MOV etc...)
-
Rn est l'opérande n°1, TOUJOURS stocké dans un registre.
-
shifter_operand est l'opérande n°2, qui peut être un registre ou une valeur immédiate.
[ je reviens sur cette variable particulière dans le jour d'après !]-
Rd est le registre où sera stocké le résultat.
-
I permet de savoir si shifter_operand est un registre (=0) ou une valeur immédiate (=1).
-
S permet de savoir si les FLAGS doivent être actualisés (=1) ou pas (=0).
ATTENTION : - Certaines opérations n'ont Qu'UNE SEULE opérande (MOV, BIC etc...). Par conséquent, seul le shifter_operand est observé, et Rn est oublié.
- Certaines opérations ne sont là que pour des TESTS, seul les FLAGS sont importants et le résultat en lui-même importe peu. Par conséquent, il n'y a pas de registre Rd pour stocker le résultat. Par contre, S n'est pas pris en compte non plus et les Flags sont obligatoirement modifiés.
--------------------------------------------------------------------------------------------------------------------------
AND : (p159 du manuel) Effectue le "ET" bit à bit.
- FLAGS facultatif (vérifier S)
- opération à 2 opérandes
- Le résultat doit être stocké dans Rd.
EOR : (p183 du manuel) Effectue le "OU" Exclusif bit à bit.
- FLAGS facultatif (vérifier S)
- opération à 2 opérandes
- Le résultat doit être stocké dans Rd.
SUB : (p359 du manuel) Effectue une soustraction.
- FLAGS facultatif (vérifier S)
- opération à 2 opérandes
- Le résultat doit être stocké dans Rd.
RSB : (p265 du manuel) (Reverse substract) C'est une bête soustraction, mais on inverse le sens des opérandes.
- FLAGS facultatif (vérifier S)
- opération à 2 opérandes
- Le résultat doit être stocké dans Rd.
ADD : (p157 du manuel) Effectue une addition.
- FLAGS facultatif (vérifier S)
- opération à 2 opérandes
- Le résultat doit être stocké dans Rd.
ADC : (p155 du manuel) (Add with Carry) Effectue une addition avec Retenue. En gros : A + B (+1 si le C du ZNCV est égal à 1).
- FLAGS facultatif (vérifier S)
- opération à 2 opérandes
- Le résultat doit être stocké dans Rd.
SBC : (p276 du manuel) (Substract with Carry) Simple soustraction, mais avec retenue.
- FLAGS facultatif (vérifier S)
- opération à 2 opérandes
- Le résultat doit être stocké dans Rd.
RSC : (p268 du manuel) (Reverse Substract with Carry) C'est une soustraction inversée (voir RSB) mais avec retenue (voir SBC).
- FLAGS facultatif (vérifier S)
- opération à 2 opérandes
- Le résultat doit être stocké dans Rd.
TST : (p380 du manuel) (Test) C'est comme un AND, il permet de comparer 2 valeurs. Son réel usage est de voir la valeur du bit numéro X de l'opérande 1, en lui appliquant le bon masque (avec l'opérande 2).
- FLAGS OBLIGATOIRE (S inutile)
- opération à 2 opérandes
- Rd est inexistant (car inutile de stocker le résultat)
TEQ : (p378 du manuel) (Test Equivalence) C'est comme un EOR, il permet de savoir si 2 valeurs sont égales, notamment de savoir s'ils sont du même signe.
- FLAGS OBLIGATOIRE (S inutile)
- opération à 2 opérandes
- Rd est inexistant (car inutile de stocker le résultat)
CMP : (p178 du manuel) (Compare) Compare deux valeurs, par le biais d'une soustracton : si opérande 1 = opérande 2, alors Z = 1. Sinon si opérande 1 < opérande 2, N = 1. Sinon... Z et N = 0. La différence avec TEQ, c'est que celui-ci n'affecte pas le V flag, contrairement à CMP.
- FLAGS OBLIGATOIRE (S inutile)
- opération à 2 opérandes
- Rd est inexistant (car inutile de stocker le résultat)
CMN : (p176 du manuel) (Compare Negative) Compare en effectualnt la soustraction mais avec le complément de l'opérande 2. Il est assez semblable à CMP, mais celui-ci affecte moins le C flag.
- FLAGS OBLIGATOIRE (S inutile)
- opération à 2 opérandes
- Rd est inexistant (car inutile de stocker le résultat)
ORR : (p234 du manuel) Effectue le "OU" Inclusif bit à bit.
- FLAGS facultatif (vérifier S)
- opération à 2 opérandes
- Le résultat doit être stocké dans Rd.
MOV : (p218 du manuel) (Move) Envoie une valeur à un registre donné.
- FLAGS facultatif (vérifier S)
- opération à UNE OPERANDE (Rn est inutile)
- Le résultat doit être stocké dans Rd.
BIC : (p162 du manuel) (Bit Clear) Met à 0 les bits selectionnés (dans l'opérande 2)
- FLAGS facultatif (vérifier S)
- opération à 2 opérandes
- Le résultat doit être stocké dans Rd.
MVN : (p232 du manuel) (Move Not) Il donne juste le négatif de l'opérand (permet de former un masque par exemple)
- FLAGS facultatif (vérifier S)
- opération à UNE OPERANDE (Rn est inutile)
- Le résultat doit être stocké dans Rd.