Sunteți pe pagina 1din 11

BAZELE PROGRAMRII CALCULATOARELOR 11

STIVA HARDWARE. SUBRUTINE.

1. Obiective
Prin parcurgerea acestei edine de laborator studenii vor fi capabili:
S rezerve spaiu n memorie pentru stiv;
S iniializeze vrful stivei;
S utilizeze instruciunile de depunere i extragere din stiv, precum i cele de apel
i revenire;
S defineasc i s foloseasc subrutine;
S utilizeze serviciile oferite de programul monitor.

2. Stiva microprocesorului 8085


Stiva este o zon de memorie liniar, format din locaii amplasate la adrese consecutive,
cu acces indirect pe la un sigur capt (vrful stivei), prin intermediul registrului SP (Stack Pointer)
care este indicatorul vrfului stivei.
n cazul microprocesorului 8085, stiva crete n sensul descresctor al adreselor locaiilor
de memorie. Deoarece funcionarea stivei implic att operaii de citire (extragere din stiv) sau
de scriere (depunere n stiv), aceasta trebuie organizat ntr-o zon de memorie de tip RAM.

BFFC h
BFFD h

Varful curent al stivei


SP = BFFD h

BFFE h
BFFF h
C000 h

Varful initial al stivei


SP = C000 h

Figura 1. Organizarea stivei


Rolul stivei este de a facilita stocarea temporar a informaiilor (date sau adrese) n
memorie fr a reine pentru fiecare adresa exact la care sunt stocate. Se va reine doar ordinea
de stocare a informaiilor, acestea urmnd a fi extrase n ordinea invers a depunerii n stiv. Stiva
are o organizare de tip LIFO (Last In First Out) primul element extras este ultimul care a fost
depus.
Operaiile de depunere i de extragere sunt efectuate cu elemente formate din doi octei,
indiferent dac acestea sunt date sau adrese. Depunerea unui element n memorie se face prin dou
scrieri succesive n stiv, iar extragerea unui element prin dou citiri succesive din memorie. De

183

BAZELE PROGRAMRII CALCULATOARELOR 11


fiecare dat, adresa locaiei nscrise sau citite este furnizat de registrul SP, care este actualizat
corespunztor.
SP conine n orice moment adresa ultimei locaii ocupate din stiv. De aceea, dup fiecare
octet citit din stiva, SP este incrementat, iar naintea scrierii unui octet n stiv SP este decrementat.

Initial
SP = BFFC h

BFFC h

BFFC h

BFFC h

BFFD h

BFFD h

BFFE h

BFFE h

BFFF h

BFFF h

BFFF h

C000 h

C000 h

C000 h

BFFD h
Final
SP = BFFE h

BFFE h

a)

Final
SP = BFFC h

SP = BFFE h
Initial

b)

Figura 2. a)Extragerea din stiv; b)Depunerea n stiv.

2.1.

Instruciuni de lucru cu stiva

Operaiile de depunere i de extragere sunt realizate la execuia unor instruciuni specifice:


PUSH/POP pentru coninutul registrelor pereche (B, D i H) i a cuvntului de stare al
programului (PSW);
CALL/RET pentru coninutul registrului PC. Informaiile din registrele pereche B, D i H
pot fi date pe 16 bii sau adrese ale altor date amplasate n memorie. PSW conine date
(registrul A) i condiii (flagurile). Registrul PC conine adresa instruciunii urmtoare.
1
2
2
PUSH PSW on stack top
PUSH
1
PSW
2
2
POP into register pair from stack top
POP rp

+ 1
+ 2
POP PSW POP into PSW from stack top

+ 1
+ 2
Stiva este o zon de memorie care poate fi definit folosind aceleai directive de asamblare
ca i n cazul altor variabile. n cazul variabilelor obinuite se marcheaz printr-o etichet adresa
PUSH rp

PUSH register pair on stack top

184

BAZELE PROGRAMRII CALCULATOARELOR 11


