label Referate autorenew 2025-09-29, 16:56 history_edu Anonim
CLASA DE PROCESOARE MCS48Arhitectura interna a MCS48:MCS48 este un microprocesor single-chip, care contine toate functiile necesare unei procesari digitale a informatiei. Principalele caracteristici ale acestui cip sunt:-unitate de calcul -ALUpe 8 biti-memorie program de 1KB, informatia fiind organizata pe 8 biti-memorie de lucru (RAM) de 64 octeti, organizata pe 8 biti-27 linii I/O-Timer / counter intern pe 8 biti-Are implementate 96 de instructiuni, pe 1 sau 2 cicli masina-Contine un stack pe 8 nivele-2 registri de lucru-Frecventa de tact poate fi generata intern sau extern-Alimentare la 5VClasa de procesoare MCS48 este reprezentata in principal de procesorul 8048, la care memoria program este de tip PROM, fiind programata pe ciclul de productie, 8748, memoria program fiind de tip EPROM, si de 8049 / 8749, diferenta fiind data de faptul ca 8049 / 8749 are memorie de program de 2KB si memorie de lucru de 128B.Intern, MCS48 este organizat utilizand urmatoarele blocuri logice:-unitatea aritmetico-logica-registrul acumulator-memoria program (1KB la 8048, 2KB la 8049)-memoria de lucru - date (64 octeti la 8048, 128 octeti la 8049)-porturi I/O1. Unitatea Aritmetico-logicaAccepta cuvinte de cod pe 8 biti din una sau doua surse si genereaza un rezultat pe 8 biti. Sub controlul Decodorului de Instructiuni, ALU poate executa urmatoarele functii:-adunarea, cu sau fara transport-operatii logice: SI, SAU, SAU Exclusiv, etc-incrementari, decrementari-complement pe biti-rotiri stanga - dreapta-ajustari BCDDaca in urma operatiilor executate de ALU rezulta o valoare care este reprezentata pe mai mult de 8 biti, rezultand astfel un overflow pe bitul cel mai semnificativ, in Program Status Word (registru ce stocheaza starea procesorului) se seteaza flag-ul Carry.2 .AcumulatorulEste cel mai important registru din procesor, fiind atat sursa pentru intrarile din ALU, cat si destinatie a rezultatelor operatiilor executate de acesta. De asemenea, datele de pe porturile I/O si de memorie trec tot prin acumulator.3. Memoria programMemoria program este o memorie de tip PROM (in cazul 8048 - 8049 ) sau de tip EPROM (pentru 8748 - 8749), avand dimensiunea de 1024 octeti pentru 8048/8748 sau 2048 pentru 8049/8749. Aceasta memorie poate fi adresata de catre Program Counter.In memoria program exista trei zone de memorie de important speciala:-locatia 0 : reprezentata de prima adresa de memorie. Este activata de linia de RESET si forteaza procesorul sa citeasca aceasta adresa; contine vectorul de reinitializare.-locatia 3 : activeaza linia de intreruperi a procesorului, determinand un JUMP la subrutina respectiva-locatia 7 : contine vectorul de intrerupere pentru timer / counter; este citit in cazul unui overflow al counter-uluiPrima instructiune care va fi executat dupa o actiune de RESET este instructiunea localizata la adresa de program "0". Primul cuvant al instructiunii de intrerupere este localizat intotdeauna la locatia de memorie "3" iar primul cuvant al rutinei de timer la adresa "7".Memoria program poate contine, pe langa codul de program si date, sub forma de constante.4. Memoria de dateMemoria de date este o memorie pe 8 biti putand avea capacitatea de 64 octeti (la 8048) sau 128 octeti (pentru 8049). Toate locatiile de memorie sunt adresate indirect prin doi registri(RAM Adress Register) de tip pointer, localizati la adresele 0 si 1.La nivel functional, memoria este organizata in 4 zone dupa cum urmeaza:-doua bankuri de cate 8 locatii (bank 0 - adresele 0-7 si bankul 1 - adresele 24 - 31) care pot fi adresate direct si reprezinta registrii de lucru ai procesorului. Bankul principal este bankul 0 si este utilizat pentru a putea stoca valori intermediare. Bankul 1 poate fi utilizat ca o extensie a registrului de lucru (bankul 0) sau poate fi rezervat pentru utilizarea in cazul subrutinelor de intreruperi. Daca bankul 1 nu este utilizat (selectia facandu-se prin program) el poate deveni memorie de uz general-o zona de stack pointer (adresele de memorie 8 - 23) organizata ca un stack pe 8 nivele, fiecare nivel ocupand 2 adrese de memorie.-o zona de memorie de uz general - adresele 32 - 64 (128 pt 8049)5. Porturile Input / OutputProcesorul 8048 are 27 linii de I/O, acestea fiind grupate in 3 porturi de cate 8 linii si 3 linii de intrare de test, utilizate pentru testarea instructiunilor de JUMP conditional.Astfel, porturile 1 si 2 sunt porturi cvasi-bidirectionale, adica datele scrise de procesor in aceste porturi sunt stocate in latch-uri si raman neschimbate pana cand sunt rescrise. Ca porturi de intrare, aceste linii nu lucreaza prin latch, adica o instructiune de intrare este preluata imediat. Portul 3 este un port bidirectional.Liniile de intrare de test, notate T0, T1 si sunt utilizate pentru JUMP conditional pe ramuri ale programului fara a fi necesara incarcarea intrarii portului in acumulator. T0 este utilizat pentru programare si poate servi si ca iesire de clock. T1 este utilizat ca intrare de contor de eveniment utilizand instructiunea STRT CNT (Start Event Counter). Pinul (activ pe low) este utilizat ca o intrare de intrerupere, intreruperea fiind dezactivata de RESET.6. Program counter si Stack-ulProgram counterul este un contor independent in timp ce Program Counter Stack este implementat utilizand perechi de registri din memoria de date (vezi mai sus la zonele de memorie). Din cei 16 biti, doar 10 sau 11 sunt utilizati pentru adresarea adreselor din memoria program, in timp ce bitii cei mai semnificativi sunt folositi pentru adresarea memoriei externe. In cazul unui RESET, Program Counterul este initializat cu 0.La o intrerupere sau la o instructiune de CALL a unei subrutine continutul Program Counterului este salvat in unul din cei 8 registri ( de 16 biti - 2 octeti) din Program Counter Stack. Perechea de locatii de memorie din stack este data de 3 biti din Stack Pointer, care este parte a Program Status Word (vezi mai jos structura acestuia). Primul jump sau intrerupere determina salvarea continutului Program Counterului la adresele 8 si 9 din memorie. In cazul unei noi subrutine, continutul este salvat la adresele 10 - 11. In caz de overflow (adica mai mult de 8 subrutine lansate) se suprascriu locatiile 8 si 9, semnalizand totodata acest lucru (buffer overflow).7. Program Status WordProgram Status Word are urmatoarea structura:
CY
AC
F0
BS
1
S2
S1
S0
= SAVED IN STACK ==STACK POINTER =unde:-S0, S1, S2 : stack pointer bit; indica nivelul din stack in care este salvat Program Counter-ul-bitul 3 nu este folosit-BS : Bank Switch Bit; indica bankul registrului de lucru. BS=0 bank 0 (adresele 8 - 23), BS=1 bank 1 (adresele 24 - 31)-F0 : flag de control utilizat pentru jumpuri conditionale utilizand instructiunea JF0-AC : Auxilliary Carry; bit carry generat de o instructiune ADD-CY : Carry flag; indica faptul ca o operatie a generat un overflow.8. IntreruperiO secventa de intrerupere este initializata prin aplicarea unui nivel logic low (" 0 " ) pe intrarea . La detectarea unei cereri de intrerupere externa, este executat un JUMP la subrutina de tratare a intreruperilor, care are primul cuvant de cod salvat la adresa "3" (invariabil). Ca si in cazul unei intructiuni de JUMP, Program Counterul este salvat in Stack, revenirea din subrutina de tratare a intreruperii fiind data de instructiunea RETR (return).Pe langa cererea de intrerupere externa, mai poate exista si o cerere de intrerupere interna, generata de timer. Aceasta intrerupere este tratata de subrutina avand primul octet salvat la locatia " 7 " de memorie.Daca intr-un sistem cu MCS48 sunt necesare 2 linii de intrerupere externe, a doua linie poate fi inplementata utilizand intrarea T1 care utilizeaza intreruperea de timer, lansand astfel rutina de la locatia 7. Pentru aceasta se incarca Counterul cu valoarea FFH.9. Timer / CounterMCS48 contine un registru Counter care ajuta utilizatorul in contorizarea evenimentelor externe si in generarea cu acuratete a timpilor de delay, fara a incarca in acest mod procesorul. In ambele cazuri modul de operare al counterului este aceeasi, diferenta fiind doar in sursa de intrare a counterului.Cand lucreaza ca si counter, valoarea - ca un cuvant pe 8 biti - este incarcat cu o valoare presetabila care este transferata din sau in acumulator prin doua instructiuni de MOV. Continutul counterului nu este afectat de operatia de RESET si este initializat numai prin instructiunea de MOV T,A. Contorizarea este intrerupta fie prin instructiunea de STOP TCNT sau prin RESET si este intrerupta pana la exacutarea instructiunii START T sau un eveniment prin instructiunea START CNT. Odata pornita contorizarea, ea ruleaza pana la intalnirea instructiunilor de stop; la atingerea valorii FF va aparea un eveniment de overflow, iar contorizarea va continua de la 0.Incrementarea de la FF la 0 (overflow) va genera o cerere de intrerupere si va seta un flag intr-un circuit flip-flop. Starea flagului overflow se poate testa printr-o instructiune de salt conditional JTF. Flagul de overflow se reseteaza fie prin aceasta comanda, fie prin RESET. Cererea de intrerupere este stocata intr-un latch apoi sumata cu intrarea de intrerupere externa. Intreruperea de timer poate fi activata sau dezactivata, independent de intreruperea externa, prin instructiunile EN TCNTI sau DIS TCNTI. Daca este activat, counter overflow va cauza un CALL la subrutina de la locatia 7. daca timerul si intreruperea externa intervin simultan, va fi recunoscuta intreruperea externa, lansandu-se subrutina de la locatia 3. De vreme ce intreruperea de timer este stocata in latch, ea va ramane in asteptare pana cand cererea de intrerupere externa este deservita, apoi se revine la executia subrutinei de tratare a intreruperii de timer.10 Circuitul de clockLa MCS48, generatorul de timp este inclus in procesor, estfel incat, pentru generarea clockului este necesar doar un circuit oscilant extern, de regula un cristal de quartz ce se leaga la pinii X1 si X2. Cel mai folosit cristal de quartz este cel de 6MHz (5,9904 MHz mai exact), conectarea facandu-se ca in figura de la pag. 2-10 din datasheet.Functional, este format din 2 blocuri si anume STATE COUNTER si CYCLE COUNTER.State Counter este un divizor cu 3 a frecventei de intrare, generand un semnal de clock care reprezinta semnalul de clock de lucru ale procesorului (ciclul masina) - CLKCycle Counter preia semnalul CLK de la iesirea din State Counter si face la randul sau o divizare cu 5, definind astfel starile de lucru ale procesorului. Prin urmare, MCS48 este un procesor care are cinci stadii pe ciclul masina: -S1 - extragerea instructiunii-S2 - decodificarea instructiunii-S3, S4, S5 - stadii de executieSemnalul de clock obtinut prin divizarea CLK in Cycle Counter se numeste ALE (Address Latch Enable) si este folosit pentru expandarea procesorului. Acest semnal este trimis pe pinul de iesire ALE. (vezi fig de la pag 2-10)11 RESETIntrarea de RESET furnizeaza o modalitate de initializare a procesorului. Este o intrare de tip trigger-Schmitt cu rezistenta interna, care este combinata cu un capacitor extern de 1F, furnizand astfel un puls intern suficient de lung pentru a genera resetarea circuitului. Daca pulsul de reset este generat extern, pinul RESET trebuie mentinut la potential 0 (legat la GND) cel putin 50 milisecunde. Revenirea din starea de RESET se face pe 5 cicli masina.In urma unei resetari se executa urmatoarele functii:-se seteaza program counterul la 0 (JZ)-se seteaza pointerul stivei la 0-se selecteaza bankul 0 la registrului-se selecteaza bankul 0 al memoriei-BUS-ul intern se seteaza pe HIGH-Porturile 1 si 2 se seteaza pe INPUT-Se dezactiveaza intreruperile (de timer si externa)-Se opreste timerul / Counterul-Se sterg flagurile timerului-Se sterg flagurile interne F0 si F1-Se dezactiveaza iesirea de clock de pe T012 Power Down (oprirea procesorului)In mod normal, la oprirea procesorului, datele din memoria interna (RAM) se sterg. Daca insa se doreste pastrarea datelor din RAM se pot anexa anumite circuite externe. In starea de power down, datele din RAM pot fi mentinute cu un consum de 10 - 15% din puterea normala de lucru.Alimentarea procesorului se face pe pinul Vcc cu o tensiune de alimentare de 5V. pentru pastrarea datelor din RAM, se alimenteaza pinul VDD cu aceeasi tensiune (in mod normal de la o baterie), mentinandu-se astfel datele din RAM. In mod normal de functionare, pe ambele intrari (Vcc si VDD) se aplica tensiune. In caz de power down, Vcc este 0, in schimb VDD este +5V. La resetarea procesorului prin pinul de reset, procesorul inhiba accesul la memorie, garantand astfel integritatea datelor din RAM.O secventa tipica de shutdown este urmatoarea:- o cadere iminenta a sursei de alimentare poate fi detectata daca se utilizeaza circuite dedicat. Acest semnal trebuia sa vina suficient de devreme astfel incat procesorul sa aiba timp sa salveze datele necesare inaintea caderii tensiunii sub valoarea minima nominala- semnalul de power fail este utilizat pentru intreruperea procesorului, acesta lansand rutina de power fail- rutina de power fail salveaza statusul masinii si datele importante in memoria RAM, initializand totodata transferul tensiunii de alimentare pe VDD, semnalizand la circuitul exterior ca rutina este completa.- se executa un reset pentru a garanta ca datele nu sunt alterate cat timp lipseste tensiunea. RESET-ul se mentine cat timp Vcc este down13 External Access ModeIn mod normal de functionare, codul program este citit din memoria ROM a procesorului (1K la 8048 sau 2K la 8049). MCS48 poate executa programe si dintr-o memorie ROM externa, dezactivand memoria interna. Acest lucru este util in special pentru operatiuni de diagnoza a sistemului. Memoria externa se poate accesa activand pinul EA (External Access). Un nivel 1 pe EA forteaza citirea codului din memoria externa. Pentru a garanta succesul operatiei, trebuie executat si un RESET.EXPANDAREA SISTEMULUI MCS48Daca capacitatea procesorului MCS48 nu este suficienta pentru o anumita aplicatie, acesta se poate expanda dupa cum urmeaza:-memorie maxima program acceptata: 4KB (se pot adauga 2 sau 3 KB)-memorie maxima de date accesata : 320 octeti (384 la 8049); se poate adauga o memorie de 256 octeti-numar nelimitat de porturi I/O-functii speciale utilizand 8080 (MCS80)Expandarea se poate face in doua moduri:-expandarea pe baza porturilor I/O. In cazul expandarii porturilor I/O, un circuit special de expandare - 8243 - asigura 4 porturi suplimentare de 4 biti pentru I/O, cu sacrificarea unei jumatati (4 biti) din portul 2 de comunicatie. Pe acest bus de 4 biti se pot conecta mai multe circuite 8243, generand in consecinta linia de chip select-BUS 8085. pe portul bidirectional I/O al MCS48 se pot conecta un numar mare de memorii si periferice din clasa de circuite MCS80/85MCS48 poate fi configurat utilizand amandoua posibilitatile de expandare, optimizand astfel capacitatea sistemului functie de aplicatie.A.Expandarea memoriei program (ROM)Memoria program poate fi expandata peste memoria rezidenta de 1 sau 2 KB utilizand bus-ul de tip 8085 al circuitului. Toate accesarile adreselor din memoria program mai mici de 1023 (2047 la 8049) vor fi citite din memoria interna, restul vor fi accesate din memoria externa.1.Ciclul extragerii unei instructiuniNota: In continuare ne vom referi in principal la procesorul 8048, care are 1KB ROM si 64B RAM. Expandarea procesorului 8049 se face similar. Pentru ambele procesoare, cantitatea maxima de memorie program adresata este de 4KBPentru toate ciclurile de extragere a instructiunilor de la adresele mai mari de 1023 se va proceda astfel:-continutul program counterului (12 biti) poate fi trimis pe BUS si pe jumatate din portul P2 (pinii D0 - D7 reprezinta BUS-ul, << port bidirectional >> si P20 - P23 )-ALE (Address Latch Enable) va indica momentul cand adresa este valida. Palierul ALE este utilizat pentru a memora adresa externa- (Program Store Enable) indica faptul ca o adresa externa este citita (extrasa) si serveste la activarea memoriei externe-BUS-ul se inverseaza pe input iar procesorul accepta octetul de instructiune.(Vezi formele de unda la pagina 3-2)Mai mult, se poate forta ca citirea instructiunilor se se faca din memoria externa, activand pinul EA (EA=5V)2.Adresarea memoriei extinse.Pentru programele mai mici de 2KB adresarea memoriei program se face in maniera clasica. Adresarea spatiului de adrese de peste 2 K poate fi facuta prin selectarea bancurilor utilizand instructiunile SEL MB0 SEL MB1 urmata de o instrctiune de branch (JMP sau CALL)
A11
A10
A9
A8
A7
A6
A5
A4
A3
A2
A1
A0
=memorie interna conventionala 000H -> 7FFH =
=JMP sau CALL; se selecteaza MB0 sau MB1Facilitatea schimbarii bankului de memorie extinde spatiul de memorie adresat peste 2K si in acelasi timp impiedica utilizatorul sa adreseze instructiuni peste aceasta limita.2.1.Schimbarea bankului de memorie programSchimbarea bankului de memorie se face prin setarea sau resetarea celui mai semnificativ bit din program counter (bitul 11). Acest bit in mod normal nu este incrementat de program counter, dar poate fi incarcat cu continutul unui latch de tip flip-flop ori de cate ori se apeleaza o instrctiune JMP sau CALL. Acest circuit flip-flop este setat prin executarea unei instructiuni SEL MB1 si resetat de SEL MB0.Mai mult, instructiunea SEL MB poate fi executata oricand inaintea schimbarii bankului de memorie daca instrctiunea urmatoare solicita aceasta.Atata timp cat in stack se salveaza toti cei 12 biti din program counter, inclusiv bitul 11, in cazul apelarii unei functii CALL, utilizatorul poate sa apeleze instructiuni din spatiul de 2K, adresa de return nefiind alterata, indiferent de bankul de memorie folosit2.2.Tratarea interuperilorIntreruperile vor genera intotdeauna un vector de program care este localizat la adresele 3 si 7 din primul bank de memorie. La apelarea unei intreruperi, bitul 11 este fortat si mentinut pe 0 pe timpul subrutinei de tratare a intreruperii. Sfarsitul unei intreruperi va fi semnalizat printr-o instrctiune de RETURN (RETR). Prin urmare, intreaga subrutine de tratare a intreruperii trebuie mentinuta in primul bank de memorie. Executarea unei instructiuni SEL MB0 sau SEL MB1 nu este recomandata decat daca nu altereaza bitul 11 din Program Counter (PC).Pentru a vedea modurile de conectare a memoriei externe de program, vezi schemele de la pag 3-3 si 3-4 sau notele de laboratorB.Expandarea memoriei de dateMemoria de date poate fi expandata cu o memorie suplimentara de 256 octeti, ajungand astfel al 320 B la 8048 sau 384 la 8049.1.Ciclii de scriere si de citireIn cazul MCS48 adresele si datele impart un bas de 8 biti comun. Astfel, un ciclu de citire sau de scriere este format din urmatorii pasi:-continutul registrului R0 sau R1 este trimis pe BUS-ALE indica faptul ca adresa este valida. Frontul descrescator al lui ALE este utilizat pentru a memora adresa externa-Un puls sau pe pinii corespunzatori din 8048 indica tipul actiunii care se executa in memoria de date-Bitii sunt transferati pe BUS2.Adresarea memoriei de date externeAccesarea memoriei de date externe se face cu doua instructiuni dedicate (pe doi cicli) MOVX A, @R si MOVX @R, A (citire, respectiv scriere), care transfera un octet de date intre acumulator si locatiile de memorie externe adresate de continutul registrelor R0 si R1. Acestea permit adresarea (pointarea) a 256 locatii de memorie suplimentare. Paginile suplimentare pot fi adaugate prin bank switching prin liniile de iesire suplimentareExpandarea cu 2101 (2x256 x 4 bit) si 8155 (256 x 8 bit) Iesirea din procesor controleaza ciclul de citire/scriere din memorie cand iesirea pe busul de date este controlata de .C.Expandarea porturilor I/OSunt 4 posibilitati de expandare a porturilor I/O:-folosind circuitul 8243 (4 porturi cu 4 linii I/O)-folosind MCS80/85-folosind circuitul 8155, 8355/8755-folosind elemente TTL standard1.Expandarea cu 8243Este cea mai eficienta metoda si se folosesc doar 4 linii (P2 P20-P23) I/O. 8243 contine 4 porturi de cate 4 biti care folosesc ca extensie a adreselor de port 4 - 7. Pe aceste porturi se pot executa urmatoarele operatii:-transferul acumulatorului la port-transferul portului la acumulator-SI logic port - acumulator-SAU logic port - acumulatorComunicarea se face pe liniile P20 - P23 a portului cu timing furnizat de pinul PROG al procesorului. Fiecare transfer consta in 2 bucati de 4 biti:-primul nibble contine opcodul si adresa de port-al doile nibble contine 4 biti de datenibble 1nibble 2 3 2 1 0 3 2 1 0
I
I
A
A



