Vous êtes sur la page 1sur 3

Université Abdelmalek Essaadi 2021-2022

Faculté des Sciences et Techniques–Tanger Cycle Licence GESI


Département Génie Electrique Semestre 6

Module : Microprocesseurs & Microcontrôleurs


Série de TD N°3

Exercice 1 :
1. Dans l’extrait de programme suivant, précisez pour chacune des instructions le mode
d’adressage ?
Instruction Mode d’adressage
MOV BX , [3125h]
SUB CL , 01h
DEC DL
MOV [CX] , 00h
MOV [SI+0002h] , 2AF5h
MOV [BP] [SI] , 43F7h
2. Soit : SI = 3105h, DI = 10F4h, BP = 0005h, DS = 3452h et SS = 1240h, calculer les
adresses logiques et physiques des deux dernières instructions du tableau ci-dessus (les
instructions en gras) ? Puis donner la répercussion de ces deux instructions sur la mémoire
sachant qu’on travaille avec un microprocesseur INTEL ?
Exercice 2 :
AH contient le code ASCII d’une lettre minuscule (ex : ‘a’). On veut mettre en majuscule
cette lettre (ex : ‘A’). Ecrire une seule instruction qui permet d’effectuer cette modification
quelque soit la lettre en considération ?
Exercice 3 :
Voici le code récupéré à partir du fichier objet :
@1@0 : push bp
mov bp,sp
@1@1 : sub sp,2
mov word ptr [bp-2],2 ;word = 16 bits
@1@2 : jmp short @1@7
@1@3 : mov ax,word ptr [bp+4]
idiv word ptr [bp-2];division de ax par le paramètre
@1@4 : cmp dx,0 ;dx contient le reste
jne short @1@6
@1@5 : mov ax,0
jmp short @1@A
@1@6 : inc word ptr [bp-2]
@1@7 : mov ax,word ptr [bp-2]
imul ax,word ptr [bp-2] ;multiplication entière
@1@8 : cmp ax,word ptr [bp+4]
jl short @1@3
@1@9 : mov ax,1
jmp short @1@A
@1@A : mov sp,bp
pop bp
ret
Entre @1@3 et @1@A, qu’y a-t-il dans la pile en :
- BP–2 ?
- BP ?
- BP+2 ?
- BP+4 ?
En déduire le prototype de la fonction. Que fait-elle à votre avis ?

1/3 M.JBILOU
Exercice 4 :
Dites ce que le programme suivant range dans AL en fin d’exécution : dites ce que cela
représente et donnez la valeur ?
DATA SEGMENT
TAB DB 45, 20, 40, 30, 25, 15, 5, 35, 95, 50, 90, 10, 80
TTM1 DW 12
DATA ENDS

PILE SEGMENT PARA STACK


DB 128 DUP(?)
PILE ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:PILE
DEBUT: MOV AX,DATA
MOV DS,AX
MOV BX,offset TAB
MOV AL,[BX]
INC BX
MOV CX,TTM1
Boucle: MOV AH,[BX]
CMP AL, AH
JB Suite
MOV AL,AH
Suite: INC BX
DEC CX
CMP CX,0
JNE Boucle
Fin: MOV AH,4Ch
INT 21h
CODE ENDS
END DEBUT
Indications : JB : Branchement si < et JNE : Branchement si 

Exercice 5 :
On souhaite réaliser l’affichage du contenu du registre AL à l’écran. Pour ce faire, on
convertit les 2 quartets qui composent le registre AL en leur code ASCII correspondant.
Par exemple : si AL=5B alors en fin d’exécution de programme, la chaîne RESULT doit
contenir les octets : 35h (code ASCII de ‘5’), 42h (code ASCII de ‘B’) suivi du caractère de
fin de chaîne ‘$’ en vue d’un affichage.
Le programme ci-dessous réalise cette transformation :

DATA SEGMENT
RESULT DB 3 DUP(?)
DATA ENDS

PILE SEGMENT PARA STACK


DB 256 DUP(?)
PILE ENDS

CODE SEGMENT ; Registres


ASSUME CS:CODE, DS:DATA, SS:PILE ;Adresses AX=4B5Bh
Debut : MOV BX, offset RESULT ; 0000 BX=
MOV AH,AL ; 0003 AX=

QuartH: MOV CL,4 ; 0005


SHR AH,CL ; 0007
AND AH,0Fh ; 0009 AH=

2/3 M.JBILOU
CMP AH,0Ah ; 000C
JAE AlphaH ; 000F IP=
ADD AH,’0’ ; 0011
JMP FinH ; 0014
AlphaH: ADD AH,’A’ ; 0017
SUB AH,0Ah ; 001A
FinH: MOV[BX],AH ; 001D AH=

QuartL: AND AL,0Fh ; 001F AL=


CMP AL,0Ah ; 0021
JAE AlphaL ; 0023 IP=
ADD AL,’0’ ; 0025
JMP FinL ; 0027
AlphaL: ADD AL,’A’ ; 002A
SUB AL,0Ah ; 002C
FinL: MOV Byte ptr[BX+1],AL ; 002E AL=

FinCH: MOV Byte ptr[BX+2],’$’ ; 0031 AX=

Code ENDS
END Debut
Indications : SHR AX, CX Décalage logique du registre AX vers la droite d’un nombre de
bits indiqué par CX. JAE Branchement si 

Compléter les valeurs des registres demandés dans le champ commentaires en fin de ligne ?

N.B : les valeurs de ces registres doivent être données sachant que l’instruction de la ligne
correspondante a déjà été exécutée (si elle l’est !).

Exercice 6 :
1. Complétez la déclaration assembleur pour les données suivantes : le caractère espace, le
caractère retour à la ligne (code ASCII 13), un masque pour ne regarder que le bit 5 des
caractères, une chaîne de caractères "contrôle continue", un entier X, un tableau T de 32
entiers comme X, un entier N donnant la taille du tableau et un autre I pour stocker
l'indice dans le tableau (initialisé à 0).
2. Sachant que la mémoire est organisée en octets et les adresses sont numérotées du haut en
bas, précisez les adresses mémoire correspondant aux différentes variables que vous avez
déclaré en question 1.
exp : Espace → [0000]

Exercice 7 :
En utilisant les données de l’exercice 5, écrire un programme qui range dans X le nombre de
valeurs non nulles dans le tableau T. Utilisez les variables I et N déclarées précédemment.
Attention, Seuls deux registres sont utilisés : AL et BX.
Indications : JGE : saut si  JNE : saut sinon égal

3/3 M.JBILOU

Vous aimerez peut-être aussi