de nceput a zonei de memorie rezervate (adresa cea mai mic). n cazul stivei se marcheaz adresa
de dup cea a ultimei locaii rezervate, care va constitui vrful stivei i va iniializa registrul SP,
deoarece stiva crete n sensul descresctor al adreselor.

2.2.

Instruciuni de apel i de revenire

Pentru a evita repetarea n cadrul programului a unei secvene de cod, se prefer ca


respectiva secven sa apar n memorie o singur dat, urmnd ca atunci cnd se dorete execuia
ei, n programul principal s se efectueze un salt la adresa respectiv.
n cazul n care se dorete continuarea programului principal din punctul n care a fost
prsit, acest lucru nu mai este posibil deoarece instruciunea de salt distruge vechiul coninut al
registrului PC. Adresa de revenire nu este cunoscut nici de secvena de instruciuni, dat fiind c
nu este constant. Revenirea va trebui s se fac de fiecare dat ntr-un alt punct, deoarece saltul
din programul principal poate s apar n orice punct al su.
Dac se dorete revenirea, este necesar ca programul principal s transmit secvenei la
care sare o informaie pe care aceasta s o foloseasc pentru a relua execuia programului principal
din punctul n care a fost prsit. Informaia transmis este adresa instruciunii de dup cea care a
determinat prsirea programului principal. Acest lucru se realizeaz prin intermediul stivei.
Instruciunea care realizeaz un salt la o adres dup ce n prealabil a depus pe stiv adresa
instruciunii imediat urmtoare din programul principal se numete instruciune de apel. La 8085
este codificat n limbaj de asamblare cu mnemonica CALL.
Instruciunea care realizeazo revenire n programul principal, deoarece rencarc n PC
adresa din vrful stivei (cea salvat de CALL) se numete instruciune de revenire. n cazul
microprocesorului 8085, instruciunea de revenire este codificat cu mnemonica RET.
CALL addr

Call

1 ()
2 ()
2

Ccondition
addr

Condition call

+ 3

RET

Return

Rcondition

Conditional return


+ 1
+ 2
=

+ 1

185

BAZELE PROGRAMRII CALCULATOARELOR 11


Similar instruciunilor de salt, exist instruciuni de apel i revenire necondiionate, precum i
instruciuni de apel i revenire condiionate.
Condiia Descriere
Not Zero rezultatul este diferit de 0;
Zero rezultatul este egal cu 0;
Not Carry operaia nu a produs transport/mprumut;
Carry operaia a produs transport/mprumut.

NZ
Z
NC
C

Condiia este
adevarat
dac
=0
=1
= 0
= 1

CCC

000
001
010
011

Secvena de instruciuni care este apelat se numete subrutin. Programul principal care apeleaz
subrutina se numete program apelant.
Exemplu:

Program apelant
CALL subrutina
Instructiunea urmatoare

Subrutina
...
RET

Principalele caracteristici ale subrutinelor:

Este o succesiune de instruciuni cu unul sau mai multe puncte de intrare etichetate i cu
unul sau mai multe puncte de ieire;
Realizeaz o anumit funcie: operaii I/O, conversii ale formatului datelor, operaii
matematice n virgul fix sau mobil, etc.;
Poate fi apelat ori de cte ori este nevoie;
I se aloc memorie numai o singur dat;
La terminare trebuie s se ntoarc n programul apelant indiferent de locul de unde este
apelat (terminare cu instruciune de revenire);
Poate primi parametri din programul apelant i i poate furniza rezultate acestuia prin
registre, prin stiv sau prin locaii fixe de memorie;

186

BAZELE PROGRAMRII CALCULATOARELOR 11

Registrele modificate de subrutin trebuie s ia msurile necesare pentru salvarea


informaiilor care trebuie pstrate.

Este recomandat ca la scrierea codului unei subrutine, aceasta s fie documentat, preciznduse:

Numele i funcia ndeplinit;


