Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» LABORATOR informatica


LABORATOR informatica


LABORATOR NR. 7

Se cere o procedura care determina de cite ori un caracter/octet apare intr-un text/sir.Se cere programul care determina de cite ori apare caracterul '.' in text si de cite ori apare octetul '75h'. Rezultatul se depune in ncar si noct.

Varianta 1

data segment

text db 'Acesta.. este..un.program.'



n1 EQU ($-text)/type text

sir db 65,75h,44,75h,88,9,83

n2 EQU ($-sir)/type sir

car db '.'

oct db 75h

ncar db ?

noct db ?

data ends

cod segment

assume ds:data,cs:cod

cauta PROC

;in al caracterul acutat

;in bx adresa sirului

;in di adresa rezultatului

;in cx nr.elem din sir

push si

xor si,si

bucla: cmp [bx][si],al

jnz salt

inc byte ptr[di]

salt: inc si

loop bucla

pop si

ret

cauta ENDP

start: mov ax,data

mov ds,ax

;pregatirea primului apel

lea bx,text ;incarca adresa text

mov cx,n1 ;in cx transfera numarul de caractere

mov al,car ;in al caracterul cautat

lea di,ncar ;incarca adresa rezultat

CALL cauta ;apelul procedurii

;pregatirea urmatorului apel

lea bx,sir

mov cx,n2

mov al,oct

lea di,noct

CALL cauta

mov ax,4c00h

int 21h

cod ends

end start

Varianta 2

data segment

text db 'Acesta.. este..un.program.'

n1 EQU ($-text)/type text

sir db 65,75h,44,75h,88,9,83

n2 EQU ($-sir)/type sir

car db '.'

oct db 75h

ncar db ?

noct db ?

data ends

cod segment

assume ds:data,cs:cod

start: mov ax,data

mov ds,ax

;pregatirea primului apel

lea bx,text ;incarca adresa text

mov cx,n1 ;in cx transfera numarul de caractere

mov al,car ;in al caracterul cautat

lea di,ncar ;incarca adresa rezultat

CALL cauta ;apelul procedurii

;pregatirea urmatorului apel

lea bx,sir

mov cx,n2

mov al,oct

lea di,noct

CALL cauta

mov ax,4c00h

int 21h

cauta PROC

;in al caracterul acutat

;in bx adresa sirului

;in di adresa rezultatului

;in cx nr.elem din sir

push si

xor si,si

bucla: cmp [bx][si],al

jnz salt

inc byte ptr[di]

salt: inc si

loop bucla

pop si

ret

cauta ENDP

cod ends

end start

Se cere o procedura care determina nr de biti egali cu 0 dintr-un cuvint. Pentru un sir de cuvinte date se cere sa se genereze un sir de cuvinte care vor contine numarul de biti egali cu 0 din cuvintul corespunzator.

data segment

cuv dw 7,9,0,15,33,255,88,127

n    EQU ($-cuv)/type cuv

nr0cuv dw n dup(?)

data ends

cod segment

assume ds:data,cs:cod

NRZERO    PROC

push cx

push si

push ax

mov cx,16 ;nr de biti dintr-un cuvint

mov ax,[bx]

incuvint:shr ax,1

jc este_unu

inc word ptr [di]

este_unu:loop incuvint

pop ax

pop si

pop cx

ret

NRZERO ENDP

start: mov ax,data

mov ds,ax

mov cx,n

xor si,si

;pregatire apel

altcuv: lea bx,cuv[si]

lea di,nr0cuv[si]

call NRZERO

add si,2

loop altcuv

mov ax,4c00h

int 21h

cod ends

end start

Se cere o procedura care determina daca cele doua tetrade dintr-un octet sunt egale. Pentru un sir de octeti sa se stabileasca cati octeti au tetrada superioara egala cu cea inferioara. Se va folosi procedura de mai sus.

data segment

sir1 db 5,55h,66h,67h,8ah,0aah,0cch

n1 equ ($-sir1)/type sir1

sir2 db 'D', 'f', 'j', 'a', 'w'

n2 equ ($-sir2)/type sir2

no1 db ?

no2 db ?

data ends

cod segment

assume ds:data, cs:cod

start:mov ax, data

mov ds, ax

mov cx, n1

xor si, si

bucla1: mov al, sir1[si]; prin al se transmite octetul

