You are on page 1of 6

1-Scrieti o fct. care sa caute un caracter intr-un sir de caractere. Functia returneaza numarul primei pozitii a caracterului in sir.

Daca respectivul caracter nu apare in sir, functia returneaza 0. Modul de transmitere al parametrilor este la latitudinea programatorului.

2.Produsul scalar a 2 vectori code segment assume cs:code, ds:code start: mov ax,cs mov ds,ax mov si,offset vector1 mov ch,0 mov cl,[dim] loop1: xor al,al add al,[si] sub al,'0';aduna "0"ca sa transforme in cod ascii xor bl,bl add bl,[si+6] sub bl,'0' mul bl; inmulteste al cu bl add ch,al;aduna in ch<-ch+al inc si dec cl jnz loop1 call afisare endprog:mov ax, 4C00h ; terminare program (apel functie DOS 4CH) int 21h afisare PROC mov ah, 0 mov al, ch mov bl, 10 div bl ; (AH:AX) / BL => AL=cit, AH = rest ; AL=cifra zecilor, AH=cifra unitatilor (AN) mov bx, ax mov dl, bl add dl, '0' mov ah, 2 int 21h mov dl, bh add dl, '0' mov ah, 2 int 21h ret afisare ENDP dim db 6 vector1 db '1','2','3','4','5','6' vector2 db '5','4','5','5','2','4' END start

code SEGMENT ASSUME CS :code, ds:code, es:code cauta Proc mov dl,cl mOV CH,0 repnz SCASB je found found: mov AH,CL sub dl,ah mov ah,dl dec ah ret cauta ENDP start: mov ax,cs mov ds,ax mov es,ax mov di,offset sir mov cl,13 mov al,'i' call cauta mov ax,4C00H int 21H sir DB "colocviu la uP" code ENDS END start

3-Scrieti o functie care transforma minusculele in majuscule lasand orice alt caracter neschimbat. Se opereaza pe un sir ASCII ('A'-'Z', 41h-51h,'a'-'z', 61h-7Ah). code segment assume cs:code, ds:code org 100h sir DB 255 DUP (?) CR equ 0Ah LF equ 0DH start: mov ax, cs mov ds, ax mov cx, 0 mov di, offset sir loopc: mov ah, 1 int 21H cmp al, LF je print1 mov [di], al inc di inc cx jmp loopc print1: mov di, offset sir mov dl, CR mov ah, 2 int 21h mov dl, LF int 21h print: mov ah, 2 mov dl, [di] cmp dl, 'a' jge firstc pr: int 21h inc di dec cx cmp cx, 0 jne print jmp final firstc: cmp dl, 'z' jle modc jmp pr modc: sub dl, 20h jmp pr final: mov ah, 4ch int 21h code ENDS END start

4-Scrieti o functie care sa aiba ca parametru de intrare un pointer la un sir de caractere terminat cu 0. Functia returneaza un pointer la un alt sir, cu caracterele inversate. Toate caracterele de control (cod ASCII < 32h) se vor inlocui cu constanta 20h. code segment assume cs:code, ds:code org 100h sir DB 255 DUP (?) CR equ 0Ah LF equ 0DH start: mov ax, cs mov ds, ax mov cx, 0 mov di, offset sir loopc: mov ah, 1 int 21H cmp al, LF je print1 mov [di], al inc di inc cx jmp loopc print1: mov di, offset sir mov dl, CR mov ah, 2 int 21h mov dl, LF int 21h print: mov ah, 2 mov dl, [di] cmp dl, 'a' jge firstc pr: int 21h inc di dec cx cmp cx, 0 jne print jmp final firstc: cmp dl, 'z' jle modc jmp pr modc: sub dl, 20h jmp pr final: mov ah, 4ch int 21h code ENDS END start

5-Scrieti un program care preia de la tastatura doua siruri de maxim 10 caractere terminate cu caracterul CR (Carrige Return, cod ASCII 0DH) si le compara. In caz ca sunt identice, se afiseaza pe ecran mesajul "ADEVARAT", altfel se afiseaza mesajul "FALS". Primul sir, al doilea sir si mesajul vor apare pe linii diferite, asa ca in exemplele urmatoare. code SEGMENT ASSUME cs:code, ds:code start: mov AX, CS mov DS, AX mov ES, AX mov CX, 10 mov DI, 0 ETICH2: mov AH, 01H int 21H comp AL, 13 jl ETICH1 mov[SIR1+DI], AL inc DI loop ETICH2 ETCH1: mov AH, 02 mov DL, 10 int 21H mov SIR1_MAX, DI mov CX, 10 mov DI,0 ETICH4: mov AH, 01H int 21H cmp AL, 13 jl ETICH3 mov[SIR2+DI], AL inc DI loop ETICH4 mov AH, 02 mov DL, 10 int 21H ETICH3: mov SIR2_MAX, DI cmp DI, SIR1_MAX jl ETICH5 mov AH, 09 mov DX, offset SIR_FALS int 21H jmp FIN ETICH5: mov BL, 0 mov CX, SIR1_MAX mov SI, offset SIR1 mov DI, offset SIR2 REPE CMPSB SIR1 SIR2 jne ETICH6

