CODING ★ Dr.Watson - Autoformation à l'assembleur par Micro Application ★

Dr.Watson - Autoformation à l'assembleur par Micro Application - Chapitre 05

CHAPITRE 5

DECIMAL CODé EN BINAIRE ET OPERATEURS LOGIQUES

En plus des nombres représentés en notation binaire, hexadécimale et décimale, une autre représentation existe. On lui donne ce nom assez impressionnant de décimal codé en binaire. Alors qu'en binaire un nombre (0-255) est normalement stocké par octet, en BCD (Binary Coded Décimal) l'octet est partagé en deux. Le nom donné à chaque demi-octet de 4 bits est : quartet !

Par exemple, 7564 stocké en BCD demande 2 octets ( 4 chiffres a coder a raison de 2 chiffres par octet).

; 7 5
;-----------
Octet 1 !0111!0101!
;-----------
; 6 4
;-----------
Octet 2 !0110!0100!
;-----------

Notez que l'octet 1 n'est pas nécessairement stocké en premier en mémoire. Sa position dépend du format de stockage utilisé dans le programme.

Vous avez peut être remarqué que 4 bits sont utilisés pour stocker chaque nombre (0-9) alors que 3 bits uniquement pourraient les stocker. Le pourquoi de l'utilisation de 4 bits est que BCD existe depuis plus longtemps que les micros. Il a d'abord été utilisé sur des unités centrales où il était plus efficace de stocker des chiffres BCD en 4 bits. BCD est très utilisé dans les programmes de comptabilité et est également très utile pour transmettre des informations à certaines formes de dispositifs d'affichage (par exemple les affichages à 7 segments vus dans les calculatrices et les montres a affichage digital).

Observons maintenant comment deux nombres BCD s'additionnent.

Décimal BCD

8 1000

+2 +0010

-- -----

10 1010

C'est bien, mais 1010 c'est 10 en décimal et par conséquent trop grand pour être stocké dans un quartet BCD qui ne peut stocker que des nombres de 0 à 9. Quelques ajustements sont nécessaires pour des réponses supérieures à neuf. En ajoutant 6 à tout résultat supérieur a 9, on obtient le résultat juste :

Ainsi :

Premier quartet ;Deuxième quartet

0000 ;1010
+ 0000 ; 0110 : - 6 en décimal
---- ; -----
0001 ; 0000

Ce qui donne la représentation correcte de 10 en BCD ; 0001 0000.

Cela deviendrait vite ennuyeux si chaque fois que nous exécutions des opérations arithmétiques BCD, il nous fallait vérifier la validité du résultat et le corriger si nécessaire. Heureusement le Z80 contient une instruction qui le fait pour nous :

