Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
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.
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
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.
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
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.
Copyright © 2024 - Toate drepturile rezervate