Modul n care sunt primii parametrii de intrare;
Modul n care sunt returnate rezultatele ctre programul apelant;
Registrele modificate n cadrul subrutinei.

3. Utilizarea serviciilor programului monitor


Programul monitor al sistemului cu microprocesor 8085 EMAC Universal Trainer conine
o serie de servicii, pe care programul utilizatorului le poate apela pentru a realiza operaii de I/O
de baz. Fiecare serviciu are un cod, care, pentru aceast versiune de monitor, este cuprins ntre 0
i 27 (1Bh). Pentru a apela un anume serviciu, se ncarc n registrul C codul serviciului i apoi se
utilizeaz o instruciune CALL BIOS, unde = este punctul de intrare unic pentru
toate serviciile. Principalele servicii BIOS care pot fi apelate din programul utilizatorului sunt
prezentate n cele ce urmeaz:
Cod

Denumire

0h
1h

DEMO
CONIN

2h

CONSTAT

3h

CONOUT

4h

PSTRING

5h

UPRINT

Parametrii de
intrare
C=1
B = portul de
comunicaie 1 sau 2
C=2
B = portul de
comunicaie 1 sau 2
C=3
B = portul de
comunicaie 1 sau 2
E = caracterul
ASCII
C=4
B = portul de
comunicaie 1 sau 2
DE = pointer la
irul de caractere
C=5
B = portul de
comunicaie 1 sau 2
DE = numrul fr
semn pe 16 bii

Descrierea serviciului
Program demonstrativ.
Citete de la consol un caracter pe portul
specificat de registrul B. Caracterul ASCII returnat
va fi stocat n registrul L.
Inspecteaz portul de comunicaie selectat de B i
returneazp 0FFh dac un caracter este gata i 00h
n caz contrar n registrul L.
Transfer un caracter ASCII pe portul de
comunicaie indicat de registrul B.

Transmite un ir de caractere terminat cu $ pe


portul selectat de registrul B. $. Semnul $ nu este
afiat, iar n DE pointerul se plaseaz dup semnul
$
Afiare fr semn a unui numr pe 16 bii n
sistemul de numeraie zecimal fr a folosi semnul
pe portul de comunicaie selectat n registrul B.

187

BAZELE PROGRAMRII CALCULATOARELOR 11


6h

SPRINT

7h

MULT

8h

DIV

9h

ADCIN

C=6
B = portul de
comunicaie 1 sau 2
DE = numrul fr
semn pe 16 bii
C=7
DE = primul numr
pe 16 bii
HL = al doilea
numr pe 16 bii
C=8
HL = dempritul
pe 16 bii
DE = mpritorul
pe 16 bii
E = canalul selectat

Ah

DIPSWIN

C=A

Bh

PTBIN

C=B

Ch

PTAOUT

Dh

Eh

10h

E = valoarea pe 8
bii
HEXPRINT C = D
B = portul de
comunicaie 1 sau 2
DE = numarul fara
semn pe 16 bii
C=E
DACOUT
E = valoarea pe 8
bii
C = 10
PITCH
DE = valoarea pe
16 bii a diviziunii

11h

LEDOUT

12h

LEDHEX

E = caracterul
ASCII
D = poziia
DE = numrul

13h

LEDDEC

DE = numrul

Afiare cu semn a unui numr pe 16 bii n sistemul


de numeraie zecimal folosind reprezentarea n cod
complementar, pe portul de comunicaie selectat de
registrul B.
nmulete coninutul lui HL cu coninutul lui DE
i stocheaz rezultatul n HL (partea HIGH) i DE
(partea LOW).
mparte HL prin DE. Ctul mpririi va fi stocat n
HL, iar restul n DE.

Intrare A/D pentru citirea unei valori pe 8 bii de pe


