Vous êtes sur la page 1sur 26

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

Vous aimerez peut-être aussi