EPI Digital School 3ième Génie Info
AU : 2023-2024
Architecture des systèmes à microprocesseur et des microcontrôleurs
TD N°3 : µP – Basique-Correction
Nombre de pages : 4
Exercice 1 :
L’étude de cette partie porte sur le µP dont l’architecture du chemin de données et le jeu
d’instructions sont présentés dans l’Annexe :
1. Donnez les caractéristiques suivantes de ce µP.
Taille du bus de données : …8bits…………………………...……………………………………….
Taille du bus d’adresses : ……5bits.……………………...………………………………….……….
Taille du code opération : .…… 3bits …………………………...…………………………………….
Taille du code opérande : ..…… 5bits ………………………...…………………………………….
Taille du compteur Programme : …5bits..…………………...……………………………………….
La capacité de la mémoire adressable : .32octets………...…...……………………………………….
2. Donnez le mot de contrôle pour chacune des instructions de ce µP.
Instruction IRload JMPmux PCload Meminst MemWr Asel1,0 Aload Sub Halt
Fetch 1 0 1 0 0 00 0 0 0
Decode 0 0 0 0 0 00 0 0 0
LOAD A, address 0 0 0 1 0 10 1 0 0
ADD A, address 0 0 0 1 0 00 1 0 0
SUB A, address 0 0 0 1 0 00 1 1 0
JZ address 0 1 Aeq0 0 0 00 0 0 0
JPOS address 0 1 Apos 0 0 00 0 0 0
HALT 0 0 0 0 0 00 0 0 1
3. Soit le programme suivant permettant le décomptage de n jusqu'à 0. Avec « n » une entrée
externe, et « @un » l’adresse mémoire d’une case contenant la valeur « 1 ».
In A
loop: Sub A,@un
jz fin
jp loop
fin : halt
Donnez le contenu de la mémoire (codes machine + données) pour ce programme assembleur,
sachant que le programme est placé à partir de la case N°0.
1/4
Adresse de la Contenu de la case mémoire Instruction
case mémoire
00000 100 00000 In A
00001 011 11111 Sub A,@un
00010 101 00100 jz fin
00011 110 00001 jp loop
00100 111 00000 Halt
11111 00000001 un
4. Complétez le chronogramme suivant pour le programme de la question précédente.
Clock
Reset
State Start Fetch Decode IN A Fetch Decode Sub Fetch Decode JZ Fetch Decode JP Fetch Decode
IRopcod 000 100 011 101 110 011
Input_A 3
Output_A 0 3 2
Aeq0
Aneq0
Halt
5. Soit le programme suivant en code machine, placé dans la mémoire.
A) Complétez le programme assembleur correspondant.
Adresse code code
Mémoire machine assembleur
00000 : 00011101 load A,one
00001 : 01111101 sub A,one …………………………………………………………………
00010 : 00111110 store A,sum
00011 : 10000000 in A …………………………………………………………………………………
00100 : 00111111 store A,n
00101 : 00011111 load A,n ……………………………………………………………………
00110 : 01011110 add A,sum ………………………………………………………………………
00111 : 00111110 store A,sum…………………………………………………………………
01000 : 00011111 load A,n ……………………………………………………………………
01001 : 01111101 sub A,one………………………………………………………………………
01010 : 00111111 store A,n ……………………………………………………………………
01011 : 10101101 jz 01101……………………………………………………………………
01100 : 11000101 jpos 00101………………………………………………………………
01101 : 00011110 load A,sum ……………………………………………………………………
01110 : 11111111 HALT …………………………………………………………………………………
11101 : 00000001 -- one
11110 : 00000000 -- sum
11111 : 00000000 -- n
b) Quel est le rôle de ce programme
2/4
……Calculer la somme des nombres n, n-1, n-2, …, jusqu’à 1……………………………………..
………………………………………………………………………………………………………..
………………………………………………………………………………………………………..
………………………………………………………………………………………………………..
6. Ecrire un programme assembleur permettant de saisir deux nombres et de faire sortir le MAX.
in A ;AInput ……………………………………………………..……………
store A,n1 ;n1A……………………………………………………………..…………
in A ;AInput ………………………………………………………..…………
store A,n2 ;n2A ……………………………………………………………..…………
sub A,n1 ;AA-n1 ⇒ An2-n1…………………………………………..…………
jpos n2Max ;if A>0 jump to n2Max (n2 is the MAX)………………….………………
load A,n1 ;else (A<0) An1 (n1 is the MAX : Display n1)………………………
jpos fin; ;Jump to fin………………………………………………………..…………
n2Max : load A,n2 ;n2 is the MAX : An2 (Display n2)…………………………..…………….
fin : halt………………………….…………………………………………………..………….
n1………………………………………………………………………………………..……………
n2……………………………………………………………………………………………………..
………………………………………………………………………………………………………..
7. Ecrire un programme assembleur permettant de continuer à saisir des valeurs jusqu’à avoir un 0
en entrée, puis il fait sortir le nombre de valeurs saisies.
load A,one ;A1……………………………………………………………………..
sub A,one ;AA-1 ⇒ A0…………………………………………………………..
store A,nbr ;nbrA ⇒ nbr0…………………………………………………………..
loop : in A ;AInput……………………………………………………………………..
jz disp ;if A=0 then show total numbers (Jump to disp)…………………………..
load A,nbr ;else Anbr…………………………………………………………………..
add A,one ;AA+one…………………………………………………………………..
store A,nbr ;nbrA ……………………………………………………………………..
jpos loop ;if A>0 then loop to input other numbers……………………………………..
disp : load A,nbr ;Anbr ……………………………………………………………………..
halt ………….………………………………………………………………………………..
one : 1………………………………………………………………………………………………..
nbr ………………………………………………………………………………………………..
3/4