REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET
POPULAIRE
Institut de Maintenance et de Sécurité Industrielle
INTRODUCTION :
Définition du microprocesseur :
Circuits intégrés de très petite dimension (microcircuit) formant
une unité de traitement de l'information ainsi qu'il est un processeur
dont tous les composants ont été
Suffisamment miniaturisés pour être regroupés dans un unique
boitier. Fonctionnellement, le processeur est la partie d'un
ordinateur qui exécute les instructions et traite les données des
programmes.
Objectif:
Manipulation des différentes instructions logiques du
microprocesseur EASY 68K utilisant les différents modes
d'adressage. Introduction à la programmation du microprocesseur
EASY 68K par la connaissance des instructions de transfert et les
instructions logiques.
Fiche TP n2 :
ORG $1000 ; Adresse de départ du programme
MOVE.L D0, D1 ; Copie le contenu de D0 dans D1
STOP ; Arrête le programme
END ; Fin du programme
ORG $1000 ; Adresse de départ du programme
MOVE.B MA1, D0 ; Charge le premier nombre dans le registreD0
ADD.B MA2, D0 ; Ajoute le deuxième nombre dans D0ADD.B MA3,
D0 ; Ajoute le troisième nombre dans D0
MOVE.B D0, MRA; Stocker le résultat dans la position mémoire
MRA
STOP ; Arrêter le programme END ; Fin du programme
Ce programme ne fonctionnerait pas correctement si les nombres étaient
signés, car l'addition de nombres signés nécessite un traitement différent
des dépassements de capacité. Pour traiter le cas où les nombres ne sont
pas signés,mais que le résultat de l'addition ne tient pas sur 8 bits, il faut
utiliser des registres de 16 ou 32 bits pour stocker le résultat.
Voici un exemple de programme plus général pour le traitement des
nombres non-signés ou signés :
ORG $1000 ; Adresse de départ du programme
Définition des variables
MA1: DC.B $10 ; Premier nombre MA2:
DC.B $20 ; Deuxième nombreMA3: DC.B
$30 ; Troisième nombreMRA: DS.W 1 ;
Résultat
Code du programme
MOVE.B MA1, D0 ; Charge le premier nombre dans le registreD0
ADD.B MA2, D0 ; Ajoute le deuxième nombre dans D0 ADD.B
MA3, D0 ; Ajoute le troisième nombre dans D0 Vérification du
dépassement de capacité
BMI ADD_OVERFLOW ; Si le résultat est négatif, il y a eu un
dépassement
Stockage du résultat
MOVE.B D0, MRA ; Stocke le résultat dans la
position mémoire MRA
STOP ; Arrête le programme
ADD_OVERFLOW: ; Traitement du dépassement de capacité ici
Par exemple, stocker la valeur maximale de 8 bits si le résultat est trop
grand
MOVEQ #255, D0
MOVE.B D0, MRA ; Stocke la valeur maximale de 8 bits dansla
position mémoire MRA
STOP ; Arrêter le programme
END ; Fin du programme
Voici une version modifiée du programme pour traiter des
nombres sur 16 bits :
ORG $1000
MOVE.W MA1,D0 ; Charge le premier nombre dans D0
ADD.W MA2,D0 ; Ajoute le deuxième nombre à D0 ADD.W
MA3,D0 ; Ajoute le troisième nombre à D0 MOVE.W D0,MRA ;
Stocke le résultat dans la position mémoire
MRA ; Traitement des nombres signés
CMP.W #0,D0 ; Compare le résultat à zéro
BGE.S FIN ; S i le résultat est positif ou nul,
On passe directement à la fin
NEG.W D0 ; Sinon, on prend le complément à deux du résultat
MOVE.W D0,MRA ; Stocke le résultat dans la position
mémoire
MRA FIN:
STOP #$2700
END
Voici une première version du programme qui soustrait les nombres
sans prendre en compte les éventuels dépassementsde capacité :
ORG $1000
MOVE.B MA1,D0 ; Charge le premier nombre dans D0 SUB.B
MA2,D0; Soustrait le deuxième nombre de D0 MOVE.B D0,MRA ;
Stocke le résultat dans la positionmémoire MRA.
Deuxième méthode
CLR.B D1; Efface le registre D1
NOT.B D1; Prend le complément à un de D1 MOVE.B MA2,D1;
Charge le deuxième nombre dans D1ADD.B D1,D0; Ajoute le
complément de D1 à D0
MOVE.B D0, MRA; Stocke le résultat dans la positionmémoire
MRA
STOP #$2700
END
Voici une version modifiée :
ORG $1000
MOVE.B MA1,D0 ; Charge le premier nombre dans D0SUB.B
MA2,D0 ; Soustrait le deuxième nombre de D0
BCC.S PAS_DEPASSE; Si le résultat n'a pas dépassé lacapacité, on passe
directement à la fin
MOVE.B #0,MRA ; Sinon, on stocke la valeur zéro dans laposition
mémoire MRA
BRA.S FIN ; On passe à la fin du programme
PAS_DEPASSE:
MOVE.B D0,MRA ; Stocke le résultat dans la position mémoire
MRA
Deuxième méthode
CLR.B D1 ; Efface le registre D1
NOT.B D1 ; Prend le complément à un de D1 MOVE.B MA2,D1;
Charge le deuxième nombre dans D1ADD.B D1,D0 ; Ajoute le
complément de D1 à D0
BCC.S FIN_DEUX ; Si le résultat n'a pas dépassé la capacité,on passe
directement à la fin
MOVE.B #0,MRA ; Sinon, on stocke la valeur zéro dans laposition
mémoire MRA
BRA.S FIN ; On passe à la fin du programme
FIN_DEUX:
MOVE.B D0,MRA ; Stocke le résultat dans la positionmémoire MRA
STOP #$2700
END
ORG $1000
MOVE.B MA1,D0; chargement du premier nombre dans le registre D0
ABC.D0: boucle pour convertir le nombre en BCD.
DIVU #10,D0
SWAP D0
ADDI #48,D0
SWAP D0
DBRA D1,ABC.D0
MOVE.B MA2,D2 ; chargement du deuxième nombre dans le registre
D2
ABC.D2:; boucle pour convertir le nombre en BCD
DIVU #10,D2
SWAP D2
ADDI #48,D2
SWAP D2
DBRA D3,ABC.D2
MOVE.B MA3,D4 ; Chargement du troisième nombre dans le registre
D4
ABC.D4:boucle pour convertir le nombre en BCDDIVU #10,D4
SWAP D4
ADDI #48,D4
SWAP D4
DBRA D5,ABC.D4
ADD.W D0,D2; addition du premier et du deuxième nombreADDX.W
D1,D3
ADD.W D2,D4; addition du résultat précédent et dutroisième
nombre
ADDX.W D3,D5
SUBI #144,D5; correction pour les nombres BCDBLT
CORRIGER
ADDI #6,D5
CORRIGER: ADDI #48,D5
MOVE.B D5,MRA; stockage du résultat dans la positionmémoire
MRA
STOP #$2700
END
Dans le cas général :
ORG $1000
MOVE.B MA1,D0; chargement du premier nombre dans leregistre
D0
ABC.D0 : boucle pour convertir le nombre en BCDDIVU
#10,D0
SWAP D0
ADDI
#48,D0
SWAP D0
DBRA D1,ABC.D0
MOVE.B MA2,D2; chargement du deuxième nombre dans leregistre
D2
ABC.D2: boucle pour convertir le nombre en BCDDIVU
#10,D2
SWAP D2
ADDI
#48,D2
SWAP D2
DBRA D3,ABC.D2
MOVE.B MA3,D4; chargement du troisième nombre dans leregistre
D4
ABC.D4: boucle pour convertir le nombre en BCDDIVU
#10,D4
SWAP D4
ADDI
#48,D4
SWAP D4
DBRA D5,ABC.D4
ADD.W D0,D2; addition du premier et du deuxième nombreADDX.W
D1,D3
ADD.W D2,D4; addition du résultat précédent et dutroisième
nombre
ADDX.W D3,D5
SUBI #144,D5; correction pour les nombres BCDBLT
CORRIGER
ADDI #6,D5
CORRIGER: ADDI #48,D5
MOVE.B D5,MRA; stockage du résultat dans la positionmémoire
MRA
STOP
#$2700
END
Dans le cas de 16 bits :
ORG $1000
MOVE.W MA1,D0; charger le premier nombre dans leregistre D0
ADD.W MA2,D0; additionner le deuxième nombre aupremier
MOVE.W D0,MRA; stocker le résultat dans la positionmémoire
MRA
STOP #$2700; arrêter le programme
MA1 DC.W $1234 ;définir le premier nombre sur 16 bits
MA2 DC.W $5678 ; définir le deuxième nombre sur 16 bits
MRA DS.W 1; réserver de l'espace pour le résultat sur 16bits
CONCLUSION :
En conclusion, le microprocesseur 68000 est un composant
électronique important et largement utilisé dans de nombreux
systèmes informatiques et électroniques. Avec son architecture RISC,
son ensemble d'instructions relativement simple et uniforme, ainsi
que ses capacités de calcul et de manipulation de données avancées,
le 68000 est un choix populaire pour les applications nécessitant des
performances élevées. En conséquence, la programmation du 68000
est une compétence technique précieuse pour les ingénieurs et les
développeurs qui travaillent dans des domaines tels que les systèmes
embarqués, les ordinateurs personnels, les stations de travail et les
consoles de jeux.