Sunteți pe pagina 1din 8

6.4.

Transmiterea parametrilor printr-o zon de memorie


In cele mai multe cazuri trebuie transmii spre subprograme un numr mare de
parametrii i numai pot fi folosite registrele care sunt ntr-un numr foarte mic. Atunci se
folosete transmisia parametrilor printr-o zon de memorie. Metoda este mai puin
performant dect transmiterea parametrilor prin tabel de adrese, deoarece toi
parametrii trebuie grupai n zona de memorie ( nu pot fi dispersai n program.
Zona de memorie pentru parametrii se aloc n programul principal i trebuie s
fie un spaiu continuu n care s se memoreze toi parametrii. Structura zonei este cea
cerut la definirea procedurii care implementeaz algoritmul de calcul. !ac se utilizeaz
mai multe tablouri trebuie stabilite dimensiuni ma"ime pentru fiecare tablou. !ac se
utilizeaz un singur tablou se plaseaz ultimul dintre parametrii i poate fi de dimensiune
#ariabil. $a c%emarea subprogramului adresa zonei de parametrii, din programul
principal se #a ncrca ntr-un registru (e".&'. In subprogram se descrie structura
zonei de memorie ce conine parametrii, care #or fi apelai indirect prin registru (&'.
(entru e"emplificare se consider un subprogram care calculeaz media
elementelor unui tablou de ) numere ntregi cu semn. (arametrii transmii
subprogramului #or fi*
Media elementelor calculat ca parametru de ieire din procedur (+
)umrul de elemente ale tabloului ()
,abloul de ' de ) elemente pentru care se calculeaz media
BX X
Zona memorie S N X(! X("! X(#! .........
(parametrii!
In programul prezentat se consider tabloul ' cu - elemente, dar el poate a#ea oricte,
deoarece el este ultimul parametru. $a c%emarea procedurii in se ncarc n &' adresa
zonei de memorie care conine parametrii. In procedur se descrie structura zonei de
parametrii prin adresa lor relati#a in zon cu directi#a ./0. Mnemonicele +1, )1, '1
#or fi folosite n procedur pentru referirea indirect prin &' a parametrilor. Adresarea
lui + pentru iniializare se face prin*
mo# 2ord ptr 3b"4s15,6 7 s 8 6
,rebuie folosit 2ord ptr fiindc nu se utilizeaz registru i trebuie precizat
lungimea operanzilor folosii. Adresa &' 4 s1 este ec%i#alent cu &' 46. (entru a referi
un element de tablou direct n programul principal se folosete i inde"area cu +I*
c1* mo# a",3b"4"14si5 7 "3i5
$ --------------------------------------%ab&'(
$ )alcul medie elemente tablou X
$ *arametrii spre subpr. transmisi prin zona de memorie
$ --------------------------------------
+,SS-.
./,+-% S/0%%
1
.ST0)1 "26
."36)
.+0T0
s d2 6 7 s 8 media
n d2 - 7 nr. elem. din tabloul "
" d2 1,-9:,;<,-=:=,-<
.>?!.
st1* mo# a",@!A,A
mo# ds,a"
mo# b",offset s 7 adresa zona parametrii
call sp1 7 c%emare subprogram
int # 7 #aloarea medie s-a memorat in + de catre procedura
$ -----------------------------------------
$ *rocedura calcul medie elemente tablou
7 Intrare* &' adresa zona parametri
7 -----------------------------------------
sp *4,) near
7 Adrese in zona de parametrii
s1 eAu 6 7 +uma rezultata
n1 eAu : 7 numar de elemente
"1 eAu = 7 ,abloul de elemente
pus%a 7 sal#are registre
mo# si,6 7 i 8 1
mo# 2ord ptr 3b"4s15,6 7 s 8 6
mo# c",3b"4n15 7 numar elemente
c1* mo# a",3b"4"14si5 7 "3i5
add 3b"4s15,a" 7 s8s4"3i5
add si,: 7 i8i41
loop c1
mo# a",3b"4s15 7 A' 8 suma elemente
c2d 7e"tindere pentru impartire
idi# 2ord ptr 3b"4n15 7 s 8 sBn media
mo# 3b"4s15,a" 7 memorare medie
popa 7 refacere registre
ret
sp endp
end st1
:
6.2. +e5inire 6i utilizare structuri de date
+e5inirea structurii unei zone de memorie se poate face cu directi#a +,C0>, care
creeaz o mac7et i ataeaz fiecrei etic%ete o adresa relati# la nceputul zonei.
!efinirea ec%i#alent pentru zona de parametrii din procedura anterioar se poate face*
Zona ST48) 7 definire mac%et pentru structura zonei
+1 !D E
)1 !D E
'1 !D -6 dup (E 7 definire tablou #irtual pentru care nu se aloca spatiu
.)!+ 7 sfarsit definire structura
*entru 9ariabilele din structur nu se rezer9 spa:iu de memorie. !irecti#a
!D este utilizat numai pentru a preciza lungimile operanzilor i a calcula adresele
relati#e ataate etic%etelor. Folosind acest mod de definire pentru o structura nu trebuie s
calculm poziiile parametrilor n zon. !ac adugm noi parametrii sau le modificm
lungimea, nu trebuie s ne preocupe ce adrese se genereaz, ca n cazul utilizrii
directi#ei ./0.
, structur de date definete un tip ca o colecie de una sau mai multe #ariabile,
de tipuri diferite, grupate sub un singur nume pentru utilizare.
numeGstruc ST48)
-------- 7 definiie #ariabile formale
-------- 7 care compun structura
numeGstruc -N+S
Hariabilele dintr-o structur pot fi declarate cu sau fr #alori iniiale. Halorile
iniiale sunt cele implicite care ser#esc la generarea unei zone cu acea structur.
(utem defini tipul compus dat pe = octei format din zi, lun, an7
date ST48) 7 definire structura data
zi db 6 7 ziua
luna db 6 7 luna
anul d2 6 7 anul
date -N+S
(utem defini o #ariabil structurat de tip date i cu #alori ale cmpurilor*
!1 date I1-,:,19J;K 7 1- februarie 19J;
Hom declara structura +,0!.), care conine date personale*
Student ST48)
)ume db 1- dup(:6L 7 nume student
Adresa db M ,imisoara M 7 adresa (implicit ,imisoara
Harsta db 1; 7 #arsta
!atan db 6,6,6 7 zi luna, an
>ods db - dup(6 7 cod student fac,sectie,an,grupa,nr
Student -N+S
<
(entru a genera datele personale pentru un student #om scrie*
Cadu ;<4adu<=<0rad="2=2=>=&2=<0)#4?<@ $ nume=adresa=9arsta=datan=)ods
Halorile cmpurilor dintr-o structur pot fi referite n instruciunile programului*
M?H &',!1.Anul 7 se ncarc 19J;
M?H A$,Cadu.Harsta 7 se ncarc :-
M?H !', offset Cadu.Adresa 7se ncarc ACA!
6.6. Transmisia parametrilor spre subprograme prin sti9
,oate limbaNele de ni#el nalt folosesc transmiterea parametrilor prin sti#, care
este un caz particular de transmitere a parametrilor printr-o zon de memorie. In
procedur trebuie definit structura datelor din sti#a.
In sti# procedura #a gsi mai multe tipuri de date*
(arametrii subprogramului transmii de programul principal
Adresa de re#enire n programul principal (dup >A$$ - #aloare lui I( i >+
Cegistrele sal#ate de procedur
Hariabilele locale ale procedurii
+ti#a procedurii, care poate i ea sa c%eme subprograme
(entru orice procedur se ncepe cu proiectarea structurii sti#ei i definirea ei printr-o
structur de date, care se #a folosi la adresarea parametrilor i #ariabilelor locale.
Hom concepe un program care utilizeaz o procedur de calcul a mediei numerelor
poziti#e i cele negati#e dintr-un tablou de numere ntregi cu semn.
(arametrii de intrare #or fi adresa tabloului (at" i numrul de elemente (n#
(arametrii de ieire sunt media elementelor poziti#e M( i negati#e M)
Hariabile locale suma si numrul elementelor poziti#e i negati#e(+1,O1,+:,O:
+e #or sal#a n sti# registrele &(, &', F$AP+ i >'.
>u aceste precizri structura sti#ei #zut de procedur #a fi*
+( -1Q +ti#a procedurii
-1= +1 +uma poziti#e
-1: O1 )r.elemente poziti#e
-16 +: +uma negati#e
-; O: )r.elemente negati#e
-Q >'
-= F$AP+ Cegistre sal#ate
-: &'
&( 46 &( &( registru de baz adresare sti#
4: I( Adresa instruciunii urmtoare
4= >+ Adresa segment
4Q Adresa tablou M( Adresa tabel (medie poziti#e
4; ) M) )r elemente (medie negati#e
=
In programul principal s-au pus n sti#a adresa tabloului ' i ) numrul de
elemente. +e apeleaz subprogramul prin >A$$ far ptr care pune n sti#a >+ i I(. $a
re#enirea din procedur se iau din sti# rezultatele M((medie elemente poziti#e i M)
(medie elemente negati#e.
In procedur se fac sec#enele de operaii7
+e sal#eaz registrele i se memoreaz S* An B*, care #a de#eni referina pentru
adresarea elementelor din sti#.
+e aloc spaiu n sti# pentru cele = #ariabile locale (+1,O1,+:,O: prin
decrementarea cu =R:8; a lui +(
Cegistrul +( #a adresa n continuare sti#a procedurii
+e definete structura S i adresele #ariabilelor locale fa de &(
+e iniializeaz #ariabilele locale
+e calculeaz printr-un ciclu suma elementelor poziti#e+1, a celor negati#e +: i
numrul lor T1 respecti# T:
+e calculeaz media elementelor poziti#e peste adres tablou(A,' i negati#e
peste )
+e elibereaz spaiul ocupat de #ariabilele locale prin incrementarea lui +( cu ;
+e refac registrele sal#ate
+e re#ine n programul principal cu C., care ncarc din sti# I( i >+
!ac la re#enirea din procedur mai rmn parametrii reziduali n sti# se utilizeaz
4-T N unde ) este #aloarea cu care se incrementeaz +(.
$a re#enirea n programul principal trebuie ca sti#a s fie goal adic sa aib aceeai
poziie ca la apelul procedurii.
7 -----------------------------------------%ab3'
$ Transmiterea parametrilor prin sti9a
7 +ubprogram calcul medie elemente poziti#e
7 si negati#e dintr-un tablou '
7 -----------------------------------------
)AM. M.!IA1
SSTIB0 segment CstacDC
d2 166 dup (E
sti#a eAu U 7 #irful sti#ei
++,IHA ends
7------------------
7segment date
7------------------
S+0T0 segment
M( d2 6 7 medie elemente - poziti#e
M) d2 6 7 - negati#e
) d2 16 7 numar elemente tabel '
' d2 1-,-1:,-Q,19,-J,1J,1;,6,-1,1
-
+!A,A ends
7-------------------------
$segment program principal
7-------------------------
S*4 segment
assume cs*+(C,ds*+!A,A,ss*++,IHA
st1* mo# a",+!A,A 7 initializare registre segment
mo# ds,a"
mo# a",++,IHA
mo# ss,a"
mo# sp,offset sti#a
7 ------------------
$ )7emare subprogram
7 ------------------
pus% ) 7 depune in sti#a - nr.elemente
mo# a",offset ' 7 - adresa tablou
pus% a"
call far ptr medie 7 c%emare subprogram
7 rezultatele s-au depus in sti#a peste parametrii de intrare
pop M( 7 e"trage medie elem. - poziti#e
pop M) 7 - negati#e
int <
$ ------------------------------------------
$ Subprogram calcul medie elemente poziti9e
$ si negati9e dintr-un tablou X
$ ------------------------------------------
/-+I- proc 5ar
$ *regatire sti9a
pus% bp 7 sal#are reg &(
mo# bp,sp 7 reg bp baza in sti#a
pus% b" 7 sal#are registre
pus%f
pus% c"
sub sp,; 7 alocare spatiu #ariabile locale
7 --------------
$ )orp procedura
7 --------------
$ Structura sti9a relati9 la adr. de baza din B*
7 Sona #ariabile locale
s1 eAu -1= 7 suma elemente poziti#e
Q
T1 eAu -1: 7 contor elemente poziti#e
s: eAu -16 7 suma elemente negati#e
T: eAu -; 7 contor elemente negati#e
z struc $ descriere structura parametrii
bp# d2 E 7 reg &( #ec%i
ip# d2 E 7 reg I( - adresa de re#enire
cs# d2 E 7 >+ - adresa segment prog.principal
at" d2 E 7 adresa tabel '
n# d2 E 7 nr. de elemente tablou '
z ends
7 -------------
$ initializare 9ariabile
mo# c",2ord ptr 3bp4n#5 7 contor cicluri
mo# b",2ord ptr 3bp4at"5 7 &' adresa tablou '
mo# a",6 7 initializari
mo# si,6 7 inde" adresare in '
mo# 3bp4s15,a" 7 #ariabile locale
mo# 3bp4T15,a"
mo# 3bp4s:5,a"
mo# 3bp4T:5,a"
$ )iclu de calcul sume elemente poziti9e si negati9e
c1* mo# a",2ord ptr 3b"4si5 7 element '(I
or a",a" 7 pozitionare indicatori
Nl minus 7 '(I I 6
add 2ord ptr 3bp4s15,a" 7 +1 8 +1 4 '(I
inc 2ord ptr 3bp4T15 7 O1 8 O1 4 1
Nmp s%ort c:
minus* add 2ord ptr 3bp4s:5,a" 7 +: 8 +: 4 '(I
inc 2ord ptr 3bp4T:5 7 O: 8 O: 4 1
c:* add si,: 7 urmatorul element din tabel
loop c1
$ Sec9enta calcul medii
mo# a",2ord ptr3bp4s15
c2d
idi# 2ord ptr 3bp4T15 7 +1 8 +1BO1
mo# 3bp4Q5,a" 7 memorare medie in sti#a
mo# a",3bp4s:5
c2d
idi# 2ord ptr 3bp4T:5 7 +: 8 +:BO:
J
mo# 3bp4;5,a" 7 memorare medie negati#e
7---------------
$sec9enta iesire
7---------------
add sp,; 7 eliberare spatiu #ariabile locale
pop c" 7 refacere registre sal#ate
popf
pop b"
pop bp
ret 7 iesire din subprogram
/-+I- endp $ rezultatele /* si /N in sti9a
+(C ends
end st1
7 -----------------------------------------
;

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

  • Aplicatii de Retea in Internet
    Aplicatii de Retea in Internet
    Document12 pagini
    Aplicatii de Retea in Internet
    Victor Crowley
    Încă nu există evaluări
  • Portofoliuexport Gherghina Lupu
    Portofoliuexport Gherghina Lupu
    Document15 pagini
    Portofoliuexport Gherghina Lupu
    manyman123
    Încă nu există evaluări
  • Masterat Anul I
    Masterat Anul I
    Document19 pagini
    Masterat Anul I
    manyman123
    Încă nu există evaluări
  • SDSDFGSDFGDFGDFGDFG
    SDSDFGSDFGDFGDFGDFG
    Document1 pagină
    SDSDFGSDFGDFGDFGDFG
    manyman123
    Încă nu există evaluări
  • Fractal I
    Fractal I
    Document16 pagini
    Fractal I
    Alex Florescu
    Încă nu există evaluări
  • Curs8 Rentraaasd
    Curs8 Rentraaasd
    Document7 pagini
    Curs8 Rentraaasd
    manyman123
    Încă nu există evaluări
  • Lab 80871
    Lab 80871
    Document20 pagini
    Lab 80871
    Trifut Ciprian
    Încă nu există evaluări
  • Curs9 Macaae
    Curs9 Macaae
    Document10 pagini
    Curs9 Macaae
    manyman123
    Încă nu există evaluări
  • Curs10 Fisasdasdasd
    Curs10 Fisasdasdasd
    Document9 pagini
    Curs10 Fisasdasdasd
    manyman123
    Încă nu există evaluări
  • Curs1 I86
    Curs1 I86
    Document7 pagini
    Curs1 I86
    Hurmuzache Ciprian
    Încă nu există evaluări
  • Curs6 Param12312
    Curs6 Param12312
    Document8 pagini
    Curs6 Param12312
    manyman123
    Încă nu există evaluări
  • Curs8 Rentraaasd
    Curs8 Rentraaasd
    Document7 pagini
    Curs8 Rentraaasd
    manyman123
    Încă nu există evaluări
  • Curs11 Logaa
    Curs11 Logaa
    Document7 pagini
    Curs11 Logaa
    manyman123
    Încă nu există evaluări
  • Curs3 Inmdasc
    Curs3 Inmdasc
    Document11 pagini
    Curs3 Inmdasc
    manyman123
    Încă nu există evaluări
  • Gestiunea Datelor Multimedia Cu Inter Media Oracle
    Gestiunea Datelor Multimedia Cu Inter Media Oracle
    Document9 pagini
    Gestiunea Datelor Multimedia Cu Inter Media Oracle
    Trifut Ciprian
    Încă nu există evaluări
  • Lab 80871
    Lab 80871
    Document20 pagini
    Lab 80871
    Trifut Ciprian
    Încă nu există evaluări
  • Lab 80871
    Lab 80871
    Document20 pagini
    Lab 80871
    Trifut Ciprian
    Încă nu există evaluări
  • C 1
    C 1
    Document9 pagini
    C 1
    Adrian Tudor
    Încă nu există evaluări
  • POO01
    POO01
    Document34 pagini
    POO01
    manyman123
    Încă nu există evaluări
  • Lab 80871
    Lab 80871
    Document20 pagini
    Lab 80871
    Trifut Ciprian
    Încă nu există evaluări
  • Elth
    Elth
    Document4 pagini
    Elth
    manyman123
    Încă nu există evaluări
  • Backtracking
    Backtracking
    Document6 pagini
    Backtracking
    krugerr
    Încă nu există evaluări