Documente Academic
Documente Profesional
Documente Cultură
Lucru individual
la disciplina Limbaje de asamblare
Chiinu - 2016
Laboratorul 3
S se ntroduc un ir cu lungimea de 10 caractere. S se copieze din irul s1 n irul s2 caracterele de pe
poziiile 2,4 i 6. S se afiseze la consol ambele iruri
.code
start:
mov ax, @data ;initializarea registrului de segment ds
mov ds, ax
sub ax,2
mov ah, 0 ;scade din lungimea sirului introdus 2 unitati (10,13)
mov si, ax
mov ah, 40h ;new line
lea dx, nl
mov bx,1
mov cx, 2
int 21h
m1:
add var, 20h
mov ah, 2 ;afiseaza pe ecran
mov dl, var
int 21h
jmp M
m2:
mov ah, 9 ;afiseaza s2
lea dx, s2
int 21h
jmp M
exit:
mov ah,4ch ;funcia de ieire
int 21h
end start
Laboratorul 7
a) Calcularea valorii unei expresii, terminii creia sunt numere fr semn
definite n program:
1.(170-16)/2+12*5
.model small ;directiva de declarare a modelului
.stack 100 ;initalizarea segmentului de stiva
.data ;iniializarea segmentului de date
a db 170
b db 16
c db 2
d db 12
e db 5
.code ;iniializarea segmentului de cod
start:
mov ax, @data ;iniializarea registrului ds
mov ds, ax
mov bh, 0
mov ax, bx
mov bl, 10 ; bl= 10
div bl ; al=13 ah=7
mov bh, ah ; bh=7
mov ah, 0
div bl ; al=1 ah=3
mov bl, ah
a1:
mov al, sir[di] ;se pune elementul in al
sub al, 30h ;se transforma caracterul in numar
mov ah, 0
mul mult10 ;se inmulteste numarul obtinut cu 10^i
dec di ;se deplaseaza indicele cu o pozitie la stinga
add n, ax
mov ax, ten ; in ax valoarea 10
mul mult10
mov mult10,ax
cmp di, 0 ;se verifica daca au fost convertite toate caracterele
;inafara de primul care poate fi semnul
jne a1
jmp m2
m1: neg n ;in locatia de memorie n- numarul negativ introdus
m2:
mov ax, n
mov a, ax
mov n, 0
mov mult10, 1
a4:
mov al, sir[di]
jne a4
jmp mm2
mmm1: neg n
mm2:
mov ax, n
mov b, ax
mov n, 0
mov mult10, 1
mov di, ax
sub di, 3
cmp di, 0
je a7
a6:
mov al, sir[di]
sub al, 30h
mov ah, 0
mul mult10
dec di
add n, ax
mov ax, ten
mul mult10
mov mult10,ax
cmp di, 0
jne a6
jmp mmb2
mmmb1: neg n
mmb2:
mov ax, n
mov c, ax
mov n, 0
mov mult10, 1
mov di, ax
sub di, 3
cmp di, 0
je a9
a8:
mov al, sir[di]
jmp mmd2
mmmd1: neg n
mmd2:
mov ax, n
mov d, ax
mov dx, 0
cmp ax, 0
jge m
neg ax
m:
div si
add dl, 30h
mov s[di], dl
xor dx, dx
dec di
cmp ax, 0
jne m
pop ax
cmp ax, 0
jge mm1
mov s[di],"-"
mm1:
mov ah, 9
lea dx, s
int 21h
mov ah, 4ch ;functia de iesire
int 21h
end main
Laboratorul 8
S se scrie un program ce calculeaz valoarea urmtoarei expresii folosind
proceduri:
15
Y= i * 6
i 1
;CALCULEAZA SUMA
mov cx, 15 ; numarul iteratiilor (15-1+1)
mov ax, 0 ;acumulator pentru rezultat
mov bx, 1 ;valoarea intiala i=1
m: add ax, bx
inc bx ;incrementarea i
loop m
mov di, 6
mul di ;suma*6
;afisarea numarului
push ax
mov si, 10
mov di, 5
mov dx, 0
cmp ax, 0
jge mm
neg ax
mm:
div si
add dl, 30h
mov s[di], dl
xor dx, dx
dec di
cmp ax, 0
jne mm
pop ax
cmp ax, 0
jge mm1
mov s[di],"-"
mm1:
mov ah, 9
lea dx, s
int 21h
mov bh, 0
mov ax, bx
m1:
mov ah,9 ;se afiseaza m12
lea dx,m12
int 21h