Instrucţiunile de ciclare pot fi folosite pentru a realiza repetarea
unor blocuri de instrucţiuni. Permit o programare simplă a structurilor de control de tip ciclu cu test la sfârşit. Drept contor al ciclului este utilizat registrul cx. Instrucţiunile de ciclare pot transfera controlul la o locaţie (ţintă) aflată în intervalul [-128,127] de octeţi faţă de ele, deci realizează numai transferuri de tip short. Aceste instrucţiuni nu modifică nici un indicator. Instrucțiuni de ciclare
FG. jcxz <etichetă>
S. Salt la instrucţiunea indicată de etichetă dacă cx este 0 AF. Nu modifică nici un indicator. Instrucțiuni de ciclare
FG. loop <etichetă>
S. (cx)= (cx) -1 Dacă (cx)<>0 atunci salt la instrucţiunea indicată de etichetă, în caz contrar se execută instrucţiunea ce urmează după instrucţiunea loop. AF. Nu modifică nici un indicator. Instrucțiuni de ciclare FG. loope /loopz <etichetă> S. (cx)= (cx) -1 Dacă (cx)<>0 şi (zf)=1 atunci salt la instrucţiunea indicată de etichetă, în caz contrar se execută instrucţiunea ce urmează după instrucţiunea loope/loopz. AF. Nu modifică nici un indicator. Condiţia pentru a efectua saltul la etichetă, în plus faţă de instrucţiunea loop este şi condiţia zf=1, adică rezultatul ultimei operaţii din ciclu va trebui să poziţioneze zf pe 1 pentru a permite reluarea ciclului; în caz contrar, execuţia ciclului se va termina. În acest caz sfârşitul ciclului se va datora fie îndeplinirii condiţiei zf=0, fie condiţiei cx=0, fie pentru amândouă. Instrucțiuni de ciclare FG. loopne /loopnz <etichetă> S. (cx)= (cx) -1 Dacă (cx)<>0 şi (zf)=0 atunci salt la instrucţiunea indicată de etichetă, în caz contrar se execută instrucţiunea ce urmează după instrucţiunea loopne/loopnz. AF. Nu modifică nici un indicator.
Sfârşitul ciclului se va datora fie îndeplinirii condiţiei zf=1, fie condiţiei
cx=0, fie pentru amândouă. Sarcini: mov ax, 5 mov bx, 33 mov bx, 6 mov cx, 6 m1: mov cx, 3 mov cx, 5 m: add ax, 3 sub bx, 4 m2: add bx, cx loop m loop m1 loop m2 Sarcini mov cx, 7 mov cx, 6 mov ax,30 mov cx, 7 mov ax,5 mov ax,10 mov bx,12 mov ax,25 mov bx,20 m1: add ax,5 add ax,bx mov bx,10 cmp ax,bx dec cx mov cx, 10 xchg ax,bx jg m jcxz m2 m: inc ax cmp ax,bx m1: add ax,cx jmp m1 loop m jb m loop m1 m2: mov bx,2 mov cl,10 add ax,bx m: mov dl,9 mul bx add bl,cl m: inc bx div dl add ax,bx div bl add ax,cx add ah,al neg ax add ah,al dec cx jcxz m1 jmp m m1: div bl Sarcini:
1. Fie M[1..n] un tablou de numere întregi, unde n=10. Scieți secvența de ce
calculează numărul elementelor egale cu 6.
2. Scrieți secvența de program ce calculează numărul literelor mari dintr-un sir