mov bl,0 ; se returneaza 1 daca cele doua tetrade sunt egale

call tetrade

shr bl,1

jnc nuesteunu

inc no1

nuesteunu: nop

inc si

loop bucla1

; al doilea apel

mov cx, n2

xor si, si

bucla2: mov al, sir2[si]

mov bl,0

call tetrade

ror bl,1

jnc nueunu

inc no2

nueunu: inc si

loop bucla2

mov ax, 4c00h

int 21h

tetrade PROC

push cx

mov cl,4

mov ah,al

ror al,4

cmp al, ah

jne diferite

mov bl,1 ; sunt egale

diferite: nop

pop cx

ret

tetrade ENDP

cod ends

end start

. Sa se programul pentru calculul sumei elementelor unui tablou folosind o procedura care pimeste ca parametrii adreasa unde se va depune rezultatul, adresa lungimii tablului, adresa tabloului. Tabela (tabloul) contine doar adresele parametrilor ea se cheama tabela de adrese si se poate organiza sub forma unui tablou deoarece toate elementele vor avea aceeasi dimensiune in numar de octeti.

.model small

.stack 30h

data segment

tab    struc

adrs dw ? ; adresa sumei vectorului

lung dw ? ; adresa lungimii vectorului

adrv dw ? ; adresa vectorului

tab    ends

vec    dw 1,2,3,4

n    equ ($-vec)/type vec

s    dw ?

tabel tab <>

data    ends

cod segment

assume ds:data,cs:cod

start: mov ax,data

mov ds,ax

lea bx,tabel

lea si,vec

mov (tab ptr [bx]).adrv,si

mov si,n

mov (tab ptr [bx]).lung,si

lea si,s

mov (tab ptr [bx]).adrs,si

call far ptr suma

mov ax,4c00h

int 21h

suma proc

push ax

push cx

push si

push di

xor ax,ax

mov cx,(tab ptr [bx]).lung

mov si,(tab ptr [bx]).adrv

mov di,(tab ptr [bx]).adrs

urm: add ax,[si]

add si,2

loop urm

mov [di],ax

pop di

pop si

pop cx

pop ax

ret

suma endp

cod ends

end start

Se cere o procedura care calculeaza suma elementelor unui vector organizat pe cuvant.

data segment

sir dw 7,9,15,3,2

n equ ($-sir)/type sir

suma dw ?

data ends

stiva segment

dw 100 dup(?)

varf LABEL WORD

stiva ends

cod segment

assume ds:data, cs:cod, ss:stiva

start:mov ax, data

mov ds, ax

mov ax, stiva

mov ss, ax

mov sp, offset varf

mov ax, offset sir

push ax

push n

mov ax, offset suma

push ax

call aduna

mov ax, 4c00h

int 21h

aduna PROC

push bp

mov bp, sp

push ax

push cx

push si

push di

xor ax, ax

mov cx, [bp]+6 ; in cx se inscrie n

mov bx, [bp]+8 ; in bx se inscrie adresa sir

mov di, [bp]+4 ; in di se inscrie adresa suma

xor si,si

et: add ax, [bx][si]

add si, 2

loop et

mov [di], ax

pop di

pop si

pop cx

pop ax

pop bp

ret 6

aduna ENDP

cod ends

end start

Se cere o procedura care calculeaza suma elementelor unui vector organizat pe cuvant.

Varianta 1

data segment

sir dw 7,9,15,3,2

n equ ($-sir)/type sir

suma dw ?

data ends

cod segment

assume ds:data, cs:cod

start: mov ax, data

mov ds, ax

lea bx,sir

mov cx,n

call NEAR PTR aduna

mov suma, ax

mov ax, 4c00h

int 21h

aduna PROC NEAR

push si

xor ax, ax

xor si,si

et: add ax, [bx][si]

add si, 2

loop et

pop si

ret

aduna ENDP

cod ends

end start

Varianta 2

data segment

sir dw 7,9,15,3,2

n equ ($-sir)/type sir

suma dw ?

data ends

cod segment

assume ds:data, cs:cod

start: mov ax, data

mov ds, ax

lea bx,sir

mov cx,n

lea di,suma

call NEAR PTR aduna

mov ax, 4c00h

int 21h

aduna PROC NEAR

push si

xor ax, ax

xor si,si

et: add ax, [bx][si]

add si, 2

loop et

