les tudiants:
Bentarfa Islam Souigat Khaled Chaabani Sara Hafiane Tarek G2 G2 G2 G5
Benhamida Tayeb G5
Question de cours:
a. Quelle est la taille de lespace mmoire actif un moment donn pour un 8086 ? Justifier
votre rponse. a. La taille maximale de la mmoire active pour 8086 est de 256 KB. 64 Ko pour le programme 64 Ko pour pile 128 Ko pour les donnes 64+64+128=256Ko b. Sur une carte mre sont disposs un microprocesseur 8 bits dont le bus dadresse est de 24 bits, ainsi que des circuits mmoires de 8 bits de capacit de 512 Ko.
- Quelle est la capacit dadressage mmoire du processeur ? - Si lon suppose que la totalit de lespace adressable est occup par les circuits mmoires,
combien de circuits sont prsents sur cette carte mre ? b.la capacit dadressage mmoire du processure est :224 _ 512 = 219 _
224 219
c. Prciser quelles sont les oprations effectues lors de lexcution de linstruction POP AX. c. les operation effectues lors de lexcuton de linstruction : pop AX [] ;le sommet de la pile es copi dans AX + ;incrmenter le register SP par 2 + ;incrmenter le register IP par 1 d. Quelle est la diffrence entre une instruction et une directive ? d. Des dfinitions de donnes dclares par des directives (mots spciaux interprts par l'assembleur, les instructions (qui sont en quelque sorte le coeur du programme), la premire devant tre prcde d'une tiquette, c'est--dire par un nom qu'on lui donne. Celles-ci sont regroupes dans le segment d'instructions
e. Expliquer les directives : DB, DW, EQU, DUP. DB: (Define byte): dfinit une variable de 8 bits : c a d elle rserve un espace mmoire d'un octet : donc les valeurs qu'on peut stocker pour cette directive sont comprises entre 0 et 255 ( pour les nombres non signs ) et de -128 jusqu' 127 pour les nombres signs . DW: ( define word) : dfinit une variable de 16 bits : c a d elle rserve un espace mmoire d'un mot : donc les valeurs qu'on peut stocker pour cette directive sont comprises entre 0 et 65535 ( pour les nombres non signs ) et de -32768 jusqu' 32767 pour les nombres signs . EQU : (equal) :la directive pour dclarer une constante DUP: (DIrective dup) Lorsque l'on veut dclarer un tableau de n cases, toutes initialises la mme valeur, on utilise la directive dup. f. Expliquer linstruction LEA. Quelle est son utilit ? LEA signifie : Load Effective Address: LEA calcule l'offset de la source (BX + SI) et le place dans la destination (AX). g. Expliquer les instructions : LAHF et SAHF. Quelle est leur utilit ? LAHF: Cette instruction permet de transfrer les bits d'indicateurs du registre d'tat vers le registre AH. SAHF: Cette instruction permet de copier les bits du registre AH dans l'octet de poids faible dans le registre des drapeaux (les indicateurs d'tat). h. Expliquer les instructions : CLC, STC et CMC. Quelle est leur utilit ? CLC: L'instruction clc efface (clear) le drapeau de retenue (carry) en le mettant 0. Toute retenue qui aurait t obtenue (drapeau 1) par un calcul prcdant est donc ainsi perdue (drapeau 0). STC: L'instruction stc positionne (set) le drapeau de retenue (carry) 1. CMC: L'instruction CMC complmente un, c'est--dire inverse l'tat du drapeau : s'il tait 1, il passe 0, et vice versa. i. Expliquer les instructions : CLI et STI. Quelle est leur utilit ? CLI: CLI (Clear Interrupt) est l'instruction contraire, qui dsarme le drapeau d'interruption. Permet principalement d'activer/dsactiver les interruptions hardware. STI: STI (Set Interrupt) sert armer le drapeau d'interruption.
j. Expliquer les instructions : CLD et STD. Quelle est leur utilit ? CLD: Cette instruction met l'indicateur d'tat DF 0. Les oprations sur les chanes de caractres STD: Cette instruction permet de fixer l'indicateur de direction (DF) la valeur 1. 2. Soit un nombre de 8 bits dans laccumulateur (AL). Donner une instruction permettant de mettre 0 ses 7 bits de poids faible. 2.lnstruction: and AL,10000000b 3. On considre un nombre contenu dans AL, ce nombre ne peut avoir que 2 valeurs : 00H ou 80H. Donner une instruction permettant de mettre AL 01H sil contenait 80H, et de laisser 00H sil contenait 00H. 3. ROL AL,1 4. Parmi les instructions suivantes, indiquer celles qui sont incorrectes et les corriger.
Instruction Correcte (Oui / Non) Proposition de correction
PUSH AL MOV AX,[1] ROL AX,CX CMP [AX],4 IDIV 2 MOV AX,BL
PUSH AX ROL AX,CL CMP AX,4 MOV BL,2 IDIV BL MOV AX,0 MO AL,BL
- Expliquer lopration effectue par chaque instruction. - Mentionner le mode dadressage pour chaque instruction. - Dans le cas de ladressage de la mmoire, donner ladresse logique de la donne et calculer son adresse physique (Sachant que DS = 0500H). - Quelle est la fonction ralise par ce programme ?
5. le programme:
MOV AL, 72H ADD AL, 78H ADC AH, 00H SAR AX, 1 MOV [3000H], AL HLT ;entrer la valeure 72h dans le rgistre de 8bits AL(mode Immdiat) ;aditionner le contenu de AL avec 78h( mode immdiat ) ;aditionner le contenu de AH avec le contenu de CF ( mode immdiat ) ; dcaler AX de 1 position vers la droit et conserve le bit de singe (le bit le plus fort) ;sauvgarder le contenu de AL dans laddress logic[ 0500h:3000h] ;fin de programme.
Lopration effectu: laddition de 72h avec 78h et aditionner la somme avec R le retenu dans CF ensuit effectu un dcalage arithmtique vers ldroit (SAR=DIVISION SUR 2)dans le register AX et sauvegarder le resultat dans ladresse logic [DS:3000h] . Loperation:
++
A=72h=114d B=78h=120d R:le retenu (dans CF) Ecrire des programmes en assembleur 8086 qui permettent de : 6. Evaluer lexpression suivante et stocker le rsultat en mmoire ladresse 0300H : Y = (4x2 - 3x) / (2x -7). Tel que x est un nombre positif (1 octet) stock en mmoire ladresse 0100H. Attention : il faut prendre en considration que le dnominateur peut tre nul. 6. le programe: jmp start x db ? 3X dw ? 2X7 dw ? start: mov al,[100h] mov x,al mov bl,2 mul bl sub ax,7 mov 2X7,AX cmp ax,0 je fin mov ax,0 mov al,x mov bl,3 mul bl mov 3X,AX
mov ax,0 ;AX=0 mov al,x ;al=x MUL al ;ax= 2 mov bl,4 MUL bl ;ax= 4 2 sub ax,3x ;ax=(4 2 -3x) mov bx,2X7 ;bx=(2x-7) div bx ;[dx,ax]=(4 2 -3x)/(2x-7);dx:le retenu de division,ax : le resulata mov [300h],AX ;sauvegarder le contenu de AX dans lespace memoir{301h,300h} mov [300h]+2,dx ;sauvegarder le contenu de DX dans lespace memoir{303h,302h} fin: hlt ;fin de programme
7. Faire la somme de N premiers entiers naturels ne dpassant pas une valeur MAXI positive fixe en avance et stocke en mmoire ladresse 1000H. N est inconnu au dpart. Le but du programme est de trouver N et de le stocker en mmoire ladresse 2000H. Exemple : Si MAXI = 12, alors SOMME = 1 + 2 + 3 + 4 = 10 Donc N = 4. 7. le programme : jmp start maxi db ? start: mov al,[1000h] mov maxi,al mov ax,0 mov cx,0 etq1: inc cl add al,cl cmp al,maxi jng etq1 dec cl mov [2000h],cl hlt 8. Compter le nombre de 0 dans un mot binaire de 16 bits. Le rsultat sera stock dans la case mmoire dadresse 100H. 8. le programme: MOV CX,16 MOV ax,[102h]
neg ax sub ax,1 tt:sar ax,1 adc bl,0 loop tt mov [100h],bl hlt
9. Donner la taille (le nombre dlments) dun tableau stock en mmoire ladresse 0200H, sachant que le dernier lment est 99H. Le rsultat sera stock ladresse 0550H. 9. le programme: mov si,-1 tt:inc si mov al,[200h][si] cmp al,99h jnz tt mov [0550h],si hlt
10. Calculer le PGDC (plus grand diviseur commun) de deux nombres se trouvant aux adresses 200H et 201H ; le rsultat sera plac ladresse 202H. 10. le programe: jmp start a db ? b db ? start: mov al,[200h] mov bl,[201h] mov a,al mov b,bl mov al,a ; On met la valeur de a dans le registre al mov bl,b ; On met la valeur de b dans le registre bl mov dl,0 ; On met la valeur 0 dans le registre dl top: div bl ; on fait la division du couple (dl,al) par bl mov cl,0 ; on met la valeur 0 dans le registre cl cmp cl,dl ; Le registre dl contient le reste de la divison, qu'on compare la valeur contenu dans le registre cl
jnz retour ; si c'est different de 0 on fait un saut au label retour jmp fin ;si c'est = 0, on fait un saut au label fin retour: mov al,bl ; on remet le diviseur dans le registre al mov bl,dl ; et le reste dans le registre bl mov dl,0 ; le registre dl va prendre la valeur 0 jmp top ;et on retourne au label top pour une nouvelle division fin: mov [202h],bl; a la fin, [202h] va contenir le dernier reste non nul mov al,1 mov bl,0 HLT
11. Inverser lordre des 20 lments dun tableau plac en mmoire ladresse 100H. Exemple :
11. le programme: mov cx,10 mov si,100h mov di,100h+20 etq1: mov al,[si] mov bl,[di] mov [di],al mov [si],bl inc si dec di loop etq1 hlt