d
d
d
d
Cod instructiuneAdresa port0 0 read 0 0 port#40 1 write 0 1 port#51 0 OR 1 0 port#61 1 AND 1 1 port#72.Expandarea folosind MCS80/85Dispozitivele I/O din clasa de cipuri MCS80/85 se pot conecta la 8048 folosind acelasi BUS utilizat pentru expandarea memoriei. Dispozitivele I/O conectate la acest BUS sunt adresate prin aceleasi instructiuni MOVX ca si in cazul expandarii memoriei de date.Cele mai des intalnite circuite cu care se pot expanda capabilitatile procesorului 8048 sunt:-8259 - controler de intreruperi-8251 - interfata de comunicare seriala-8255 - interfata pentru periferice-8253 - timer programabilD.Multicip MCS48Principala observatie a unui astfel de design este adresarea porturilor I/O si a memoriei (RAM si ROM). In aceasta configuratie liniile A10 si A11 sunt sumate pe intrarea de din 8355/8755. Aceasta asigura faptul ca memoria externa este activa pentru orice adresa peste 1K si este inactiva pentru adresele de pana la 1K. Aceasta poarta a fost adaugata pentru a permite porturilor I/O din 8355 sa fie folosite.daca cipul ar fi selectat tot timpul ar aparea conflicte intre aceste porturi si porturile I/O din 8156. Poarta NOR poate fi eliminata si A11 sa fie legat direct la din 8355. Aceasta va crea o gaura de 1K in spatiul de adrese, accesarea facandu-se intre 2K si 4K (in final avem tot 3K spatiu de adrese).In acest sistem, adresele de memorie sunt adresate astfel:Data RAM0 - 256P20=0P21=1RAM I/Oadresele 0 - 3P20=1P21=1ROM I/Oadresele 0- 3P22 sau P23 = 1E.Schimbarea bankurilor de memoriePot exista cazuri ni care este nevoie de mai mult de 4KB statiu meorie de program si 384 octeti ca statiu de date, sau mai mlte porturi I/O adresate direct de R0 si R1.Aceste sisteme pot fi obtinute folosind tehnica "bank switching". In mare parte aceasta tehnica selecteaza blocurile de memorie utilizand liniile de port dedicate ale procesorului. In cazul memoriei program de la 8048, memoria este selectata in blocuri de 4KB in vreme ce memoria de date si porturile I/O in blocuri de 256 octeti.Cea mai importanta observatie in implementarea a 2 sau mai multor bankuri de memorie se refera la softul folosit la trecerea intre bankuri. Fiecare schimbare de bank necesita o operatie de scriere a procesorului a unui bit de control pe un port de iesire inaintea accesarii memoriei sau I/O port.daca memoria program este schimbata, programele trebuie sa fie organizate astfel incat sa fie eliminate la minim schimbarea intre bankurile de memorie. Saltul la o subrutina dintr-un bank de memorie trebuie evitat, daca este posibil. Programatorul trebuie sa stie, in cazul unui salt, bankul de memorie la care trebuie sa revina dupa completarea unei subrutine. Daca subrutina este localizata si accesata din alt bank de memorie, trebuie implementat un "stack" soft in care sa se salveze bankul schimbat ca si cum ar fi un bit din program counter.