TRAVAUX DIRIGÉS N°4 (CORRECTIONS)
1- Donner le mode d’adressage de chaque opérande ainsi que le résultat de chaque instruction (calculer les
adresses physiques) :
MOV AX, 0102h
MOV DS, AX
MOV [F104], AX
MOV DX, 1241h
MOV DS, DX
MOV [1412h], DX
MOV AL,[1413]
R1- MOV AX, 0102h : Mode Immédiat, AX=0102h
MOV DS, AX : Mode Registre, DS = 0102h
MOV [F1040], AX : Mode Direct, Ad. physique =F104h + 10h x 102h =10124h
MOV DX, 1241h : Mode Immédiat, DX=1241h
MOV DS, DX : Mode Registre, DS = 1241h
MOV [1412h], DX : Mode Direct, Ad. Physique = 1412h + 10h x 1241h = 13822h
MOV AL,[1413h] : Mode Direct, AL = 12h
2- CS=A11Bh DS=B222h SS=C339h ES=2EA0h IP=789Ah
AX=3456h BX=2305h CX=4567h DX=789Ah
SP=1579h BP=268Ah SI=1111h DI=2222h
a- Donnez l’adresse physique :
- de la prochaine instruction à exécuter
- du sommet de la pile
- pointée par BP
- pointée par SI
- pointée par DI
b- Indiquer l’action des instructions suivantes :
- MOV [BX+5],SI
- MOV AX,[DI+Ah]
- MOIV [BP+SI+4], BX
R2- a1- [Link]. = IP + CS x 10h = A8A4Ah
a2- [Link]. = SP + SS x 10h = C4909h
a3- [Link]. = BP + SS x 10h = C5A1Ah
a4- [Link]. = SI + DS x 10h = B33B1h
a5- [Link]. = DI + DS x 10h = B44C2h
b1- Ad.P. = BX + 5 + 10h x DS = B452Ah
b2- Ad.P. = DI + Ah + 10h x DS = B444Ch,
b3- Ad.P.= BP + SI + 4 + 10h x SS = C6B26
3- Ecrire un programme qui calcule la somme de deux mots stockés aux adresses [500h] et [600h] et stocker le
résultat dans [1000h]
R3-
MOV AX, [500h]
ADD AX,[600h]
MOV [1000h],AX
4- Ecrire un programme qui fait la somme de deux double mots stockés à [200h] et [400h], le résultat sera mis
dans [600h].
R4-
MOV AX, [200h]
MOV BX,[201h]
ADD AX, [400h]
ADC BX, [402h]
MOV [600h], AX
MOV [602h], BX
5- Ecrire un programme qui calcule (sous forme d’une boucle), la somme S = 1+2+3+4+5+6+7 et mettre le
résultat dans DX.
R5-
MOV DX,0
MOV BX, 1
Boucle : ADD DX,BX
INC BX
CMP BX,7
JBE boucle
6- Ecrire ujn programme qui calcule (sous forme d’une boucle) la somme de i² et mettre le résultat dans DX.
R6-
MOV DX,0
MOV BL,1
Boucle : MOV AL,BL
MUL BL
ADD DX,AX
INC BL
CMP BL,7
JBE Boucle
7- Soit une chaîne de caractères à l’adresse 1200h. Ecrire un programme qui met sa longueur dans CX.
R7- BX : pointeur, CX : compteur
MOV CX,0
MOV BX,1200h
Boucle : MOV AL, [BX]
CMP AL,0
JE fin
INC CX
INC BX
JMP Boucle
Fin :
8- Soit une chaîne de caractères à l’adresse 1200h. Ecrire un programme qui compte le nombre de « A » dans
cette chaîne, le résultat est mis dans DX.
R8- BX : pointeur, DX : compteur
MOV DX,0
MOV BX, 1200h
Boucle : MOV AL, [BX]
CMP AL,0
JE fin
CMP AL, 41h ; code ASCII du caractère « A »
JNE suite
INC DX
Suite : INC BX
JMP boucle
Fin :
9- Soit une chaîne de caractères à l’adresse 1200h. Ecrire un programme qui convertit les caractères minuscules
de cette chaîne en majuscules.
R9-
A= 0100 0001 Z =0101 1010
a = 0110 0001 z = 0111 1010
MOV BX,1200h
Boucle : MOV AL,[BX]
CMP AL,0
JE fin
CMP AL,61h ; comparer avec A
JB suite
CMP AL,7A ; comparer avec Z
JA suite
AND AL, DFh ; DF =1101 1111
MOV [BX], AL
Suite : INC BX
JMP Boucle
Fin :