canalul A/D selectat. Rezultatul conversiei va fi
stocat n registrul L.
Citete poziia curent a fiecruia dintre cele 8
micro-comutatoare. Poziia celor 8 microcomutatoare va fi stocat n registrul L.
Citete coninutul portului digital de intrare portB
i returneaz complementul acestuia n registrul L.
Scrie pe portul de ieire digital portA o valoare pe
8 bii.
Transmite pe portul de comunicaie selectat de
registrul B, valoarea din registrul extins DE n
hexazecimal (4 cifre).
Acest serviciu este o ieire de tip DAC care
transfer un numr pe 8 bii convertorului digital
analogic.
Serviciul trimite numrul pe 16 bii stocat n
registrul DE ctre timerul difuzorului. Cu ct acest
numr este mai mare, ci att va fi mai mic
diviziunea. Dac DE = 0, atunci difuzorul este
dezactivat.
Afieaz un caracter ASCII din E pe afiajul
alfanumeric n poziia specificat de D.
Afieaz numrul din DE n hexazecimal pe
afiajul
alfanumeric pe cele 4 celule din stnga.
Afieaz numrul din DE n zecimal pe afiajul
alfanumeric pe cele 4 celule din stnga.

188

BAZELE PROGRAMRII CALCULATOARELOR 11


14h

DELAY

15h

TUNE

HL = valoarea
ntrzierii
B = durata tonului
DE = secvena de
tonuri

16h
17h
18h

PRNOUT
OUT422
IN422

E = caracterul
E = caracterul
C = 18

19h

KEYIN

1Ah WRSCL

C = 18
DE
=
adresa
primilor 8 bytes ce
trebuie transferai
ceasului de timp
real.

1Bh RDSCL

C = 19
DE = adresa de
start a zonei n care
sunt stocai cei 8
bytes citii de la
ceasul de timp real.

ntrziere proporional cu valoarea din HL


Cnt o secven de tonuri terminat cu 0 i
adresat de DE, n ritmul constant specificat de B
(Cu ct B este mai mare, cu att este mai mare
durata tonului).
Transfer caracterul din E pe portul paralel.
Se transfer octetul din registrul E pe portul RS422.
Citete un byte de pe portul RS422. Dac a fost
recepionat un caracter, H = 1 i registrul L va
conine caracterul. Dac nu s-a recepionat nici un
caracter, HL va fi 0.
Ateapt apsarea unei taste i returneaz codul ei
n L. Codificarea este ntre 00Fh pentru primele
16 taste, de sus n jos i de la stnga la dreapta.
Urmtoarele 3 rnduri returneaz coduri ntre
14h1Fh.
Scrie 8 bytes n memorie ncepnd de la adresa
specificat n registrul DE, dup ceasul de timp real
opional. Ceasul ofer informaii de temporizare n
BCD inclusiv informaii ca sute de secunde,
secunde, minute, ore, zi, dat, lun sau an. Data de
la sfritul lunii este ajustat automat n funcie de
lun i de ani biseci sau nu. Ceasul de timp real
opereaz n formatul cu 24 de ore sau cu 12 ore cu
indicator AM/PM.
Citete 8 bytes de date de la ceasul de timp real i
i stocheaz consecutiv, ncepnd cu adresa din
registrul pereche DE. Cei 8 bytes de date sunt
formatai similar cu datele de intrare transmise
serviciului WRSCL.

4. Aplicaii propuse
4.1.

S se scrie un fiier cu numele exp1.asm care s conin urmtoarea secven de


instruciuni. S se asambleze cu ASM85 i s se ncarce n memoria microsistemului.
S se execute instruciunile n regim pas cu pas folosind NoICE85, urmrind
coninutul registrului SP i al celorlalte registre pereche, precum i coninutul stivei.

189

BAZELE PROGRAMRII CALCULATOARELOR 11

Se considera fragmentul selectat modificat dup cum urmeaz:

S se precizeze valorile registrilor dup execuia fiecrei instruciuni.

4.2.

S se scrie codul unui program n limbaj de asamblare, care:

a) Execut programul demonstrativ;