DAA Décimal Adjust the Accumulator (ajustage décimal de l'accumulateur)

Revenons maintenant à la programmation

Le programme 5.1 additionne 8 et 2 pour donner la réponse en BCD.

PROGRAMME 5.1

LD A,8

ADD A,2

DAA

ADD A,65

CALL 47962

RET

Notez l'utilisation du décalage (65) pour amener le résultat dans la zone alphabet.

Le résultat, avant addition du décalage, sera la représentation BCD de 10 (0001 0000). En décimal cette valeur binaire correspond à 16. Et donc le caractère ayant le code ASCII 16+65 sera affiché sur l'écran (Q).

EXERCICE 5.1

Ajoutez 7 a 12 en BCD et affichez sur l'écran la réponse sous la forme d'une lettre.

Une réponse possible est donnée dans le chapitre solutions.

EXERCICE 5.2

Soustrayez &12 de &35 et convertissez la réponse en BCD puis affichez sur l'écran la réponse sous forme de lettre.

Une réponse possible est donnée dans le chapitre solutions.

Quelquefois, il est nécessaire d'extraire le quartet faible d'un octet, Cela se fait en enlevant le quartet fort. On peut le faire avec l'instruction :

AND s ET logique de l'opérande s

Ici s est A, B, C, D, E, H, L, (HL), (IX+d) ou (IY+d).

Tous ceux qui ont approché l'électronique digitale reconnaîtront le symbole suivant. C'est la représentation symbolique d'une porte logique ET.

Porte ET

FIGURE 5.1

La porte ET fonctionne ainsi si et seulement si les deux entrées A et B sont mises (1), alors la sortie C sera mise. Décrire l'opération d'une porte ET est relativement facile/ mais comme la logique des portes devient de plus en plus complexe cela finit par être de plus en plus difficile à décrire clairement. La réponse à ce problème est l'utilisation d'une table de vérité. Une table de vérité permet à une sortie de porte logique d'être Plus facilement et plus rapidement dérivée d'un jeu d'entrées donné.

Par exemple, voici la table de vérité de la porte ET.

--------------------------
! ENTREES ! SORTIE !
! A B ! C !
--------------------------
! 0 0 ! 0 !
! 0 1 ! 0 !
! 1 0 ! 0 !
! 1 1 ! 1 !
--------------------------

Table de vérité pour ET Logique

FIGURE 5.2

Notez que C est seulement mis lorsque A ET B sont mis, d'où le nom ET.

EXERCICE 5.3

En utilisant la figure 5.2 décidez si C sera mis ou non pour les entrées suivantes ;

1 A=0 B=1

2 A=1 B=1

3 A=0 B=0

Une réponse possible est donnée dans le chapitre solutions.

Lorsque le microprocesseur Z80 accomplit une instruction ET, il agit sur 8 bits en même temps.

Observez ceci :

Problème : Quel est le résultat d'une opération entre 10101101 et 00001111 ?

Solution :

10101101

AND 00001111

--------

00001101

Qu'est-ce qui s'est passé ?

Le quartet fort a été 'masqué', c'est à dire que tous les bits de ce quartet ont été mis à zéro alors que ceux du quartet faible n'ont pas été modifiés.

Ce procédé est très puissant dans le sens où il nous permet d'extraire toute portion d'un octet en utilisant un masque approprié. Par exemple, pour masquer le quartet faible de 10111011 nous ferions l'opération ET avec 11110000.

1010 1101

AND 1111 0000

---- ----

1101 0000

---- ----

Généralement, toute position de bit qui doit rester intacte, est ANDée avec un, le reste avec des zéros. Par exemple, si le résultat de l'opération AND d'un nombre de huit bits avec 00000011 est 2, alors nous savons que le nombre, quel qu'il soit est divisible par 2.

EXERCICE 5.4

Quel masque faudrait-il utiliser pour arriver à 00000011 en partant de 10101011 ?

Une réponse possible est donnée dans le chapitre solutions.

EXERCICE 5.5

Quel est le résultat d'une opération AND entre 253 et 75 ?

Une réponse possible est donnée dans le chapitre solutions.

Maintenant écrivons un programme avec l'instruction AND (ET). Le programme 5.2 fait une opération logique AND avec 225 et 254, puis affiche le résultat sur l'écran.

PROGRAMME 5.2

LD C,225

LD A, 254

AND C

CALL 47962

RET

Cela reproduira une 'tête' sur l'écran, le symbole ASCII de l'Amstrad pour 224.

ET n'est pas le seul opérateur logique que possède le Z80. Etudions maintenant la porte OU (OR). Le symbole standard pour une porte OU est :

Porte OU

FIGURE 5.3

La sortie C est mise (1), si soit A soit B est mis (1) ou si A et B sont mis. Ceci est représenté dans la table de vérité suivante :

---------------------
! ENTREES ! SORTIE !
! A B ! C !
---------------------
! 0 0 ! 0 !
! 0 1 ! 1 !
! 1 0 ! 1 !
! 1 1 ! 1 !
---------------------

Table de Vérité OU Logique

FIGURE 5.4

L'Instruction Z80 OR est :

OR s OU Logique de l'opérande s

Ici s est A, B, C, D, E, H, L (HL), (IX+d) OU (IY+d).

EXERCICE 5.6

Quel est le résultat des opérations logiques suivantes :

1. 1001 OR 1101 (nombres binaires)

2. 250 OR 25

3. (209 OR 20) AND 27

Les réponses se trouvent dans le chapitre solutions.

Il peut sembler étrange qu'une porte OU produise une sortie lorsque les deux entrées sont mises (1); évidemment cela peut poser un problème dans certains cas. C'est pourquoi on utilise la porte 'OU EXCLUSIF', qui résout ce problème. Le symbole utilisé pour représenter un XOR (OU EXCLUSIF) est:

PORTE XOR

FIGURE 5.5

--------------------
! ENTREES ! SORTIE !
! A B ! C !
--------------------
! 0 0 ! 0 !
! 0 1 ! 1 !
! 1 0 ! 1 !
! 1 1 ! 0 !
--------------------

Table de Vérité XOR

FIGURE 5.6

L'instruction Z80 correspondante est :

XOR s OU exclusif de l'opérande s

Ici S est A, B, C, D, E, H, L, (HL), (IX+d), ou (IY+d).

EXERCICE 5.7

Quel est le résultat des opérations logiques suivantes ? Essayez les d'abord sur une feuille puis vérifiez vos

réponses en écrivant un programme.

1. 1011 XOR 1110100

2. 77 XOR 200

3. (25 OR 255) AND 200

Les réponses sont données dans le chapitre solutions.

NOMBRES SIGNES

Jusqu'ici tous les nombres utilisés étaient positifs. En de nombreuses situations les nombres négatifs sont indispensables.

Comment représenter des nombres négatifs en binaire ? La méthode utilisée permet au Z80 de traiter des nombres négatifs presque comme il traite des nombres positifs. On donne a cette méthode le nom impressionnant de "complément a deux". Avant d'étudier le complément a deux, il est auparavant nécessaire de bien comprendre le concept de complément à un !

COMPLEMENT A UN

Lorsque l'on utilise la notation complément a un, tous les nombres entiers positifs sont représentés en binaire comme d'habitude. Mais, les nombres négatifs sont représentés en remplaçant tous les '1' d'un octet par des '0', et en remplaçant tous les 0 par des 1.

Par exemple :

+9 = 1001

Remplacez maintenant tous les 1 par des 0 et tous les 0 par des 1, c'est à dire la notation complément à un de +9 :

1001 complément à un = 0110

Ainsi, en notation complément à un -9 = 0110

Mais 0110 représente aussi +6; voilà en vérité un des problèmes de la notation complément à un.

EXERCICE 5.8

Convertissez les nombres suivants sous leur forme complément à 1.

1. 1011

2. 1011101

3. 14

Réponses au chapitre solutions.

COMPLEMENT A DEUX

Comme dans le complément à 1 les nombres entiers positifs sont normalement représentés en binaire. Les nombres négatifs sont d'abord complémentés à 1 puis un est ajouté au résultat. Cela peut paraître, au premier abord, comme une façon étrange de représenter les nombres négatifs, mais ça marche. Essayons d'additionner 7 et 5 en utilisant le complément à 2 pour -5.

5= ; 0101

Complément à 1 1010

Ajouter 1 + 0001

; ----

; 1011 = -5

Maintenant :

7 ;0111

+(-5) ;1011

------ ----

2 ;0010 + retenue

--

Si l'on ignore le bit de retenue, la réponse est juste. Le fait Que le bit de retenue puisse être ignoré, tout en gardant un résultat juste, aide considérablement l'écriture de programmes arithmétiques simples traitant des nombres négatifs.

EXERCICE 5.9

Si l'on ignore le bit de retenue, la réponse est juste. Le fait que le bit de retenue puisse être ignoré, tout en gardant un résultat juste, aide considérablement l'écriture de programmes arithmétiques simples traitant des nombres négatifs.

EXERCICE 5.9

Calculez la réponse des problèmes suivants en utilisant la représentation complément à 2 pour les nombres négatifs.

1. -3 + 10 = ?

2. -1 + 7 = ?

3. -10 + 8 = ?

Les réponses sont données au chapitre solutions.

En utilisant 4 bits, les nombres décimaux représentés en notation complément à 2 sont les suivants :

---------------------

! Décimal ! Binaire !

---------------------

! +7 ! 0111 !

! +6 ! 0110 !

! +5 ! 0101 !

! +4 ! 0100 !

! +3 ! 0011 !

! +2 ! 0010 !

! +1 ! 0001 !

! 0 ! 0000 !

! -1 ! 1111 !

! -2 ! 1110 !

! -3 ! 1101 !

! -4 ! 1100 !

! -5 ! 1011 !

! -6 ! 1010 !

! -7 ! 1001 !

! -8 ! 1000 !

---------------------

Les 16 combinaisons uniques de 1 et de 0 oui résultent de 4 bits ne représentent plus les nombres entiers 0-15 mais les nombres entiers +7 à -8. De façon similaire/ lorsque l'on utilise 8 bits la gamme valable des nombres est de +127 à -128. Cela peut poser des problèmes lors de l'addition de deux nombres ayant pour résultat un nombre plus grand que +127.

Exemple :

100 ;01100100

79 ;01001111

--- ;--------

179 ;10101011

En complément à 2, 10101011 représente -85; c'est tout à fait faut. On dit qu'un dépassement a eu lieu.

Cela est détecté par le flag P/V (Parité/Dépassement (Overflow)) et c'est au programmeur de réagir en fonction de cette information. Une solution facile est de déclarer le résultat non valable. Un dépassement se produira généralement dans les conditions suivantes:

Lors de :

1. L'addition de deux grands nombres positifs ou négatifs.

La soustraction d'un grand nombre positif d'un grand nombre négatif ou

lors 'de la soustraction d'un grand nombre négatif d'un grand nombre

positif.

Le Z80 contient des instructions qui convertissent le contenu de l'accumulateur en complément à 1 ou en complément à 2, de la manière suivante :

NEG "NEGative" le contenu de l'accumulateur (exactement comme le

complément à 2).

