Vous êtes sur la page 1sur 3

Ministère de l’Enseignement Supérieur et de la Recherche Scientifique Année Universitaire : 2011/2012

Université Dr Tahar Moulay de Saïda


Faculté des Sciences et de la Technologie
Département de Mathématique et d’Informatique
ème
Licence : 2 Année Informatique UE 7 : Architecture des Ordinateurs
Corrigé Examen Final (Semestre 3)

Questions de cours : (7pts)


1. Citez les registres utilisés pour le mode d’adressage indirect ? 1,5pts
BX, BP, DI, SI
2. Quel est le mode d’adressage utilisé dans cette instruction ? Est ce qu’il est autorisé pour ce genre de registre ?
Si non corrigez l’instruction ? 1,5pts
Adressage Immédiat, non il n’est pas autorisé pour les registres de segments, MOV AX, 01F5H ; MOV DS, AX
MOV DS, 01F5H
3. Nous voulons changer les bits 5 et 12 du registre AX à zéro sans changer les autres, donnez l’instruction
assembleur qui convient ?
AND AX, 1111011111101111 1pts
4. Dans une architecture Intel, Quel est l’ordre de lecture/écriture d’un Word mémoire ? Comment appelle-t-on
ce type d’accès ? Donnez un exemple de transfert mémoire à registre explicitant ce type. 1,5pts
L’ordre de lect/ecriture : en premier l’octet en haut, le deuxième l’octet en bas ; little-endian
00100h 2 B
AX 1F 2B 00101h 1 F

5. Quel registre sollicite l’instruction "LOOP étiquète" ? Expliquez ce procéder. 1,5pts


Loop sollicite le registre CX ; elle déc CX puis fait le test avec 0 si =0 sortir de la boucle sinon se brancher vers
étiquette.
Exercice n°1 : (03pts)
Soit les instructions suivantes :
MOV AL, 112
MOV AH, 68
SUB AH, AL
Réalisez cette opération en binaire et donnez le contenu du registre AH ?
Les opérations signés sont représentées en complément à 2 : A-B= A+ Cà2(B)
112= 0111 0000 Cà2(112) = 1001 0000 1pts
68= 0100 0100 0100 0100 1pts
68-112= 68+ Cà2(112)= 0100 0100 + 1001 0000 = 1101 0100 = D4H 1pts
Exercice n°2 : (05pts)
Soit l’algorithme en langage évolué :
n := 28 // n est un nombre entier
som_div := 1 // som_div est la somme des diviseurs de n
i := 2 // i représente les diviseurs de n
REPETER
SI ( n mod i = 0)
ALORS som_div := som_div + i
FINSI
i := i + 1
JUSQU’À ( i = n – 1 )
SI som_div = n

Page 1/3
ALORS ecrire ('parfait')
SINON ecrire('non parfait')
FINSI
- Traduire l’algorithme ci-dessus en Assembleur ?
code segment
assume cs:code, ds:donnee
debut :
mov ax, donnee
mov ds, ax

mov bh, 2 ;bh va contenir les diviseurs


mov cx, 1 ;CX va contenir la somme des diviseurs
; utiliser uniquement le registre cl et initialiser ch à 0

repeat:
mov ax, nb
div bh ;division 16bit/8bits résultat dans AL, le reste dans AH
;si reste =0 ajouter bh aux disviseurs (CL)
cmp ah, 0 ;faire le test du reste de la division ah
jne nondiv ;se branher vers etiq nondiv pour un non diviseur
add cl, bh ;si reste=0 ajouter nbre dans bh au diviseur dans CL
nondiv: inc bh ;incrémenter le diviseur
cmp bh, 27 ;comparer diviseur avec nb-1 pour éviter de calculer
;nb div 2 et faire les choses simple
jne repeat ;si bh<>27 aller vers début boucle repeat

mov ax, Nb ;charger nb dans AX


cmp cx, ax ;cl contient la somme des diviseurs et CH est vide donc
;CX contient la somme des div pour pouvoir tester 2 reg
;de 16bits
je parf
mov dx, offset msg2
mov ah, 09h
int 21h
jmp fsi
parf: mov dx, offset msg1
mov ah, 9h
int 21h

fsi: mov ah, 4ch


int 21h
code ends

donnee segment
nb dw 28
msg1 db "Nombre Parfait", '$'
msg2 db "Nombre non Parfait", '$'
donnee ends

end debut
Exercice n°3 : (05pts)
Ecrire le code (uniquement les suites d’instructions) Assembleur pour faire la somme de dix (10) éléments d’un
tableau. Le premier étant rangé à la case mémoire ayant l’adresse "0F68H" ? (chaque nombre est sur un octet et la
somme peut dépassée 255)

mov bx, 0F68H ;BX contient l’adresse du 1er élément


mov cx, 10 ;CX (compteur) contient le nombre d’élément du tableau
Page 2/3
mov ax, 0 ;AX contient la somme et initialisé à 0
mov dx, 0 ;initialiser DX à zéro, le sous-registre DL va contenir
;l’élément lu de la mémoire, DH restera toujours zéro et sera
;utile pour l’addition des 2 registres AX et DX

repeat:
mov dl, [bx] ;pour lire 1 seul octet de la mémoire
add ax, dx ;DH étant à zéro faire la somme de 2 registre 16bits
inc bx ;incrémenter BX pour lire l’elt suivant du tableau
loop repeat

Page 3/3

Vous aimerez peut-être aussi