Examen Final ASO Corrige
Examen Final ASO Corrige
Examen Final ASO Corrige
Loop sollicite le registre CX ; elle dc CX puis fait le test avec 0 si =0 sortir de la boucle sinon se brancher vers tiquette.
Exercice n1 : (03pts)
Soit les instructions suivantes : MOV AL, 112 MOV AH, 68 SUB AH, AL Ralisez cette opration en binaire et donnez le contenu du registre AH ? Les oprations signs sont reprsentes en complment 2 : A-B= A+ C2(B) 112= 0111 0000 68= 0100 0100 C2(112) = 1001 0000 0100 0100 1pts 1pts 1pts
68-112= 68+ C2(112)= 0100 0100 + 1001 0000 = 1101 0100 = D4H
Exercice n2 : (05pts)
Soit lalgorithme 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 reprsente 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 lalgorithme ci-dessus en Assembleur ?
code segment assume cs:code, ds:donnee debut : mov ax, donnee mov ds, ax mov bh, 2 mov cx, 1 ;bh va contenir les diviseurs ;CX va contenir la somme des diviseurs ; utiliser uniquement le registre cl et initialiser ch 0
repeat: mov ax, nb div bh cmp jne add nondiv: inc cmp jne repeat mov ax, Nb cmp cx, ax ah, 0 nondiv cl, bh bh bh, 27 ;division 16bit/8bits rsultat dans AL, le reste dans AH ;si reste =0 ajouter bh aux disviseurs (CL) ;faire le test du reste de la division ah ;se branher vers etiq nondiv pour un non diviseur ;si reste=0 ajouter nbre dans bh au diviseur dans CL ;incrmenter le diviseur ;comparer diviseur avec nb-1 pour viter de calculer ;nb div 2 et faire les choses simple ;si bh<>27 aller vers dbut boucle repeat ;charger nb dans 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, mov ah, int 21h jmp fsi parf: mov dx, mov ah, int 21h
offset msg1 9h
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 n3 : (05pts)
Ecrire le code (uniquement les suites dinstructions) Assembleur pour faire la somme de dix (10) lments dun tableau. Le premier tant rang la case mmoire ayant ladresse "0F68H" ? (chaque nombre est sur un octet et la somme peut dpasse 255) mov bx, 0F68H mov cx, 10 ;BX contient ladresse du 1er lment ;CX (compteur) contient le nombre dlment du tableau Page 2/3
;AX contient la somme et initialis 0 ;initialiser DX zro, le sous-registre DL va contenir ;llment lu de la mmoire, DH restera toujours zro et sera ;utile pour laddition des 2 registres AX et DX
;pour lire 1 seul octet de la mmoire ;DH tant zro faire la somme de 2 registre 16bits ;incrmenter BX pour lire lelt suivant du tableau
Page 3/3