mov AH, 09 mov DX, offset SIR_ADV int 21H jmp FIN ETICH6: int BL mov AH, 09 mov DX, offset SIR_FALS int 21H jmp FIN FIN: mov AH, 4CH int 21H SIR1 DB 10 dup(0) SIR2 DB 10 dup(0) SIR1.MAX DW 0 SIR2.MAX DW 0 SIR_FALS DB "FALS", 10, 13, '$' SIR_ADV DB "ADEVARAT", 10, 13, '$' code ENDS END start 6-Scrieti un program care sa primeasca de la tastatura doua numere binare reprezentate pe cite 8 biti si sa afiseze rezultatul produsului lor sub forma: 00001100*00000010=0000000000011000 code segment assume cs:code, ds:code org 100h CR equ 0AH LF equ 0DH sir DB 16 dup (0),'$' sir1 DB 8 dup (?), "$" sir2 DB 8 dup (?), "$" start: mov ax, cs mov ds, ax mov cl, 128 mov dx, 0 mov bx, 0 mov si, offset sir1 read1: mov ah, 1 int 21h mov [si], al sub al, '0' inc si mul cx add bl, al mov al, cl div 2 mov cl, al loop read1 line1: mov ah, 2 mov dl, LF

int 21h mov dl, CR int 21h mov cl, 128 mov si, offset sir2 read2: mov ah, 1 int 21h mov [si], al sub al, '0' inc si mul cx add bh, al mov al, cl div 2 mov cl, al loop read2 line2: mov ah, 2 mov dl, LF int 21h mov dl, CR int 21h mult: mov al, bh mul bl mov cx, 15 ;mov bl, 2 divide: ;div bl ;cmp ah, 1 shr ax, 1 jc store prov: loop divide jmp afis store: mov di, offset sir mov al, 31h add di, cx mov [di], al jmp prov afis: mov ah, 9 mov dx, offset sir1 int 21h mov ah, 2 mov dl, LF int 21h mov dl, CR int 21h mov ah, 9 mov dx, offset sir2 int 21h mov ah, 2 mov dl, LF int 21h mov dl, CR int 21h mov ah, 9

mov dx, offset sir int 21h mov ah, 4ch int 21h code ENDS END start

7-Scrieti un program care sa citeasca de la tastatura trei litere majuscule {A, B,...Z} sa scrie pe ecran un spatiu (cod ASCII 20H) si apoi sa le scrie in ordine alfabetica. Pastrati cele trei litere tastate in registrele BH, BL, si CL. code segment assume cs:code, ds:code start: mov ax, cs mov ds, ax mov ah, 1 int 21h mov bh, al mov ah, 1 int 21h mov bl, al mov ah, 1 int 21h mov cl, al cmp1: cmp bh, bl jg inter1 jmp cmp2 inter1: mov ch, bh mov bh, bl mov bl, ch cmp2: cmp bl, cl jg inter2 jmp cmp3 inter2: mov ch, bl mov bl, cl mov cl, ch cmp3: cmp bh, bl jg inter3 jmp afis inter3: mov ch, bh mov bh, bl mov bl, ch afis: mov ah, 2 mov dl, 20h int 21h mov dl, bh int 21h mov dl, bl int 21h mov dl, cl int 21h mov ah, 4ch int 21h code ENDS END start

8-Scrieti un program care sa utilizeze functii ODS si sa functioneze dupa cum urmeaza. Utilizatorul tasteaza doua litere. Daca una dintre ele este 'D', prograul afiseaza in continuare cuvantul DA urmat de o linie noua, altfel este afisat cuvantul NU urmat de o linie noua. Secventa de evenimente se repeta de doua ori,dupa care controlul este intors in DOS. code segment assume cs:code, ds:code sir1 DB "DA$" sir2 DB "NU$" start: mov ax, cs mov ds, ax mov di, offset sir1 mov si, offset sir2 mov cx, 2 loop1: mov ah, 1 int 21h mov bh, al mov ah, 1 int 21h mov bl, al cmp bl, 'D' je print1 jmp cmp2 print1: mov ah, 02 mov dl, 0Ah int 21h mov dl, 0Dh int 21h mov ah, 9 mov dx, offset sir1 int 21h jmp final cmp2: cmp bh, 'D' je print1 mov ah, 02 mov dl, 0Ah int 21h mov dl, 0Dh int 21h mov ah, 9 mov dx, offset sir2 int 21h mov ah, 02 mov dl, 0Ah int 21h mov dl, 0Dh int 21h

loop loop1 final: mov ah, 4ch int 21h code ENDS END start 9-Scrieti un program care sa primeasca de la tastatura un numar N, intre 1 si 9. Programul va afisa pe ecran un patrat cu latura N umplut cu caractere '*', coltul stanga sus fiindpe randul 10, coloana 10. code segment assume cs:code, ds:code start: mov ax, cs mov ds, ax mov cx, 25 mov ah, 1 int 21h sub al, '0' push ax clear: mov ah, 2 mov dl, 0Ah int 21h mov dl, 0Dh int 21h loop clear pop ax mov cl, al push ax mov ch, 10 loop1: mov bx, 0 mov ah, 2 mov dh, ch mov dl, 10 int 10h inc ch pop ax mov bh, al push ax loop2: mov ah, 2 mov dl, '*' int 21h dec bh jnz loop2 dec cl jnz loop1 mov ah, 4ch int 21h code ENDS END start

You might also like