Vous êtes sur la page 1sur 3

TD Système de Numération

I - Opérateurs Logiques

Ce sont les opérateurs usuels de la logique booléenne : ET, OU, OUx (OU Exclusif), NON
(complément à 1). L'UAL du processeur peut appliquer en parallèle toutes ces opérations à tous
les bits des deux opérandes de l'opération logique en question :

Faites les opérations logiques suivantes :

1. 0xE3 ET 0x25 = 0x5A ET 0x79 =


2. 0xE3 OU 0x25 = 0x5A OU 0x79 =
3. 0xE3 OUx 0x25 = 0x5A OUx 0x79 =
4. NON 0x25 = NON 0x79 =

II - Représentation des nombres signés ''en complément à 2''

La convention la plus couramment employée pour représenter les nombres entiers signés est de
considérer que le bit de poids le plus fort d'un mot, est affecté d'un coefficient négatif.

Exemple : Soit un l'octet composé des 8 bits suivants : b7 b6 b5 b4 b3 b2 b1 b0;

Valeur non signée :

 M = b7*27 + b6*26 + b5*25 + b4*24 + b3*23 + b2*22 + b1*21 + b0*20


 Si M = 10110011  Valeur non signée = 128 + 32 + 16 + 2 + 1 = 179

Valeur signée :

 N = -b7*27 + b6*26 + b5*25 + b4*24 + b3*23 + b2*22 + b1*21 + b0*20


 Si N = 10110011  Valeur signée = 128 + 32 + 16 + 2 + 1 = -77

La raison de ce choix est qu'il permet d'utiliser un seul et même circuit additionneur compatible à
la fois avec la représentation signée et non-signée. De plus il est facile d'obtenir la soustraction
car l'inversion du signe se fait par une opération simple : le complément à 2. Enfin le signe de la
valeur apparaît immédiatement : le bit de poids le plus fort est à 1 si la valeur est négative : on
l'appelle alors : bit de signe' .

1. En utilisant si nécessaire le complément à 2 pour inverser le signe, ecrire en hexa le


contenu de l'octet correspondant aux valeurs signées suivantes :

-12 = 0x…….. ; 12 = 0x…….. ; -0x20 = 0x…….. ; -0x56 = 0x…….. ; -0x2 = 0x……..

2. Quelles sont les représentations hexa de la valeur signée -1 et de la valeur non signée 255
en représentation sur un octet, sur un demi-mot de 32 bits et sur un mot de 32 bits ?

 Représentations en hexadécimal de -1 :
 Représentations en hexadécimal de 255 :

1
III - Additions binaires

L'UAL du processeur MC68000, comporte un circuit additionneur de largeur 32 bits. Ici nous ne
considérons que des additions de largeur fixe de 8 bits pour simplifier. On peut additionner les
nombres binaires comme les décimaux, en opérant sur les chiffres de droite à gauche avec les
retenues éventuelles.

1. 01010101 + 00110011 = …………


2. 01001110 + 10101101 = …………
3. 10101101 + 11100110 = …………
4. 00110011 + 01011001 = …………

IV - Additions hexadécimal

De même que pour l'exercice d'addition en binaire, nous n'allons considérer que des opérations
d'addition sur 8. L'objectif dec cet exercice consiste à manipuler le registre d'état ou registre des
flags ou encore registre de code condition, en fonction du résultat de l'opération d'addition. On
s'interesse surtout aux quatres indicateurs : NZCV.

N : résultat négatif (bit de signe à 1) Z : résultat nul, C (resp. V) : résultat tronqué en


interprétation non signée (resp. interprétation signée). Donner la valeur des flags NZCV pour les
opérations suivantes :

1. 0xBA + 0xA6 = 0x………… NZCV =…………


2. 0xCE + 0x3C = 0x………… NZCV =…………
3. 0x32 + 0xCE = 0x………… NZCV =…………
4. 0x32 + 0x78 = 0x………… NZCV =…………

V - Décalages et rotations

Le décalage logique à gauche de "n bits" d'un mot permet de déplacer les valeurs des bits à
l'intérieur de ce mot, de n positions vers la gauche. Les valeurs précédentes dans les bits de poids
forts sont perdues (écrasée à chaque décalage) et les bits de poids faibles sont mis à 0. Le
décalage logique à droite réalise l'opération inverse.

Le décalage arithmétique à droite recopie n fois le bit de signe dans les bits de poids forts.

1. Décalage logique de 4 bits à gauche de : 0xF0ABCD0E est : ……………


2. Décalage logique de 8 bits à droite de : 0xF0ABCD0E est : ……………..
3. Décalage arithmétique de 8 bits à droite de :0xF0ABCD0E est : ……….
4. Rotation de 24 bits à droite de : 0xF0ABCD0E est : …………………….

2
VI - Masques binaires

Les masques binaires permettent d'extraire l'état de certains bits d'un mot, ou bien de modifier
l'état de certains bits sans modifier les autres.

Exemples : On dispose d'un octet déclaré en C par unsigned char p;

On souhaite tester le bit 5 de l'octet et déclencher un if (p & 0x20) { traitement ... }


traitement si il vaut 1

On souhaite mettre à 1 (set) les bits 1 et 2 de l'octet p = p | 0x06;

On souhaite mettre à 0 (reset) les bits 1 et 2 de l'octet p = p & 0xF9; // 0xF9 = NON 0x06

Exercice :

1. On souhaite tester le bit 0 de l'octet et déclencher un


traitement si il vaut 1

2. On souhaite mettre à 1 (set) les bits 3, 4 et 5 de l'octet

3. On souhaite mettre à 0 (reset) les bits 3, 4 et 5 de l'octet

4. On souhaite inverserer (invert, toggle) le bit 7 de l'octet