Sunteți pe pagina 1din 13

Lab 1. Sa se determine minimul dintre 3 cuvinte x,y si z si sa se depuna in cuvantul Min.

TITLE program data SEGMENT x DW -33 y DW 340 z DW 120 ?

Min DW data ENDS

cod SEGMENT ASSUME cs:cod , ds:data , ss:data start: mov ax, data mov ds,ax mov ax,x cmp ax,y jl jump1 mov ax,y jump1: cmp ax,z jl jump2 mov ax,z jump2: mov Min,ax mov ax, 4C00h int 21h cod ENDS END start

Lab 2. Se considera doua valori a, b reprezentate pe octet. Sa se scada cele doua valori printr-o tehnica de adresare indirecta. TITLE program2 data SEGMENT a DB 5

b DB 10 Dif DB ? data ENDS cod SEGMENT ASSUME cs:cod , ds:data start: mov ax, data mov ds,ax mov bx,offset a mov al,[bx] sub al,b mov Dif,al mov ax,4C00h int 21h cod ends end start

Lab 3. Sa se ordoneze crescator un sir de n octeti pana la pozitia k (k<n) si descrescator de la pozitia k+1 la n.

TITLE 1 .MODEL SMALL .STACK 256 .DATA x n k ok db 2,4,1,5,7,3,9,6 equ ($-x)/type x equ 4 db ? .CODE start: mov ax,@DATA mov ds,ax

reia: mov ok,0 mov cx,k dec cx xor si,si bucla: mov ax,x[si] cmp ax,x[si+1] jge salt xchg ax,x[si+1]

mov x[si],ax mov ok,1 salt: inc si loop bucla cmp ok,0 jne reia reia2: mov ok,1 mov ax,k+1 mov si,ax xor ax,ax mov cx,n sub cx,k dec cx bucla2: mov ax,x[si] cmp ax,x[si+1] jle salt2 xchg ax,x[si+1] mov x[si],ax mov ok,0 salt2: inc si loop bucla2 cmp ok,1

jne reia2 mov ax,4c00h int 21h END start

Lab 4. Scrieti o secventa de program care converteste un numar de 16 cifre codificate BCD impachetat incepand de la adresa packed intr-un numar BCD neimpachetat incepand de la adresa unpacked. Modificati apoi secventa anterioara astfel incat sa se obtina numarul codificat sub forma unui sir de caractere ASCII si sa se afiseze apoi sirul respectiv. TITLE program .MODEL SMALL .STACK 10h .DATA packed DB unpacked DB .CODE start: mov ax,@DATA mov ds,ax xor si,si xor di,di xor cx,cx mov cx,8 bucla1: xor ax,ax mov al,packed[si] shl ax,4 shr al,4 mov unpacked[di],ah mov unpacked[di+1],al inc si 34h,18h,11h,22h,33h,44h,55h,66h;3418112233445566 16 dup(?)

inc si inc di loop bucla1 xor si,si xor cx,cx mov cx,16 bucla2: mov al,unpacked[si] add al,30h mov dl,al mov ah,02h int 21h inc si loop bucla2

mov ax, 4c00h int 21h end start

Lab 5. Sa sa genereze o matrice de tip nxn cu elemente numere intregi cu semn reprezentate in dubla precizie si sa se determine urma matricei. title program .model small .stack 100h .data mat dd 11,11,12,13 dd 11,-1,12,13 dd 11,12,10,13 dd 11,12,13,-2 suma nr .code begin: mov ax,@data mov ds,ax lea bx,mat lea si,suma xor di,di mov cx,4 bcl: mov ax,[bx][di] mov dx,[bx][di+2] add ax,[si] mov [si],ax adc dx,[si+2] mov [si+2],dx dd ? equ ($-mat)/type mat

add di,20 loop bcl mov ax,4c00h int 21h end begin

Lab 6. Se considera un sir de dublu cuvinte se cere ca fiecare cuvant sa fie rotit la stanga cu un nr de biti egal cu nr de ordine al elementului in sir.

title 6_10 .model small .stack 100h data segment sir dd 2,4,5,6,8 i db 0 n equ ($-sir)/type sir doi dw 2 data ends cod segment assume ds:data,cs:cod start: mov ax,data mov ds,ax mov si,0 mov ax,n mul doi mov cx,ax

bucla:mov bx,cx mov cl,i inc i mov ax,word ptr sir[si] rol ax,cl mov word ptr sir[si],ax add si,4 mov cx,bx loop bucla mov ax,4c00h int 21h cod ends end start

Lab 7.Sa se scrie un subprogram care primeste adresa unui sir de caractere, lungimea sirului si valorile a doua caractere car1 si car2 si inlocuieste toate aparitiile lui car1 in sirul dat cu car2. Utilizand acest subprogram , sa se inlocuiasca toate blancurile dintr-un sir cu liniute de subliniere si apoi sa se afiseze sirul.

.model small .stack 100h data segment sir db 'a bf dfh j shs lkfhs sjdk' n equ $-sir car1 db ' '

car2 db '_' data ends

cod segment assume cs:cod,ds:data schimb proc push ax push si xor si,si repeta: mov al,car1 cmp [bx][si],al je salt inc si loop repeta jmp stop salt: mov al,car2 mov [bx][si],al inc si loop repeta

stop: pop si pop cx ret

schimb endp start: mov ax,data mov ds,ax lea bx,sir mov cx,n call schimb mov ax,4c00h int 21h cod ends end start

Lab 8. Sa se scrie o macroinstructiune care realizeaza interschimbarea continuturilor a doi operanzi cu dimensiunea de un cuvant , memorati in registre sau locatii de memorie. Sa se utilizeze apoi aceasta macroinstructiune intr-un program care realizeaza interschimbarea continuturilor elementelor de acelasi rang a doi vectori de numere intregi cu semn reprezentate in dubla precizie de dimensiune n. schimba macro a,b

push ax push dx mov ax, word ptr a mov dx, word ptr b mov word ptr a, dx mov word ptr b, ax

pop dx

pop ax endm

.model small .stack 100h .data sir1 sir2 n dw dw equ .code 10, 7, 3 5, 11, 6 ($-sir2)/type sir2

start: mov ax, @data mov ds, ax mov cx, n xor si, si

inters: schimba sir1[si], sir2[si] add si, 2

loop inters

mov ax, 4c00h int 21h end start

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