Sunteți pe pagina 1din 2

Fiind dat un sir de caractere, sa se gaseasca numarul de aparitii ale caracterului 'e'.

Programul va folosi: - in DI adrsa de inceput a sirului - in AL caracterul cautat - in DX numarul de aparitii Rezolvare: org 100h; mov ax,cs mov ds,ax mov es,ax jmp short start car equ 'e' sir db 'acesta este un exemplu' lsir equ $-sir start: mov di,offset sir xor ax,ax cld mov al,car mov cx,lsir xor dx,dx ; in dx 0h a2: repne scasb je a1 cmp cx,0 je fin a1: inc dx jmp a2 fin: int 20h end Inversarea unui sir de caractere prin intemediul stivei. Rezolvare: org 100h jmp short start sursa db 1,2,3,4 lsir equ $-sursa dest db lsir dup(77h) start: mov ax,cs mov ds,ax mov es,ax xor ax,ax mov dl,0h mov si,offset sursa mov di,offset dest mov cx,lsir cld et1: lodsb push ax loop et1 mov cx,lsir et2: pop ax stosb loop et2 int 20h end

Sa se calculeze lungimea unui sir stiind ca se termina in 0h. In registrul al se va afla lungimea sirului. Rezolvare: org 100h jmp short start sir db 'Acesta este un exemplu',0h lsir db ? start: mov ax,cs mov ds,ax mov es,ax xor ax,ax mov dl,0h mov si,offset sir a2: cmp [si],dl je fin inc al inc si mov lsir,al jmp a2 fin: int 20h end

S se scrie o procedur de gsire a maximului ntr-un ir de numere ntregi cu semn, reprezentate pe cte un octet. org 100h mov ax,cs mov ds,ax jmp start ;salt la prima instructiune sir db 0f0h,0f3h,05h,76h,89h,76h,85h,93h start mov bx,offset sir ;incarca in BX adresa sirului. mov cx,offset start-offset sir ;incarca in CX lungimea sirului call getmax ;apelare rutina de maxim. int 20h ;revenire in DOS. getmax push bx ;conserva registrele push cx ;BX, CX si fanioanele. pushf mov al,80h ;incarca in AL cel mai mic numar cu semn de un octet adr1 cmp al,[bx] ;compara AL cu un octet din sir jl adr3 ;daca AL<octet salt la adr3 adr2 inc bx ;trece la octetul urmator ndrumar de laborator 63 ;al sirului. loop adr1 ;repeta de la adresa adr1 ;pana la sfirsitul sirului. popf ;reface registrele BX, CX pop cx ;si fanioanele. pop bx ret ;revenire in programul ;apelant. adr3 mov al,[bx] ;inacarca in AL octetul cu ;adresa in BX. mov dx,bx ;incarca in DX adresa octetului. jmp adr2 ;salt la adr2.

S se ordoneze n ordine descresctoare sau cresctoare un ir de cuvinte (de cte 2 octei). Textul programului org 100h mov ax,cs mov ds,ax jmp start ;salt la prima instructiune sir dw 2032h,2037h,2031h,2033h,2035h,2036h,2034h lungsir dw ? ;lungimea sirului

-->> continuare| | ^ mov si,00 ;seteaza SI la inceputul ;sirului mov cx,lungsir ;incarca CX cu nr. de iteratii

start mov bp,offset sir mov si,0 mov [lungsir],(offset lungsir)-(offset sir)-2 ror lungsir,1 desc mov bl,00 ;ordoneaza sirul in call ordon ;ordine descrescatoare cresc mov bl,0ffh ;ordoneaza sirul in call ordon ;ordine crescatoare int 20h ;revenire in programul apelant ordon mov si,0 ;seteaza SI la inceputul sirului mov cx,lungsir ;incarca in CX nr. de iteratii bucla call getord ;cheama procedura GETORD ;(seteaza sau nu CF) jc invers ;daca ordinea nu este buna, salt inc si ;seteaza SI pentru elementul inc si ;urmator loop bucla ;repeta de la BUCLA ret invers mov ax,[bp+si] ;interschimb intre locatiile xchg ax,[bp+si+2] ;de memorie BP+SI si BP+SI+2 xchg ax,[bp+si] ;folosind registrul AX ca ;registru temporar

jmp bucla getord mov ax,[bp+si] ;compara elementele succesive ;de index SI si SI+2 cmp ax,[bp+si+2] lahf ;incarca fanioanele in ;registrul AH si seteaza xor ah,bl ;conform lui BL rol ah,1 ;pregateste continutul lui ;AH pentru tranfer sahf ;in fanioane ret

S-ar putea să vă placă și