L'unité arithmétique (MDU) est spécifique au microcontrôleur 80C537. Elle permet d'effectuer quatre types d'opération :

Cette unité est indépendante de l'unité centrale, une opération peut donc être effectuée alors que le micro continue à exécuter les instructions du programme.

Voici un résumé des performances de cette MDU :

Opération Résulat Reste Temps d'execution
32 bits / 16 bits 32 bits 16 bits 6Tcy
16 bits / 16 bits 16 bits 16 bits 4Tcy
16 bits * 16 bits 32 bits   4Tcy
Normalisation 32 bits   6Tcy
Décalage 32 bits   6 décalages par cycle

Tcy = temps de cycle machine.

Cette MDU est représentée par 7 SFR : MD0 à MD5 et ARCON. C'est l'ordre d'écriture dans ces registres qui détermine l'opération à effectuer :

Opération 32bits / 16 bits
A / B
16 bits / 16 bits
A / B
16 bits * 16 bits
A * B
Première
écriture



MD0 <-- A faible
MD1 <--------- A
MD2 <----------A
MD3 <---- A fort
MD4 <-- B faible
MD5 <---- B fort
MD0 <--- A faible
MD1 <----- A fort


MD4 <--- B faible
MD5 <----- B fort
MD0 <---- A L
MD4 <---- B L
MD1 <---- A H
MD5 <---- B H
Première
lecture



MD0 -> Résultat L
MD1 ---> Résultat
MD2 ---> Résultat
MD3 -> Résultat H
MD4 ----> Reste L
MD5 ---> Reste H
MD0 -> Résultat L
MD1 -> Résultat H


MD4 ----> Reste L
MD5 ----> Reste H
MD0 --> Prod L
MD3 --> Prod H

Qu'est-ce que la Normalisation ??
Elle consiste à décaler vers la gauche une valeur binaire jusqu'à ce que le bit de poids fort soit un 1. Utile pour une arithmétique utilisant le format virgule flottante :

MD0 <------ A faible
MD1 <------------- A
MD2 <--------------A
MD3 <-------- A fort
ARCON <- xxx00000
MD0 --> Résultat faible
MD1 ----------> Résultat
MD2 ----------> Résultat
MD3 -----> Résultat fort

L'opération de décalage est la même que la normalisation sauf qu'il faut placer le nombre de décalage voulu dans SC.x et le sens dans SLR (1 pour droite). SC.x et SLR sont des bits du registre ARCON (0EFH). Il contient deux autres bits : MDEF (indicateur d'erreur automatiquement remis à 0 après lecture) et MDOV (indicateur de débordement mis à 1 après division par 0 ou résultat supérieur à 0FFFFH).