Les opérateurs arithmétiques
Addition:
ADD, ADDB
ADDC, ADDCB
Soustraction:
SUB,SUBB
SUBC,SUBCB
Multiplication:
MUL, MULU
Division:
DIV,DIVU
1
Les opérateurs d’addition
ADD, ADDB, ADDC, ADDCB
Syntaxe
mnémonique op1, op2
ADD et ADDB
op1 op1 + op2
ADDC et ADDCB
op1 op1 + op2 + C
Le résultat de l’addition est stocké dans ope1.
2
ADD, ADDB modes
d’adressages et indicateurs
ADD Opérande1 Opé2 Indicateurs
E Z V C N
Rw Rw * * * * *
#valeur * * * * *
[Rw] * * * * *
mem * * * * *
mem Rw * * * * *
ADDB Rb Rb * * * * *
#valeur * * * * *
[Rw] * * * * *
mem * * * * *
mem Rb * * * * *
3
Exemples ADD, ADDB
MOV R0, #0X4000
R0=0x4000
E=0 Z=0 V=x C=x N=0
ADD R0, #1
R0=R0+1=0x4001
E=0 Z=0 V=0 C=0 N=0
ADD R0, R0
R0=R0+R0=0x8002
E=0 Z=0 V=1 C=0 N=1
ADDB RL0, #2
RL0=RL0+2=0x04
R0=0x8004
E=0 Z=0 V=0 C=0 N=0
4
ADDC, ADDCB modes
d’adressages et indicateurs
ADDC Destination Source Indicateurs
E Z V C N
Rw Rw * S * * *
#valeur * S * * *
[Rw] * S * * *
mem * S * * *
mem Rw * S * * *
ADDCB Rb Rb * S * * *
#valeur * S * * *
[Rw] * S * * *
mem * S * * *
mem Rb * S * * *
L’indicateur Z se positionne à 1 si le résultat est
nul ET si Z était précédemment à 1.
5
Exemples ADDC, ADDCB
Valeurs DD 65534 (0x0000FFFE)
DD 65541 (0x00010005)
Somme DSD 1 ; somme des valeurs
…
MOV R1, Valeurs
R1=0xFFFE
E=0 Z=0 V=x C=x N=1
MOV R2, Valeurs+4
R2=0x0005
E=0 Z=0 V=x C=x N=0
ADD R1, R2
R1=0xFFFE+0x0005
R1=0x0003
E=0 Z=0 V=0 C=1 N=0
6
Exemples ADDC, ADDCB
suite
MOV Somme, R1
E=0 Z=0 V=0 C=1 N=0
MOV R1, Valeurs+2
R1=0x0000
E=0 Z=1 V=0 C=1 N=0
MOV R2, Valeurs+6
R2=0x0001
E=0 Z=0 V=0 C=1 N=0
ADDC R1, R2
R1=0x0000+0x0001+C
R1=0x0002
E=0 Z=0 V=0 C=0 N=0
MOV Somme+2, R1
FE FF 00 00 05 00 01 00 03 00 02 00
7
opérande1 opérande 2 somme
Les opérateurs de
soustraction
SUB, SUBB, SUBC, SUBCB
Syntaxe
mnémonique op1, op2
SUB et SUBB
op1 op1 -- op2
SUBC et SUBCB
op1 op1 -- op2 -- C
Le résultat de la soustraction est stocké
dans ope1.
8
SUB, SUBB modes
d’adressages et indicateurs
SUB Destination Source Indicateurs
E Z V C N
Rw Rw * * * S *
#valeur * * * S *
[Rw] * * * S *
mem * * * S *
mem Rw * * * S *
SUBB Rb Rb * * * S *
#valeur * * * S *
[Rw] * * * S *
mem * * * S *
mem Rb * * * S *
L’indicateur C se positionne à 1 si op1<op2
(dans la base binaire naturel non signé).
9
Exemples SUB, SUBB
S DW 5,7,1
T DW 12 T=T-S1-S2-S3
…
MOV R1, #S
R1=0x0020 par exemple
E=0 Z=0 V=x C=x N=0
MOV R0, T
R0=0x000C
E=0 Z=0 V=x C=x N=0
SUB R0, [R1]
R0=R0-0x0005=0x0007
E=0 Z=0 V=0 C=0 N=0
10
Exemples SUB, SUBB
suite
ADD R1, #2
R1=0020+2=0x0022
! ! ! ! ! E=0 Z=0 V=0 C=0 N=0
SUB R0, [R1]
R0=R0-0x0007=0000
E=0 Z=1 V=0 C=0 N=0
ADD R1, #2
R1=0022+2=0024
! ! ! ! ! E=0 Z=0 V=0 C=0 N=0
SUB R0, [R1]
R0=R0-0001=FFFF
E=0 Z=0 V=0 C=1 N=1
MOV T, R0
00000020 05 00 07 00 01 00 FF FF 11
SUBC, SUBCB modes
d’adressages et indicateurs
SUBC Destination Source Indicateurs
E Z V C N
Rw Rw * S * S *
#valeur * S * S *
[Rw] * S * S *
mem * S * S *
mem Rw * S * S *
SUBCB Rb Rb * * * S *
#valeur * * * S *
[Rw] * * * S *
mem * * * S *
mem Rb * * * S *
L’indicateur Z se positionne à 1 si le résultat est
nul ET si Z était précédemment à 1.
L’indicateur C se positionne à 1 si op1<op2 12
(dans la base binaire naturel non signé).
Les opérateurs de division
DIV, DIVU
Syntaxe
mnémonique op1
DIV (division de valeurs signées) et
DIVU (division de valeurs non signées)
Le dividende est copié dans MDL
Le diviseur est copié dans op1. op1 est
toujours de type Word
MDL MDL / op1
MDH MDL mod op1
Le quotient est dans MDL
Le reste dans MDH
13
DIV, DIVU modes
d’adressages et indicateurs
DIV Opérande Indicateurs
E Z V C N
Rw 0 * S 0 *
DIVU Opérande Indicateurs
E Z V C N
Rw 0 * S 0 *
Les indicateurs E et C sont forcés à 0.
L’indicateur V se positionne à 1 si le résultat
ne peut pas être représenté avec un word ou
si le diviseur (op1) est nul.
14
Exemples DIV, DIVU
Temps DW 7384 (2x3600 + 3x60 + 4)
H DSB 1 ; heure
M DSB 1 ; minute
S DSB 1 ; seconde
…
MOV MDL, Temps
MDL=0x1CD8
E=0 Z=0 V=x C=x N=0
MOV R0, #60
R0=0x003C
E=0 Z=0 V=x C=x N=0
DIVU R0
MDL=0x1CD8 / 60=0x007B
MDH=0x1CD8 mod 60=0004
E=0 Z=0 V=0 C=0 N=0 15
Exemples DIV, DIVU
suite
MOVB S, MDH
DIVU R0
MDL=007B / 60=0002
MDH= 007B mod 60=0003
E=0 Z=0 V=0 C=0 N=0
MOVB M, MDH
MOVB H, MDL
00000020 D8 1C 02 03 04
16
Exemples DIV, DIVU
suite
MOV MDL, #1000
MDL=0x03E8
E=0 Z=0 V=x C=x N=0
XOR R0, R0
R0=0000
E=0 Z=1 V=0 C=0 N=0
DIV R0
MDL=1000 / 0=0x1234
MDH= 1000 mod 0=0x5678
E=0 Z=0 V=1 C=0 N=0
17
Les opérateurs de
multiplication
MUL, MULU
Syntaxe
mnémonique op1, op2
MUL (multiplication de valeurs signées) et
MULU (multiplication de valeurs non signées)
MD (MDH-MDL) op1 x op2
Le résultat est dans le registre MD, registre 32
bits, issu de la concaténation de 2 registres
16 bits que sont MDH et MDL
18
MUL, MULU modes
d’adressages et indicateurs
MUL Destination Source Indicateurs
E Z V C N
Rw Rw 0 * S 0 *
MULU Destination Source Indicateurs
E Z V C N
Rw Rw 0 * S 0 *
Les indicateurs E et C sont forcés à 0.
L’indicateur V se positionne à 1 si le résultat
ne peut pas être représenté avec un word,
c’est à dire si MDH est différent de 0.
19
Exemples MUL, MULU
Temps DSW 1 ; en secondes
H DW 2 ; heure
M DW 3 ; minute
S DW 4 ; seconde
…
MOV R0, #60
R0=003C
E=0 Z=0 V=x C=x N=0
MOV R1, H
R1=0002
E=0 Z=0 V=x C=x N=0
MULU R0, R1
MD=003C x 0002
MD=0000 0078
20
E=0 Z=0 V=0 C=0 N=0
Exemples MUL, MULU
suite
MOV R1, MDL
R1=0078
E=0 Z=0 V=0 C=0 N=0
ADD R1, M
R1= 0078+3=007B
E=0 Z=0 V=0 C=0 N=0
MULU R0, R1
MD=003C x 007B
MD=0000 1CD4
E=0 Z=0 V=0 C=0 N=0
21
Exemples MUL, MULU
suite
MOV R1, MDL
R1=1CD4
E=0 Z=0 V=0 C=0 N=0
ADD R1, S
R1= 1CD4+4=1CD8
E=0 Z=0 V=0 C=0 N=0
MOV Temps, R1
00000020 D8 1C 02 00 03 00 04 00
22
Erreurs de syntaxe
La traduction en code machine ne peut pas
être faite ou n’est pas forcément conforme
Val DB 1,2,3
MOV RO, #0 ERREUR
Le registre RO
n’existe pas
Pas d’exécutable
MOV Val, Val+1
ERREUR
Cette combinaison
de modes
d’adressage
n’existe pas
Pas d’exécutable
23
Erreurs de syntaxe
La traduction en code machine ne peut pas
être faite ou n’est pas forcément conforme
MOVB RH0, #1025
ERREUR
1025 ne peut pas être codé sur
1 octet
Troncature du poids fort
04 01
24
Erreurs d’exécution
Wrd DW 3
Val DB -1, +1, +2
…
MOV R0, Val+1 ERREUR
Mémoire Un Word ne peut
pas être adressé
Wrd Val avec une valeur
Impaire
03 00 FF 01 02
25
Erreurs d’exécution
Val DW 0xFFFF
…
MOV R0, Val
MOV R1, [R0] ERREUR
La mémoire
d’adresse 0xFFFF
n’est pas
accessible
26