mov [di], ax

pop si

ret

aduna ENDP

cod ends

end start

Teme pentru studiul individual:

Sa se scrie un subprogram pentru calculul sumei elementelor pare ale unui sir de octeti.

Sa se scrie un subprogram pentru calculul sumei elementelor impare ale unui sir de dublucuvinte.

Sa se scrie un subprogram pentru calculul sumei elementelor din pozitiile impare ale unui sir de cuvinte.

Sa se scrie un subprogram pentru gasirea elementelor dintr-un sir de cuvinte care au bitul 4 setat, rezultatul se va scrie intr-un alt sir astfel incat daca elementul din pozitia i are bitul 4 setat atunci in sirul rezultat pe pozitia i avem 1 altfel avem 0.

Se cere o procedura care determina daca cele doua cuvinte dintr-un dublucuvant nu sunt egale. Pentru un sir de dublucuvinte sa se stabileasca cate dublucuvinte au cuvantul superior diferit de cel inferior. Se va folosi procedura de mai sus.

Scrieti un subprogram cauta care cauta intr‑un tablou de numere intregi un element dat. Procedura va intoarce indexul elementului in tablou (numarat incepind de la 1) daca elementul a fost gasit, altfel intoarce valoarea 0.

Scrieti o multime de subprograme pentru realizarea unor operatii aritmetice fara semn pe operanzi reprezentati pe cate un dublu cuvant.

(a) adunare: aduna cei 2 operanzi;

(b) scadere: se scad cei 2 operanzi;

(c) inmultire: inmulteste cei doi operanzi si intoarce cei mai putin semnificativi 32 de biti ai rezultatului;

(d) impartire: imparte cei doi operanzi intorcind citul.

Scrieti un subprogram evalueaza pentru evaluarea expresiei a*x+b. Parametrii a, b, x sint intregi fara semn in dubla precizie.

Scrieti un subprogram pentru evaluarea polinomului a(x) = a0+a1*x++an*xn. Procedura primeste tabloul coeficientilor, numarul elementelor acestui tablou si valoarea lui x.

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. Utilizind aceast subprogram, sa se inlocuiasca toate blancurile dintr‑un sir cu liniute de subliniere si apoi sa se afiseze sirul.

Sa se scrie un subprogram care primeste adresa unui sir de caractere si lungimea sirului, inlocuieste toate secventele succesive de blancuri din sir cu cite un singur blanc si intoarce noua lungime a sirului.

Sa se scrie un subprogram care determina suma elementelor unui vector de numere intregi cu semn reprezentate in dubla precizie. Procedura primeste adresa sirului si numarul de componente ale acestuia si intoarce suma calculata.

Sa se scrie un subprogram care determina rasturnatul pe loc al unui sir de caractere terminat cu caracterul null (codul ASCII 00h). Subprogramul primeste adresa sirului de caractere.

Sa se scrie un subprogram care parcurge un tablou de numere intregi cu semn reprezentate in dubla precizie si inlocuieste fiecare element al tabloului cu valoarea sa absoluta. Subprogramul primeste adresa tabloului si adresa unei locatii de memorie unde se afla numarul de componente ale vectorului.

Se considera o tabela, fiecare intrare din tabela avind dimensiunea de un octet, ultimul element al tabelei avind valoarea 0ffh. Sa se scrie un subprogram care determina numarul de intrari in tabela care indeplinesc urmatoarele conditii:

-au bitul 6 setat;

‑contin exact patru biti 1 setati;

Subprogramul primeste adresa tabelei si adresa unde se va depune numarul determinat.

Se considera un tablou de numere intregi cu semn reprezentate pe c`te un cuvint, ordonat crescator. Sa se scrie un subprogram care realizeaza o cautare binara a unei valori in acest sir. Procedura primeste adresa vectorului, numarul de elemente ale vectorului si intoarce pozitia in care valoarea respectiva a fost determinata in sir. Daca valoarea cautata nu a fost gasita in sir, se intoarce valoarea zero.

Sa se scrie un subprogram pentru calculul sumei valorilor absolute a trei numere intregi cu semn reprezentate in dubla precizie.

Sa se scrie un subprogram pentru ordonarea crescatoare a elementelor unui tablou avind trei componente numere intregi cu semn reprezentate in dubla precizie. Subprogramul primeste adresa tabloului.





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate