Sunteți pe pagina 1din 18

Universitatea de Stat din Moldova

Facultatea Matematic i Informtic

Departamentul Informatica

Timus Vasilie

Lucru individual

la disciplina Limbajul Assembler

Conductor tiinific: _____________ Sturza Greta, magistru n Informatic

Chiinu 2016
Lucrarea de laborator nr. 1

Tema: Reprezentari interne ale datelor


Definirea si initializarea datelor in limbajul de asamblare

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

Tema: Etapele de elaborare a unui program in limbaj de asamblare.


Afisarea unui sir de caractere

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

mov ah, 9 ;numarul functiei se incarca in registrul ah


mov dx, offset hi ;in reg. dx se incarca adresa sirului
int 21h ; apel de intrerupere

mov ah, 4ch


int 21h
end
Tasm:

Sstack segment para stack 'stack'


db 100 dup (?)
sstack ends
sdata segment para 'data'
m1 db 'Hello Word' ,10,13,'$'

sdata ends

scode segment para 'code'


assume cs:scode,ds:sdata
start:
mov ax,sdata
mov ds,ax

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

maxlenght db 20 ; marimea maxima a rindului


curlenght db ? ; marimea curenta a rindului
s1 db 20 dup(?) ; In s1 se vor introduce doar 20 de simboluri
s2 db 8 dup(?) ; In s2 se vor introduce doar simbolurile de care avem nevoie
new_line db 10,13,'$' ; trecerea cursorului intr-un rind nou

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

.code ;initializarea segmentului de cod


mov ax, @data ; Introducerea semnificatiei in @data in registrul ax
mov ds, ax ; Introducem adresa registrului ax in registrul ds

mov ah, 09h ; Afisarea mesajului "introduceti sirul" la ecran


lea dx, mesaj1
int 21h

mov ah, 09h ; Trecerea cursorului intr-un rind nou


lea dx, new_line
int 21h

mov ah, 0ah ;Introducerea sirului cu ajutorul functie 0Ah


mov dx, offset maxlenght
int 21h

mov bl, curlenght ;Introducem in bx numarul de simboluri introduse


mov bh, 0
mov s1[bx],'$'

mov ah, 09h ; Trecerea cursorului intr-un rind nou


lea dx, new_line
int 21h

mov ah, 09h ; Afisarea mesajului "toate caraterele de pe pozotie para" la ecran
lea dx, mesaj2
int 21h

mov al, s1[1] ; Luam simbolul de pe pozitia 1


mov s2[0], al ;Punem pe pozitia 0 in sirul S2 elemntul din S1

mov al, s1[3] ; Luam simbolul de pe pozitia 3


mov s2[1], al ;Punem pe pozitia 1 in sirul S2 elemntul din S1

mov al, s1[5] ; Luam simbolul de pe pozitia 5


mov s2[2], al ;Punem pe pozitia 2 in sirul S2 elemntul din S1

mov al, s1[7] ; Luam simbolul de pe pozitia 7


mov s2[3], al ;Punem pe pozitia 3 in sirul S2 elemntul din S1

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

mov ah, 09h ; Afisarea mesajului "Sirul introdus" la ecran


lea dx, mesaj3
int 21h

mov ah, 09h ; Trecerea cursorului intr-un rind nou


lea dx, new_line
int 21h

mov ah, 09h ; Afisarea sirului S1


lea dx, s1
int 21h

mov ah, 09h ; Trecerea cursorului intr-un rind nou


lea dx, new_line
int 21h

mov ah, 4ch


int 21h
end ;directiva de finalizare a programului
Lucrarea de laborator nr. 4
Tema: Instructiuni de transfer. Introducerea si afisarea unui sir (functiile 3Fh si 40h)

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 ah, 3fh


lea dx, s1
int 21h

mov si, ax
sub si, 2

;----------introducerea :
mov ah, 9
lea dx, a1
int 21h

mov ah, 40h


lea dx, s1
mov bx, 1
mov cx, si ;nr. de caractere ce trebue afisate
int 21h
;------------------------
mov al, s1[1]
push ax
mov s1[0], al
pop ax

mov al, s1[3]


push ax
mov s2+1, al
pop ax

mov al, s1[5]


push ax
mov s2+2, al
pop ax

mov al, s1[7]


push ax
mov s2+3, al
pop ax

mov al, s1[9]


push ax
mov s2+4, al
pop ax

mov al, s1[10]


push ax
mov s2+5, al
pop ax

mov s2 +5, '$'


;-----------afisarea
mov ah, 9
lea dx, a2
int 21h

mov ah, 40h


lea dx, s2
mov bx, 1
mov cx, 5
int 21h
;-----------intreruperea
mov ah, 1
int 21h

mov ah, 4ch


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, mes1
int 21h

mov ah, 3fh


mov dx, offset s2
int 21h ; intreruperea
sub al, 2
mov ah, 0
mov di, ax ;am introdus s2
;afisarea mes2
mov ah, 09h
lea dx, mes2
int 21h
;introducerea caracterului
mov ah,1
int 21h
mov a1,al
mov ah,09h
lea dx,new_line
int 21h
;afisarea mes3
mov ah, 09h
lea dx, mes3
int 21h

mov ah,1 ;am introdus a2


int 21h
mov a2,al

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, 3fh


mov dx, offset s3
int 21h
sub al, 2
mov ah, 0
mov di, ax ;am introdus s3

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, 40h


lea dx,s2
mov bx,1
mov cx, di ;am afisat s2
int 21h

mov ah, 2
mov dl, 20h
int 21h

mov ah, 2
mov dl, 20h
int 21h

mov ah, 40h


lea dx,s3
mov bx,1
mov cx, di ;am afisat s3
int 21h
;sfirsit de program
mov ah,4ch
int 21h
end start
Lucrarea de laborator nr. 6
Tema: Instructiuni de comparare si de salt

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:

mov ah, 09h ;afisarea lui mes1


lea dx, mes1
int 21h

mov ah,1 ;introducerea caracterului


int 21h
mov var, al

cmp var,' ' ;comparam cu spatiul


je sfirsit
cmp var,61h
jl m2
cmp var, 7ah
jg m2
mov ah,09h
lea dx, new_line
int 21h

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

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, 5 ; 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
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
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]

sub al, 30h


mov ah,0
mul mult10
dec di
add varA, ax
mov ax, ten
mul mult10
mov mult10,ax
cmp di,0

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 ah, 3fh

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 ah, 3fh

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 ah, 3fh

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],"-"

m1: mov ah,9


lea dx, s
int 21h

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

mov ah, 4ch


int 21h
end

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