b) Afieaz un mesaj;

190

BAZELE PROGRAMRII CALCULATOARELOR 11

c) Cnt un mesaj;

d) Ateapt apsarea unei taste.

191

BAZELE PROGRAMRII CALCULATOARELOR 11


Codurile serviciilor sunt definite ntr-un fiier separat (services.asm), care trebuie s existe
n directorul n care se afl i fiierul principal i care poate fi inclus n fiierul surs n limbaj de
asamblare cu directiva: INCLUDE services.asm.
Aceast directiv se adreseaz unui program denumit macroprocesor (Macro.exe), care
trebuie executat nainte de asamblarea propriu-zis i care genereaz un fiier pentru asamblor cu
extensia .s prin includerea tuturor fiierelor specificate de fiierul surs.
Programul Macro.exe va fi folosit pentru pre-procesare astfel: macro fisier.asm >fisier.s
L din cmd.
Macro.exe va prelucra fiierul fisier.asm i va genera fisier.s, cu toate fiierele specificate
incluse, iar asamblorul va trebui s prelucreze fiierul generat de Macro.exe, adic fisier.s, pentru
a genera codul executabil fisier.hex.

Care este diferena ntre fiierul .asm scris i fiierul .s generat? Ce semnificaie au liniile de
cod suplimentare?
4.3.

S se scrie un program n limbaj de asamblare care cnt o melodie folosind mesajul


Laborator bazele programrii calculatoare.

192

BAZELE PROGRAMRII CALCULATOARELOR 11


S se modifice programul anterior astfel nct durata melodiei s fie dat cu ajutorul
microcomutatoarelor. S se afieze valoarea duratei pe portul de ieire.
4.4.

S se realizeze un program n limbaj de asamblare care s cnte o melodie specific


unei alarme folosind coduri ASCII.

4.5.

S se scrie codul unui program n limbaj de asamblare care s afieze un text pe


display.

S se explice fiecare linie de cod din program.

5. Referine bibliografice
[1] C.Huanu, M.Postolache, Sisteme cu microprocesoare, Editura Academic, Iai, 2001.
[2] Gh.Toace, Introducere n microprocesoare, Editura tiinific i Enciclopedic,
Bucureti, 1985.
[3] ***, Universal Trainer, Lab Manual for Board Revisions R1 and R2, EMAC INC, 1993.
[4] ***, Universal Trainer, Reference Manual, EMAC INC, 1993.
[5] ***, Universal Trainer, Self Instruction Manual, EMAC INC, 1992.

193

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

  • Logica Computationala-Cartea
    Logica Computationala-Cartea
    Document138 pagini
    Logica Computationala-Cartea
    dcswalle
    Încă nu există evaluări
  • BPC l91
    BPC l91
    Document12 pagini
    BPC l91
    StefaniaArdelianu
    Încă nu există evaluări
  • BPC l12
    BPC l12
    Document9 pagini
    BPC l12
    StefaniaArdelianu
    Încă nu există evaluări
  • BPC l91
    BPC l91
    Document12 pagini
    BPC l91
    StefaniaArdelianu
    Încă nu există evaluări
  • BPC l7
    BPC l7
    Document31 pagini
    BPC l7
    StefaniaArdelianu
    Încă nu există evaluări
  • BPC l10
    BPC l10
    Document9 pagini
    BPC l10
    StefaniaArdelianu
    Încă nu există evaluări
  • BPC l5
    BPC l5
    Document25 pagini
    BPC l5
    StefaniaArdelianu
    Încă nu există evaluări
  • BPC l3
    BPC l3
    Document30 pagini
    BPC l3
    StefaniaArdelianu
    Încă nu există evaluări
  • BPC l1
    BPC l1
    Document16 pagini
    BPC l1
    StefaniaArdelianu
    Încă nu există evaluări
  • BPC l2
    BPC l2
    Document13 pagini
    BPC l2
    StefaniaArdelianu
    Încă nu există evaluări