Documente Academic
Documente Profesional
Documente Cultură
Departamentul Informatica
Timus Vasilie
Lucru individual
Chiinu 2016
Lucrarea de laborator nr. 1
Sarcini de lucru:
1. Transformati in sistemul binar, octal si hexazecimal numerele zecimale:
5) (46)10 = (0010 1110)2 (46)10 = (56)8 (46)10 = (2)16
(35)10 = (0010 0011)2 (35)10 = (43)8 (35)10 = (23)16
(119)10 = (0111 0111)2 (119)10 = (167)8 (119)10 = (77)16
2. Transformati in sistemul binar numerele hexazecimale:
5) 7Ch = 0111 1100b 72EBh = 0111 0010 1110 1011b
31DB = 0011 0001 1101 1011b
3. Transformati in sistemul octal si hexazecimal numerele binare:
5) 1111 0010b = 3628 = 216
0110 1010b = 1428 = 6216
1111 1100b = 3748 = 16
4. Reprezentati in cod complimentar pe 8 pozitii binare urmatoarele numere:
5) -46 : 0010 1110b codul direct al nr. +46
1101 0001b codul invers
1101 0010b codul complementar al numarului -46
-35: 0010 0011b codul direct al nr. +35
1101 1100b codul invers
1101 1101b codul complementar al numarului -35
-94: 0101 1110b codul direct al nr. +94
1010 0001b codul invers
1010 0010b codul complementar al numarului -94
5. Fie data urmatoarea consecutivitate de definitii de date:
5) a db lucrarea_1,10,13
b db 2 dup(0)
c dw 38,-15,78,41,12
d dd 678Efh,3489,456
a) Determinati citi octeti va rezerva aceasta consecutivitate de definitii de date:
a db ... ;rezerva 12*1 = 12 octeti
b db ... ;rezerva 2*1 = 2 octeti
c dw ... ;rezerva 5*2 = 10 octeti
d dd ... ;rezerva 4*4 = 16 octeti
b) Determinati adresa relativa a fiecarei locatii de memorie:
a db ... ;adresa relativa 0000h
b db ... ;adresa relativa 000Ch
c dw ... ;adresa relativa 000Eh
d dd ... ;adresa relativa 0018h
Lucrarea de laborator nr. 2
Sarcini de lucru:
Elaborati programul ce afiseaza la consola sirul Hello World in stiluri masm si tasm.
Masm:
.model small
.stack
.data
hi db 'Hello World' ,10,13,'$'
.code
mov ax, @data
mov ds, ax
sdata ends
mov ah,09h
lea dx,m1
int 21h
mov ah,4ch
int 21h
scode ends
end start
Lucrarea de laborator nr. 3
Tema: Moduri de adresare a operanzilor in limbaj de asamblare.
Introducerea si afisarea unui sir (functiile 09h si 0Ah)
Sarcini de lucru:
Sa se scrie un program in limbaj de asamblare conform variantelor de mai jos.
V5. Sa se introduca un sir cu lungimea de cel putin 10 caractere.Sa se copieze din sirul s1
in sirul s2 toate caracterele de pe pozitie para.Sa se afiseze la consola ambele siruri.
.model small
.stack
.data
mesaj1 db 10,13, 'introduceti sirul',10,13, '$' ;afisarea mesajului pe ecran
mesaj2 db 10,13, 'toate caracterele de pe pozitie para',10,13, '$' ;afisarea mesajului pe ecran
mesaj3 db 10,13, 'sirul introdus',10,13, '$' ;afisarea mesajului pe ecran
mov ah, 09h ; Afisarea mesajului "toate caraterele de pe pozotie para" la ecran
lea dx, mesaj2
int 21h
mov al,s1[9]
mov s2[4],al
mov s2[5],"$"
mov ah, 09h ; Afisarea sirului S2
lea dx, s2
int 21h
mov ah, 09h ; Afisarea mesajului "toate caracterele de pe pozitie para" la ecran
lea dx, new_line
int 21h
Sarcini de lucru:
Sa se scrie un program conform variantei din lucrarea nr. 3.Introducerea si afisarea vor fi
realizate folosind functiile 3fh si 40h respectiv.Caracterele vor fi copiate prin intermediul stivei
utilizind instructiunile push si pop.
.model small
.stack
.data
a db 10,13,'introduceti sirul ',10,13,'$'
a1 db 10,13,'sirul introdus ',10,13,'$'
a2 db 10,13,'toate caracterele de pe pozitie para ',10,13,'$'
s1 db 100 dup(?),'$'
s2 db 3 dup(?)
.code
mov ax, @data
mov ds, ax
mov ah, 9
lea dx, a
int 21h
mov si, ax
sub si, 2
;----------introducerea :
mov ah, 9
lea dx, a1
int 21h
end
Lucrarea de laborator nr. 5
Tema: Fisiere executabile. Introducerea si afisarea unui caracter
Sarcini de lucru:
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 tiny
.code
org 100h
start:
jmp main
s1 db 'abcd','$' ;
mes1 db 'introdu s2',10,13,'$'
s2 db 50 dup(?)
mes2 db 'introdu a1',10,13,'$'
a1 db ?
mes3 db 'introdu a2',10,13,'$'
a2 db ?
mes4 db 'introdu a3',10,13,'$'
a3 db ?
mes5 db 'introdu s3',10,13,'$'
s3 db 50 dup(?)
mes6 db 'rezultatul',10,13,'$'
new_line db 10,13,'$'
main:
mov ah,09h
lea dx,new_line
int 21h
;afisarea lui mes4
mov ah, 09h
lea dx, mes4
int 21h
;introducerea caracterului
mov ah,1
int 21h
mov a3,al
mov ah,09h
lea dx,new_line
int 21h
;afisarea mes5
mov ah, 09h
lea dx, mes5
int 21h
mov ah,09h
lea dx,new_line
int 21h
;afisarea mes6
mov ah, 09h
lea dx, mes6
int 21h
mov ah,09h
lea dx,s1
int 21h ;am afisat s1
mov ah,2
mov dl,a1
int 21h ;am afisat a1
;afisarea la consola a caracterului introdus
mov ah, 2
mov dl, 20h
int 21h
mov ah, 2
mov dl, 20h
int 21h
mov ah,2
mov dl,a3 ;am afisat a3
int 21h
mov ah,2
mov dl,a2 ;am afisat a2
int 21h
mov ah,2
mov dl,a2
int 21h
mov ah, 2
mov dl, 20h
int 21h
mov ah, 2
mov dl, 20h
int 21h
mov ah, 2
mov dl, 20h
int 21h
mov ah, 2
mov dl, 20h
int 21h
Sarcini de lucru:
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 tiny
.code
org 100h
start:
jmp main
var db ?
mes1 db 10,13,'introdu caracter',10,13,'$'
mes2 db 10,13,'Eroare. Caracterul introdus nu este o litera minuscula',10,13,'$'
new_line db 10,13,'$'
main:
m1:
sub var,20h ;transforma din carcter minuscul in majuscul
mov ah, 2
mov dl, var ;afisarea caracteruluiu
int 21h
jmp main
m2:
mov ah, 09h
lea dx,mes2
int 21h
jmp main
sfirsit:
mov ah, 4ch
int 21h
end start
Lucrarea de laborator nr. 7
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
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
varA dw 0
varB dw 0
varC dw 0
varD dw 0
mult10 dw ?
ten dw 10
sir db 8 dup (?)
s db 6 dup (' '),"$"
.code
mov ax,@data
mov ds,ax
mov mult10,1
mov ah, 3fh
mov bx, 0
lea dx, sir
int 21h
mov di,ax
sub di, 3
cmp di, 0
je bA
aA:
mov al,sir[di]
jne aA
cmp sir[di],'-'
je mA1
bA:
mov al,sir[di]
sub al,30h
mov ah,0
mul mult10
add varA,ax
jmp intb
mA1: neg varA
intb:mov mult10, 1
mov bx, 0
lea dx, sir
int 21h
mov di, ax
sub di, 3
cmp di,0
je bB
aB:
mov al, sir[di]
sub al,30h
mov ah,0
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 bx, 0
lea dx, sir
int 21h
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]
sub al,30h
mov ah, 0
mul mult10
add varC, ax
jmp intd
mC1: neg varC
intd:
mov mult10, 1
mov bx, 0
lea dx, sir
int 21h
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; ax=varA
add bx,varB ;ax=a+b
add bx,varC ;ax=a+b+c
div varA ; (a+b+c)/a
mul varD ; (a+b+c)/a*d
mov di, ax
push ax
mov si, 10
mov di,5
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 m1
mov s[di],"-"
mov ah,4ch
int 21h
end
Lucrarea de laborator nr. 8
Tema: Cicluri Proceduri
Sarcini de lucru:
5. y=20
=0 /2
.model small
.stack
.data
a db 2
s db 6 dup (" "),"$"
.code
mov ax, @data
mov ds, ax
mov bx, 0
mov dx, 0
mov 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
div a
mov ah, 0
add dx,ax
inc bx
loop a1
mov ax, dx
push ax
mov si, 10
mov di, 5
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 sfirsit
mov s[di], "-"
Sfirsit: mov ah, 9
lea dx,s
int 21h