CPL ComPLémente le contenu de l'accumulateur (complément à 1).

Le programme 5.3 ci-après calcule le résultat de la somme -112 +101.

PROGRAMME 5.3

LD A,112 A=112

NEG ;A=-112

ADD A, 104 A=-112+104

CALL &BB5A

RET

Une fois lancé, ce programme affichera un petit bonhomme sur l'écran, le caractère de l'Amstrad pour le code ASCII 248. La représentation binaire de 248 est 11111000 ce qui représente -8 en notation complément à 2. Le point important à noter ici, est que le Z80 ne peut faire de distinction entre 248 et -8. Complément à 2 est un concept que le programmeur, et non le Z80, utilise pour la représentation de nombres négatifs, il faut donc se méfier lorsqu'on l'utilise et s'assurer que le résultat espéré est bien obtenu.

EXERCICE 5.10

Utilisez les instructions CPL et INC au lieu de NEG pour calculer le résultat de la somme suivante :

-20 + 98 = ?

Une réponse possible est indiquée au chapitre solutions.

Et voilà, encore un autre chapitre de terminé; et en résumé:

RESUME

Les notions et concepts suivants devraient désormais vous être familiers.

1. Arithmétique BCD

2. Opérateurs logiques

1. AND (ET)

2. OR (OU)

3. XOR (OU EXCLUSIF)

4. Masques logiques

3. Nombres signés

1. Complément à 1

2. Complément à 2

3. Débordement

Vous devriez aussi reconnaître les instructions suivantes.

DAA AND s

CPL OR s

NEG XOR s

★ ANNÉES: 1985
★ AUTEUR: T. Hebertson
★ CONVERTION: CRACKERS VELUS

Page précédente : Dr.Watson - Autoformation à l'assembleur par Micro Application - Chapitre 04
 
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 403 millisecondes et consultée 1473 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.