Opérateur arithmétique ADDr
L'opération de calcul ADDr sert à de multiples usages, à la fois, comparaison, addition et soustraction selon le mode. Les calculs
sont réalisés entre deux opérandes sources et le résultat est stocké dans la destination selon la position du flag comparaison.
Cette opération utilise plusieurs alias de programmation : SUBr pour les soustractions et CMPr pour les comparaisons.
Utilisation du mode :
- + : Indique une addition, mode par défaut s'il n'est pas indiqué.
- - : Indique une soustraction.
- c+ : Indique une addition, avec ajout de la carry.
- c- : Indique une soustraction, avec soustraction de la carry.
- c : Indique une comparaison.
Impacte tous les flags : C, C8, C16, S, S8, S16, O, O8, O16, P et Z.
En résumé :
Usage : ADDr Rdd,Rnn,Rmm,[mode]
Exemple : ADDr R31,R30,R29 ou ADD R31,R30,R29,+
Résultat : R31 <= R30 + R29
Exemple : ADDr R31,R30,R29,-
Résultat : R31 <= R30 - R29
Alias : SUBr Rdd,Rnn,Rmm
Exemple : ADDr R02,R30,R29,c
Résultat : chargement des flags selon les résultats de R30-R29
Alias : CMPr Rnn,Rmm
Opérateur arithmétique ADDd
L'opération de calcul ADDd permet l'addition d'un nombre signé de 16 bits avec un registre. Le résultat sera enregistré dans un second registre.
Impacte tous les flags : C, C8, C16, S, S8, S16, O, O8, O16, P et Z.
En résumé :
Usage : ADDd Rdd,Rnn,DIR16
Exemple : ADDd R31,R30,0x1234
Résultat : R31 <= R30 + 0x1234
Exemple : ADDd R31,R30,-2 ou SUBd R31,R30,2
Résultat : R31 <= R30 - 2
Multiplication MUL
L'opération de calcul MUL calcule dans un registre 32 bits de destination le résultat de la multiplication de 2 nombres sur 32 bits. Le mode permet d'indiquer si les nombres sont ou non signés :
- signed : La multiplication se fait entre nombre signés.
- unsigned : La multiplication concerne deux nombre positifs.
Impacte tous les flags : C, C8, C16, S, S8, S16, O, O8, O16, P et Z.
En résumé :
Usage : MUL Rdd,Rnn,Rmm, mode
Exemple : MUL R31,R30,R29,unsigned ou MUL R31,R30,R29
Résultat : R31 <= R30 * R29
Exemple : MUL R31,R30,R29,signed
Résultat : R31 <= R30 * R29
Division DIV
L'opération de calcul DIV calcule dans un registre 32 bits de destination le résultat de la division de 2 nombres sur 32 bits. Le mode permet d'indiquer si les nombres sont ou non signés :
- signed : La multiplication se fait entre nombre signés.
- unsigned : La multiplication concerne deux nombre positifs.
Le type permet de définir le type de la division :
- normal : Les 16 bits de poids fort du registre de destination contiennent le reste et les 16 bits de poids faible le résultat.
- rest : Le reistre de destination prend pour valeur le reste de la division.
- result : Le reistre de destination prend pour valeur le résultat de la division.
Impacte tous les flags : C, C8, C16, S, S8, S16, O, O8, O16, P et Z.
En résumé :
Usage : DIV Rdd,Rnn,Rmm,mode,type
Exemple : DIV R31,R30,R29,unsigned,normal ou DIV R31,R30,R29
Résultat : R31(bits 31 à 16) <= R30 % R29 et R31(bits 15 à 0) <= R30 / R29.
Exemple : DIV R31,R30,R29,signed,rest
Résultat : R31 <= (signed)(R30 % R29)