Documente Academic
Documente Profesional
Documente Cultură
Grupa:K1641
Realizat de: Doscoci I.
Verificat de: Butnaru M.
Chisinau 2020
Cuprins
I1 : Lucru individual nr.1
1. Fisiere executabile. Introducerea si afisarea unui character………..3
2. Instructiuni de comparare si de salt…………………………………………….6
3. Macrourile…………………………………………………………………………………..8
2
Tema: Fisiere executabile. Introducerea si afisarea unui caracter
a)
5. Este definit sirul s1. Sa se scrie un program asembler ,ce introduce de la
tastatura
caracterele a1,a2,a3, sirurile s2,s3 si afiseaza concatenarea elementelor introduse
in modul
urmator:
Introduceti sirul s2:
S2
Introduceti caracterul a1:
A1
Introduceti caracterul a2:
A2
Introduceti caracterul a3:
A3
Introduceti sirul s3:
S3
Rezultatul obtinut:
S1a1bba3a2bbs2bbs3 (b spatiu liber)
.model small
.stack
.data
a1 db ?
a2 db ?
a3 db ?
s2 db 50 dup(' '),'$'
s3 db 50 dup(' '),'$'
m1 db 'introduceti sirul s2:',10,13,'$'
m2 db 10,13,'introduceti caracterul a1:',10,13,'$'
m3 db 10,13,'introduceti caracterul a2:',10,13,'$'
m4 db 10,13,'introduceti caracterul a3:',10,13,'$'
m5 db 10,13,'introduceti sirul s3:',10,13,'$'
m6 db 10,13,'rezultatul este:',10,13,'$'
s1 db 'asd','$'
.code
mov ax,@data
mov ds,ax
3
mov ah,09h
lea dx,m1
int 21h
mov ah,03fh
mov bx,0
lea dx,s2
int 21h
sub al,2
mov ah,0
mov si,ax
mov s2[si],'$'
mov ah,09h
lea dx,m2
int 21h
mov ah,1
int 21h
mov a1,al
mov ah,09h
lea dx,m3
int 21h
mov ah,1
int 21h
mov a2,al
mov ah,09h
lea dx,m4
int 21h
mov ah,1
int 21h
mov a3,al
mov ah,09h
lea dx,m5
int 21h
mov ah,03fh
mov bx,0
lea dx,s3
int 21h
sub al,2
mov ah,0
mov di,ax
mov s3[di],'$'
mov ah,09h
lea dx,m6
int 21h
mov ah,09h
lea dx,s1
int 21h
mov ah,2
mov dl,a1
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,02h
mov dl,20h
int 21h
mov ah,02h
mov dl,' '
int 21h
4
mov ah,2
mov dl,a3
int 21h
mov ah,2
mov dl,a2
int 21h
mov ah,2
mov dl,a2
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,09h
lea dx,s2
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,09h
lea dx,s3
int 21h
mov ah,4ch
int 21h
end
5
Tema: Instructiuni de comparare si de salt
Sarcini de lucru:
b)
5. Sa se scrie un program , care verifica daca caracterul introdus de la tastatura
este o litera
minuscula,atunci sa se afiseze echivalentul lui majuscul, in caz contrar sa se
afiseze mesajul
,,Eroare. Caracterul introdus nu este o litera minuscula’’.
De exemplu:
Introduceti un caracter : r
R
Sau Introduceti u caracter: 6
Eroare. Caracterul introdus nu este o litera minuscula.
.model small
.stack
.data
m db 10,13,'Introduceti un caracter: ',10,13,'$'
m2 db 10,13,'$'
m1 db 10,13,'Eroare.Caracterul introdus nu este o litera
minuscula',10,13,'$'
s db ?
.code
mov ax,@data ;initializarea registrului ds
mov ds,ax
inceput:
mov al,cl
sub al,20h ;operatia de adunare
mov ah,2 ;afisarea la consola a simbolului introdus
mov dl,al
int 21h
en:
mov ah,4ch ;sfirsitul programului
int 21h
end
7
Tema: Macrourile
Sarcini de lucru:
c)
Modificati un program in care sa utilizati macrodefinitii
.model small
afisare macro n,p
mov ah,n
lea dx,p
int 21h
endm
.stack
.data
a1 db ?
a2 db ?
a3 db ?
s2 db 50 dup(' '),'$'
s3 db 50 dup(' '),'$'
m1 db 'introduceti sirul s2:',10,13,'$'
m2 db 10,13,'introduceti caracterul a1:',10,13,'$'
m3 db 10,13,'introduceti caracterul a2:',10,13,'$'
m4 db 10,13,'introduceti caracterul a3:',10,13,'$'
m5 db 10,13,'introduceti sirul s3:',10,13,'$'
m6 db 10,13,'rezultatul este:',10,13,'$'
s1 db 'asd','$'
.code
mov ax,@data
mov ds,ax
afisare 09h,m1
mov ah,03fh
mov bx,0
lea dx,s2
int 21h
sub al,2
mov ah,0
mov si,ax
mov s2[si],'$'
afisare 09h,m2
mov ah,1
int 21h
mov a1,al
afisare 09h,m3
mov ah,1
int 21h
mov a2,al
afisare 09h,m4
mov ah,1
int 21h
mov a3,al
afisare 09h,m5
8
mov ah,03fh
mov bx,0
lea dx,s3
int 21h
sub al,2
mov ah,0
mov di,ax
mov s3[di],'$'
afisare 09h,m6
mov ah,09h
lea dx,s1
int 21h
mov ah,2
mov dl,a1
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,02h
mov dl,20h
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,2
mov dl,a3
int 21h
mov ah,2
mov dl,a2
int 21h
mov ah,2
mov dl,a2
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,09h
lea dx,s2
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,02h
mov dl,' '
int 21h
mov ah,09h
lea dx,s3
int 21h
mov ah,4ch
int 21h
end
9
Tema: Instructiuni aritmetice
Sarcini de lucru:
a) Calcularea valorii unei expresii, terminii careia sunt numere fara semn definite
in
program:
5. (21+7)/14-4*5
model small
.stack
.data
a db 21
b db 7
c db 14
d db 4
e db 5
mess1 db " (21+7)/14-4*5=",'$'
s db 6 dup(" "),'$'
.code
mov ax,@data
mov ds,ax
mov ah,09h ; afisarea mess1
lea dx,mess1
int 21h
;-calc. val. expres------------------
mov al,a ; al=21
add al,b ; al=21+7
mov ah,0
div c ; al=(21+7)/14
mov bx,ax ; bx=(21+7)/14
mov al,d ; al=4
mul e ; al=4*5
sub bx,ax ; bx=(21+7)/14-4*5
mov ax,bx ; ax=(21+7)/14-4*5
;-conveertirea nr. intr-un sir de caract.
push ax ; pastrarea valorii initiale a reg ax
mov si,10 ; nr. se va imparti consecutiv la 10
mov di, 2 ; pozitionare pe ultima pozitie a sirului in care va fi pus
rezultatul
mov dx,0
cmp ax,0
jge m
neg ax
m:
div si
add dl,30h
mov s[di],dl
10
xor dx,dx
dec di
cmp ax,0
jne m
pop ax
cmp ax,0
jge m1
mov s[di], "-"
m1:
mov ah,9
lea dx,s
int 21h
mov ah,4ch
int 21h
end
b) Calcularea valorii unei expresii, termenii careia sunt numere cu semn introduse
de la tastatura:
5. 10*a/(a+b)+10*b/(c+d) a,b,c – db d – dw
.model small
.stack
.data
q db 10
varA dw 0
varB dw 0
varC dw 0
varD dw 0
mult10 dw 1 ;puterile lui 10
ten dw 10
sir db 8 dup (?) ;sirul initial
s db 6 dup (' '),"$"
.code
11
mov ax,@data
mov ds,ax
mov di, ax
sub di, 3
cmp di,0
je bB
aB:
mov al, sir[di]
sub al,30h
mov ah,0
12
mul mult10
dec di
add varB, ax
mov ax, ten
mul mult10
mov mult10,ax
cmp di, 0
jne aB
cmp sir[di],'-'
je mB1
bB:
mov al, sir[di]
sub al,30h
mov ah, 0
mul mult10
add varB, ax
jmp intc
mB1:
neg varB
intc:
mov mult10, 1
mov di, ax
sub di, 3
cmp di,0
je bC
aC:
mov al, sir[di]
sub al,30h
mov ah,0
mul mult10
dec di
add varC, ax
mov ax, ten
mul mult10
mov mult10, ax
cmp di, 0
jne aC
cmp sir[di],'-'
je mC1
bC:
mov al, sir[di]
13
sub al,30h
mov ah, 0
mul mult10
add varC,ax
jmp intd
mC1:
neg varC
intd:
mov mult10, 1
mov di, ax
sub di, 3
cmp di,0
je bD
aD:
mov al, sir[di]
sub al,30h
mov ah,0
mul mult10
dec di
add varD, ax
mov ax, ten
mul mult10
mov mult10, ax
cmp di, 0
jne aD
cmp sir[di],'-'
je mD1
bD:
mov al, sir[di]
sub al,30h
mov ah, 0
mul mult10
add varD, ax
jmp m2
mD1:
neg varD
m2:
;10*a/(a+b)+10*b/(c+d)
mov bx,varA ;bx=a
add bx,varB ;bx=a+b
mov ax,varA ;ax=a
mul q ;10*a
mov dx,0 ;dx=0
div bx ;ax=10*a/(a+b)
mov di,ax ;di=ax
14
mov cx,varC ;cx=c
add cx,varD ;cx=c+d
mov ax,varB ;ax=b
mul q ;10*b
mov dx,0 ;dx=0
div cx ;ax=10*b/(c+d)
add ax,di ;ax+di=10*a/(a+b)+10*b/(c+d)
15
Tema: Cicluri Proceduri
Sarcini de lucru:
c)
5. 𝑦 = ∑20
𝑖=0 𝑖/2
.model small
.stack
.data
a db 2
s db 6 dup (" "),"$"
.code
mov ax, @data
mov ds, ax
mov bx, 0 ;bx=0
mov dx, 0 ;dx=0
mov cx, 21 ;cx=21
a1:
;0/2+1/2+2/2+3/2+4/2+5/2+6/2+7/2+82+9/2+10/2+11/2+12/2+13/2+14/2+15/2+
16/2+17/2+18/2+19/2+20/2
mov ax, bx ;ax=bx
div a ;
mov ah, 0 ;ah=0
add dx,ax ;dx=ax
inc bx ;bx+1
loop a1 ;daca ciclul nu este finalizat salt la eticheta a1
16
dec di
cmp ax,0
jne m
pop ax
cmp ax, 0
jge sfirsit
mov s[di], "-"
Sfirsit: mov ah, 9
lea dx,s
int 21h
Concluzie: In concluzie lucrul in assembler este destul de usor este nevoie doar sa
fii un pic atent (activ) in timpul orelor sa depui un pic de efort si se va primi tot
17