curs asm 2curs-asm014

139
ARHITECTURA SISTEMELOR CU MICROPROCESOR (Intel 8080,Zilog Z80) CURS Curs 2014: Facultatea E.T.T.I. Iaşi, specializarea E.A. Şef lucrări doctor inginer, Hriţcu Alioşa

Upload: iulian-alex

Post on 05-Feb-2016

76 views

Category:

Documents


2 download

DESCRIPTION

curs arhitectura sistemelor cu microprocesor

TRANSCRIPT

Page 1: Curs Asm 2Curs-ASM014

ARHITECTURA

SISTEMELOR CU

MICROPROCESOR

(Intel 8080,Zilog Z80)

CURS

Curs 2014: Facultatea E.T.T.I. Iaşi, specializarea E.A.

Şef lucrări doctor inginer, Hriţcu Alioşa

Page 2: Curs Asm 2Curs-ASM014
Page 3: Curs Asm 2Curs-ASM014

PREFAŢĂ Apariţia de circuite integrate pe scară largă (Large Scale Integration Circuits) şi a

microprocesoarelor, ca automate secvenţiale programabile prin instrucţiuni (automate programabile soft), a reprezentat o etapă decisivă în dezvoltarea societăţii, etapă reprezentată prin automatizarea tuturor activităţilor (de la automatizarea activităţilor de birou şi de arhivare, până la automatizarea activităţilor industriale). Astfel, s-a obţinut o creştere a bunăstării sociale, atât prin mărirea calităţii, cât şi a randamentului tuturor activităţilor.

Sistemele programabile prin instrucţiuni, numite generic sisteme de prelucrare (procesare) a informaţiei, sau sisteme de calcul, ce realizează efectuarea automată a operaţiilor aritmetice, logice, de ramificare şi de transfer, au pătruns în toate domeniile de activitate, dezvoltându-se programe pentru aplicaţii complexe.

Acum folosirea sistemelor de calcul reprezintă o parte foarte importantă în educaţia şi activitatea noastră, viaţa fără calculator şi telefon, ca mijloace de transmitere şi prelucrare a informaţiei, neputând fi concepută. De menţionat că telefonul mobil este foarte util, puterea sa de utilizare fiind însă dată de o unitate centrală de operare (unitate de calcul) ce permite implementarea pe telefon a numeroase aplicaţii asociate unui sistem de calcul, un astfel de telefon mobil fiind numit Smartphone.

Omul modern nu poate concepe viaţa fără informaţie şi fără mişcare, ambele controlate şi comandate eficient prin liantul reprezentat de sistemele de calcul.

Simplificând, putem afirma cu siguranţă că viaţa nu poate fi concepută fără calculator, ca element de prelucrare a informaţiei şi fără automobil, simbol al mişcării, ce ne asigură mobilitate.

Elementele de informaţie şi de mişcare se regăsesc în numeroase aplicaţii şi cu precădere în aplicaţiile de frontieră (la limita între domenii). Astfel, automobilul cu ardere internă este controlat, eficientizat şi chiar condus de un sistem de calcul realizat cu microprocesor sau microcontrolor (microcontroller). Sistemul de calcul însuşi este o simbioză între informaţie şi mişcare, prelucrarea informaţiei făcîndu-se cu circuite integrate pe scară largă, dar stocarea ei făcând apel la o memorie de mare capacitate, numită memorie de masă, realizată pe bandă de casetofon sau microdrive, floppy disk ori pe hard disk, ce sunt elemente în mişcare.

Importanţa domeniului electric în dezvoltarea societăţii a determinat apariţia de facultăţi tehnice cu specializări pe telecomunicaţii, electronică industrială, microelectronică, ingineria calculatoarelor, automatizări, informatică, electromecanică, electroenergetică ori mecatronică.

Acest curs, intitulat Arhitectura sistemelor cu microprocesor este în programa specializării de Electronică Aplicată a facultăţii de Electronică, Telecomunicaţii şi Tehnologia Informaţiei din Universitatea Tehnică „Gh. Asachi” din Iaşi, fiind precedat de cursurile Circuite Integrate Digitale şi Automate Programabile.

În cadrul disciplinei, la curs se prezintă bazele funcţionării microprocesoarelor, prin analiza microprocesoarelor pe 8 biţi Intel 8080 şi Zilog Z80, iar la aplicaţii se analizeză programul Monitor şi structura unui sistem de dezvoltare cu microprocesor Zilog Z80. Astfel, un cursant dispune de toate cunoştinţele necesare realizării unui sistem cu microprocesor şi programării de aplicaţii în limbaj de asamblare.

Îmi exprim întreaga mea recunoştinţă faţă de toţi cei care au contribuit la educarea şi formarea mea profesională.

Şef lucrări doctor inginer,

Hriţcu Alioşa

Page 4: Curs Asm 2Curs-ASM014

1-1

ARHITECTURA MICROPROCESOARELOR 1. INTRODUCERE

1.1. GENERALITĂŢI

Un ajutor preţios în orice muncă de evidenţă, proiectare, cercetare, automatizare complexă îl constituie sistemele de calcul. Aceste sisteme s-au impus prin precizia de calcul şi viteza de operare, ducând la creşterea calităţii şi productivităţii muncii.

Blocul principal dintr-un sistem de calcul este reprezentat de unitatea centrală de operare, numită şi procesor, ce poate efectua un număr limitat de operaţii elementare: aritmetice (adunare, adunare cu transport, scădere, scădere cu împrumut, incrementare, decrementare, negare), logice (AND, OR, XOR, comparare, complementare), de transfer, de rotire, de ramificare şi de comandă.

Definiţie Unitatea centrală de operare realizată ca un circuit integrat, se numeşte

microprocesor (=µP). Fiecare operaţie elementară prevăzută a fi efectuată de microprocesor presupune

existenţa unuia sau a cel mult doi operanzi, unele operaţii impunând existenţa a doi operanzi, iar prin altele acţionându-se asupra unui singur operand.

Pentru a efectua pe un sistem de calcul o operaţie elementară prevazută microprocesorului ce controlează sistemul, trebuie să se comunice microprocesorului atât operaţia de efectuat, cât şi operanzii implicaţi, ori locurile din sistem unde aceşti operanzi se găsesc.

Definiţie Ansamblul informaţiilor necesare unui microprocesor pentru a efectua o operaţie

elementară ce i s-a prevăzut, se numeşte instrucţiune. O instrucţiune, reprezentând un ordin dat microprocesorului, mai este numită şi

instrucţiune de comandă. Din considerente de imunitate la perturbaţii, sistemele de calcul, numite şi sisteme cu

procesarea informaţiei, ori sisteme cu microprocesor, operează în baza doi de numeraţie, pe cuvinte binare formate dintr-un acelaşi număr de caractere binare numite biţi, număr ce reprezintă o caracteristică a sistemului, fiind sisteme ce operează pe cuvinte din 1, 2, 4, 8, 16, 32 sau 64 de biţi.

Rezultă că o instrucţiune va fi formată dintr-un număr de cuvinte binare, ce vor codifica informaţiile privind operanzii implicaţi şi operaţia de executat în instrucţiune, informaţia referitoare la operaţia de efectuat fiind întotdeauna codificată în primul cuvânt al instrucţiunii, numit cuvânt instrucţiune, în timp ce informaţiile privind operanzii implicaţi sunt distribuite în toate cuvintele instrucţiunii. Numărul de cuvinte binare pe care-i codificată o instrucţiune diferă de la o instrucţiune la alta, cele mai rapide instrucţiuni fiind codificate pe un cuvânt binar, iar cele mai complexe instrucţiuni, dar lente, fiind codificate în patru cuvinte binare.

Cuvintele binare ale unei instrucţiuni de executat trebuie depuse în locaţii din sistem special destinate păstrării cuvintelor binare, fiecare locaţie fiind identificată de microprocesor prin numărul său de ordine numit adresă, în vederea efectuării unei operaţii de scriere, sau de citire. O astfel de locaţie este formată din celule, în fiecare celulă a locaţiei memorându-se doar un bit din cuvântul înscris în locaţie. Ca urmare, locaţiile unui sistem cu microprocesor sunt formate dintr-un număr de celule egal cu numărul de biţi ai cuvintelor pe care operează sistemul.

Locaţiile sunt distribuite în toate circuitele sistemului a căror funcţionare presupune transferuri de cuvinte binare, iar circuitele a căror singură funcţie este de a păstra cuvinte

Page 5: Curs Asm 2Curs-ASM014

1-2

binare sunt numite circuite de memorie, ce se caracterizează prin capacitatea de memorare exprimată prin numărul de locaţii, sau numărul de biţi conţinuţi. Totalitatea circuitelor de memorie dintr-un sistem de calcul formează memoria sistemului, a cărei capacitate de memorare, în locaţii, sau în biţi, este dată de suma capacităţilor circuitelor de memorie conţinute.

Transferul de cuvinte binare între locaţiile sistemului şi registrele microprocesorului, se realizează în ambele sensuri, printr-un grup de trasee numit MAGISTRALĂ DE DATE (=DATA BUS), transferul fiind de tip paralel, în sensul că toţi biţii unui cuvânt sunt transferaţi simultan, fiecare bit fiind transferat pe câte un traseu distinct.

Pentru transferul unui cuvânt binar cu o locaţie a sistemului, procesorul trebuie să identifice locaţia prin numărul său de adresă, transferul datei realizându-se efectiv pe durata identificării, când locaţia este conectată la magistrala de date. Rezultă că simultan cu datele trebuie transferate şi numerele de adresă, transferul numerelor de adresă făcându-se tot în mod paralel, dar pe alt grup de trasee, numit MAGISTRALĂ DE ADRESE (=ADDRESS BUS), ce este o magistrală unidirecţională în sensul că numerele de adresă sunt transferate numai de la microprocesor către circuitele sistemului, deoarece doar microprocesorul, ca unic element de control al sistemului, poate genera numere de adresă. În vederea generării şi transferării de numere de adresă, microprocesorul dispune de un număr de locaţii doar pentru numere de adresă, numite registre de adrese.

În sistemul pe care-l controlează, microprocesorul apelează la circuitele sistemului numai pentru a efectua cu locaţiile de care acestea dispun transferuri de cuvinte, o adresă de locaţie transferată pe magistrala de adrese realizând, atât identificarea circuitului locaţiei, numită selecţie, cât şi identificarea locaţiei în circuitul selectat, numită adresare.

Transferul unui cuvânt realizându-se secvenţial pe durata mai multor etape între microprocesor, caracterizat printr-o viteză mare de operare, şi un circuit al sistemului, ce este mai lent ca microprocesorul, sunt necesare semnale logice de comandă şi control ce să asigure sincronizarea circuitelor pe durata transferului, aceste semnale fiind transferate în paralel şi unidirecţional pe alt grup de trasee numit MAGISTRALĂ DE COMANDĂ ŞI CONTROL, ori simplu MAGISTRALĂ DE CONTROL (=CONTROL BUS).

Definiţie Un transfer de date, sincronizat cu semnale de comandă şi control, se numeşte

transfer handshaking (handshake=strângere de mână). Fiecare circuit a cărui funcţionare presupune transferuri handshaking dispune de o

logică proprie de comandă şi control ce se conectează la magistrala de comandă şi control a sistemului creată de blocul de comandă şi control din microprocesor.

Rezultă că orice circuit al sistemului, a cărui funcţionare presupune transfer de date, se conectează la toate cele trei magistrale, create de microprocesor pentru a controla sistemul: magistrala de date, magistrala de adrese şi magistrala de comandă şi control.

Echipamentele din exteriorul unui sistem de calcul ce transferă date cu sistemul, numite ECHIPAMENTE PERIFERICE (=PERIPHERALS), se conectează la sistem prin intermediul unor circuite prevăzute sistemului, numite CIRCUITE DE INTERFAŢĂ INTRARE / IEŞIRE (=INPUT/OUTPUT INTERFACE).

Arhitectura unui sistem de calcul este prezentată în fig.1.1. Rezolvarea unei probleme complexe pe un sistem de calcul, presupune

descompunerea problemei într-o succesiune strictă de operaţii elementare ce pot fi comandate prin instrucţiuni microprocesorului din sistemul de calcul, descompunere realizată pe baza unei metode de rezolvare numită algoritm şi a cărei formă grafică se numeşte organigramă.

Definiţie Succesiunea strictă de instrucţiuni de comandă a unui microprocesor, prin a căror

efectuare se rezolvă o problemă complexă, se numeşte program.

Page 6: Curs Asm 2Curs-ASM014

1-3

Fig.1.1 Arhitectura unui sistem de calcul (=sistem cu microprocesor)

Un program va fi descris prin cuvintele binare ale instrucţiunilor din componenţa sa,

dispuse în ordinea în care acestea apar în desfăşurarea programului, cuvintele fiecărei instrucţiuni fiind dispuse în aceeaşi ordine în care descriu instrucţiunea. Executarea unui program impune depunerea cuvintelor din componenţa programului în locaţii succesive de memorie, în ordinea crescătoare a numerelor de adresă, cuvintele fiind depuse în succesiunea în care apar în desfăşurarea programului.

Rezolvarea unui program se face instrucţiune cu instrucţiune, cuvintele unei instrucţiuni de executat fiind preluate de microprocesor, prin numerele de adresă a locaţiilor de memorie în care se află, într-o primă etapă, numită fază pregătitoare, după care, efectuarea operaţiei din instrucţiune are loc în blocul microprocesorului numit unitate aritmetică şi logică (=Arithmetic Logic Unit), într-o a doua etapă, numită fază de execuţie.

Blocul de comandă şi control al microprocesorului generează comenzile de execuţie a instrucţiunilor microprocesorului cu un automat programabil algoritmic ce conţine o memorie de comandă, în care modul de execuţie a fiecărei instrucţiuni este descris cu un microprogram conţinând stările interne într-o evoluţie în care automatul să emită semnalele de comandă a circuitelor microprocesorului pentru executarea secvenţială a instrucţiunii ca o succesiune de operaţii foarte simple, numite microoperaţii.

Primul cuvânt al unei instrucţiuni de executat, numit cuvânt instrucţiune, aflat în locaţia sistemului cu adresa din registrul numărător de adrese al microprocesorului, numit de asemenea registru numărător de program şi notat PC (=Program Counter), se extrage în registrul de instrucţiuni al blocului de comandă şi control din microprocesor, sub comanda semnalelor citite din microprogramul destinat operaţiei de citire a unui cuvânt instrucţiune şi aflat în memoria de comandă din microprocesor.

Definiţie Intervalul de timp necesar transferului unui cuvânt se numeşte ciclu de maşină, iar

ciclul de maşină în care se transferă un cuvânt instrucţiune se numeşte ciclu fetch. Prin decodarea cuvântului instrucţiune se obţine adresa microprogramului din

memoria de comandă prin a cărui citire se execută instrucţiunea. În faza pregătitoare a execuţiei instrucţiunii, se extrag în registre ale microprocesorului şi celelalte cuvinte ale instrucţiunii, iar în faza de execuţie, după efectuarea eventuală a unor transferuri restante ale operanzilor din faza pregătitoare, are loc execuţia efectivă a operaţiei din instrucţiune. Dacă efectuarea instrucţiunii are loc în unitatea aritmetică şi logică, atunci rezultatul din

PERIPHERAL 1

PERIPHERAL k

M

ICR

OP

RO

CE

SS

OR

(C

EN

TR

AL

UN

IT)

MEMORY INTERFACE INPUT / OUTPUT

INTERFACE INPUT / OUTPUT

DATA BUS

ADDRESS BUS

CONTROL BUS

. . .

COMPUTING SYSTEM

OTHER CIRCUITS

Page 7: Curs Asm 2Curs-ASM014

1-4

instrucţiune va fi preluat în registrul microprocesorului numit registru acumulator. Realizarea de vârf în tehnica de calcul o constituie microprocesorul, ce reprezintă

realizarea unităţii centrale de operare ca circuit integrat, realizare datorată progreselor în tehnologia circuitelor integrate.

Microprocesorul este un circuit integrat pe scară largă LSI (=Large Scale Integration) complex, realizat pe o pastilă de siliciu din sute de mii de tranzistoare din care se formează un ansamblu de circuite combinaţionale şi secvenţiale interconectate, capabile să efectueze, sub controlul unui program, operaţii aritmetice, logice şi de transfer.

Fig.1.2 Arhitectura unui microprocesor cu magistrală internă unică de date

Observaţie În interiorul microprocesorului adresarea locaţiilor şi comanda circuitelor componente

se realizează direct şi nu prin magistralele de adrese şi de control ce sunt utilizate numai pentru locaţiile şi circuitele din sistemul controlat de microprocesor, astfel că un microprocesor cu viteză mare de operare are mai multe registre din care un transfer se face rapid, şi nu pe durata mare a unui ciclu de maşină, ca în cazul unei locaţii din sistem.

Din suprafaţa pastilei de siliciu pe care este realizat microprocesorul, o mare parte

este alocată realizării traseelor magistralelor interne de date. La realizarea unui

DATA Registers

ADDRESS Registers

Instruction Register

Instruction Decoder

& Machine

Cycle Encoding

Temporary Register

Temporary Register

DATA BUS Buffer

Arithmetic Logic Unit (=A.L.U.)

Internal DATA BUS

DATA BUS

ADDRESS BUS

Outputs Inputs CONTROL BUS

Accumulator Register

Command Memory

Control Logic

Tim

ing

& C

ontr

ol

Other Circuits

Reg

iste

rs A

rea

Page 8: Curs Asm 2Curs-ASM014

1-5

microprocesor, existenţa limitelor tehnologice privind atât suprafata pastilei de siliciu ce poate fi prelucrată, cât şi densitatea de implementare maximă ce poate fi realizată, determină ca la un microprocesor complexitatea să depindă de numărul magistralelor interne de date, fiind cu atât mai mare cu cât numărul magistralelor interne de date este mai mic şi implicit suprafaţa ocupată de aceste magistrale este mai mică.

Din aceste considerente majoritatea microprocesoarelor actuale de mare complexitate au o singură magistrală internă de date prin care cuvintele fiind transferate în mod serial, rezultă o scădere a vitezei de operare a microprocesorului. Cu alte cuvinte, arhitectura cu magistrală internă unică de date realizează un compromis între complexitate şi viteză de operare. Arhitectura unui microprocesor cu magistrală internă unică de date este prezentată în fig.1.2.

Fig.1.3 Arhitectura internă a unui microprocesor cu trei magistrale interne de date

Pe magistrala internă unică de date a microprocesorului neputând exista la un

moment dat decât un singur cuvânt, fiecare din cei doi operanzi implicaţi într-o operaţie

Instruction Register

Instruction Decoder

& Machine

Cycle Encoding

Data Registers

Other Circuits

MULTIPLEXED DATA BUS BUFFER

„A” = Internal DATA BUS

DATA BUS

Outputs Inputs CONTROL BUS

Command Memory

Control Logic

Tim

ing

& C

ontr

ol

Address Registers

„B” = Internal DATA BUS

„C” = Internal DATA BUS ADDRESS

BUS

Registers Area

Arithmetic Logic Unit (=A.L.U.)

Page 9: Curs Asm 2Curs-ASM014

1-6

vor fi preluaţi în câte un registru numit registru temporar (=Temporar Register) prevăzut fiecăreia din intrările unitătii aritmetice şi logice, iar rezultatul operaţiei, pentru a nu ocupa magistrala internă de date, va fi preluat de la ieşirea unităţii aritmetice şi logice, într-un registru numit registru acumulator (=Accumulator Register), notat A.

În microprocesoarele destinate aplicaţiilor rapide, viteza de operare este crescută printr-o arhitectură cu multiple magistrale interne de date, reprezentată în fig.1.3. La un astfel de microprocesor cele două intrări şi ieşirea unităţii aritmetice şi logice sunt conectate fiecare la câte una din cele trei magistrale de date notate „A”, „B”, „C”, prin magistralele de date „A” şi „B”, numite magistrale sursă, transferându-se operanzii, iar prin magistrala internă de date „C”, numită magistrală rezultat, transferându-se rezultatul operaţiei. Astfel, circuitele microprocesorului a căror funcţionare implică un transfer de date vor fi cuplate la toate magistralele interne de date.

Viteza mare de operare a unui microprocesor cu trei magistrale interne de date rezultă din faptul că atât cei doi operanzi dintr-o operaţie, cât şi rezultatul operaţiei se transferă simultan, fiecare pe câte o magistrală internă de date separată, astfel fiind evitat transferul succesiv de date şi eliminându-se din unitatea aritmetică şi logică registrele temporare de pe cele două intrări şi registrul acumulator de pe ieşire.

Sistemul controlat cu un astfel de microprocesor are însă o singură magistrală de date la care microprocesorul se cuplează cu cele două magistrale interne de date sursă prin circuitul său numit tampon de date multiplexat (=Multiplexed Data Bus Buffer).

A0 - 1 x 21 - D0 A1 - 2 µP 22 - D1 A2 - 3 23 - D2 A3 - 4 24 - D3 A4 - 5 25 - D4 A5 - 6 26 - D5

A6 - 7 27 - D6 A7 - 8 28 - D7 A8 - 9 29 - C0 A9 - 10 30 - C1

A10 - 11 31 - C2 A11 - 12 32 - C3 A12 - 13 33 - C4

A13 - 14 34 - C5 A14 - 15 35 - C6 A15 - 16 36 - C7 Q0 - 17 37 - C8 Q1 - 18 38 - C9

GND=0V - 19 39 - C10 Vcc=+5V - 20 40 - C11

Fig.1.4 Alocarea funcţiilor pe terminalele unui microprocesor

Un alt factor care influenţează arhitectura internă a unui microprocesor este numărul

de terminale limitat la 40. În cazul unui microprocesor operând pe cuvinte de 8 biţi, numite octeţi (octet=Byte), repartizarea funcţiilor pe cele 40 terminale, prezentată în fig.1.4, alocă

Page 10: Curs Asm 2Curs-ASM014

1-7

8 terminale (notate D0, D1,…, D7) pentru magistrala de date, 16 terminale (notate A0, A1,…, A15) pentru magistrala de adrese, 12 terminale (notate C0, C1, … C11) pentru magistrala de control, 2 terminale de alimentare (notate Vcc,GND) şi 2 terminale pentru cuarţul tactului sistemului (notate Q0, Q1).

Utilizarea microprocesoarelor nu este limitată doar la construcţia sistemelor de calcul, ci ele se utilizează şi la realizarea sistemelor de comandă numerice industriale programabile prin instrucţiuni. În aceste sisteme de comandă cu microprocesoare, mărimile analogice de intrare, după transformarea lor în mărimi numerice binare prin convertoare analog numerice, sunt preluate şi prelucrate în sistem. Mărimea numerică binară rezultată în urma prelucrării numerice este transformată cu un convertor numeric analogic într-o mărime analogică prin care se comandă elementul de execuţie al sistemului automat.

Se ştie că la proiectarea unui sistem automat numeric, trebuie stabilite iniţial funcţiile logice pe care sistemul urmează să le materializeze. Materializarea funcţiilor logice de comandă prin circuite combinaţionate şi secvenţiale realizate cu tranzistoare şi circuite integrate digitale pe o placă de circuit imprimat, adică în logică cablată, implică însă un mare efort (proiectare, testare, realizare), sistemul de comandă obţinut nefiind flexibil în sensul că nu i se pot modifica funcţiile de comandă, o altă funcţie de comandă implicând realizarea unui alt sistem de comandă, total diferit.

Sistemele de comandă cu microprocesoare, fiind programabile prin instrucţiuni, au o mare flexibilitate, în sensul că un astfel de sistem poate realiza alte funcţii logice de comandă, pentru alte aplicaţii, doar prin modificarea programului de comandă din memoria sa, fără a fi necesară realizarea fizică a unui nou sistem de comandă.

Sistemele de comandă în logică cablată sunt astfel înlocuite cu sisteme de comandă cu microprocesor, ce sunt sisteme programabile prin instrucţiuni (programabile soft).

În cele ce urmează, ne vom referi la microprocesoarele operând pe cuvinte binare din 8 biţi, ce au o largă răspândire în aplicaţiile industriale, caracterizate printr-o magistrală de date din 8 biţi, o magistrală de adrese din 16 biţi şi o magistrală de comandă şi control a cărei mărime în biţi variază de la un tip de microprocesor la altul.

Într-un sistem cu microprocesor de 8 biţi, numărul maxim de locaţii adresabile prin

magistrala de adrese a sistemului este de 162 locaţii. 1.2. MODUL DE OPERARE AL UNUI MICROPROCESOR

Efectuarea pe un sistem cu microprocesor a unui program sursă, realizat într-o formă simbolică accesibilă unui programator, necesită atât conversia sa în forma simbolică binară, numită program obiect, singura recunoscută în sistemul de calcul şi în care cuvintele binare ale instrucţiunilor de comandă a microprocesorului, sunt dispuse în ordinea în care apar în codificarea instrucţiunilor şi respectând succesiunea strictă în care instrucţiunile apar în desfăşurarea programului, cât şi realizarea operaţiilor:

- depunerea cuvintelor binare ale programului obiect în locaţii succesive dintr-o zonă a memoriei sistemului, ocupată în ordinea crescătoare a numerelor de adresă şi în succesiunea în care cuvintele apar în desfăşurarea programului;

- încărcarea în registrul PC, numărător de adrese, din microprocesor, ca adresă de inceput a programului, a numărului de adresă al primei locaţii din zona de memorie a programului de efectuat, unde se află primul cuvânt, ce este cuvântul instrucţiune al primei instrucţiuni din program.

După încărcarea registrului numărător de adrese PC, cu adresa de început a programului, microprocesorul va trece automat în memoria sa de comandă la microprogramul de extragere a cuvântului aflat în locaţia de memorie cu adresa din registrul PC, ce reprezintă cuvântul instrucţiune al primei instrucţiuni din program, în următoarele etape ale unui ciclu fetch:

Page 11: Curs Asm 2Curs-ASM014

1-8

- prin copierea registrului PC, numărător de adrese, în registrul tampon de adrese, adresa locaţiei ce conţine cuvântul instrucţiune al primei instrucţiuni a programului este aplicată prin magistrala de adrese tuturor circuitelor sistemului, pentru ca prin decodificare, locaţia având acest număr de adresă să se conecteze la magistrala de date;

- registrul numărător de adrese PC, este incrementat cu 1 prin registrul temporar cu incrementare-decrementare, pentru a se obţine adresa următorului cuvânt din program, fără a se afecta adresa cuvântului în curs de extragere, aflată în registrul tampon de adrese, ce o menţine pe magistrala de adrese;

- cuvântul instrucţiune este copiat de pe magistrala de date (la care locaţia adresată s-a conectat) în registrul de instrucţiuni al blocului de comandă şi control din microprocesor şi prin decodificarea sa rezultă adresa microprogramului de continuare a efectuării instrucţiunii;

- dacă instrucţiunea în curs de execuţie este formată dintr-un singur cuvânt, atunci se comandă executarea operaţiei din instrucţiune, rezultatul fiind generat în registrul acumulator în cazul unei operaţii efectuate în unitatea aritmetică şi logică a microprocesorului.

Pentru instrucţiunile formate din două cuvinte se trece la extragerea din memorie a următorului cuvânt al instrucţiunii, a cărui adresă se află deja în registrul PC, numărător de adrese, în următoarele etape ale unui nou ciclu de maşină:

- prin copierea registrului numărător de adrese PC, în registrul tampon de adrese, adresa locaţiei ce conţine următorul cuvânt al instrucţiunii este aplicată prin magistrala de adrese tuturor circuitelor sistemului pentru ca prin decodificare, locaţia având acest număr de adresă să se conecteze la magistrala de date;

- registrul numărător de adrese PC este incrementat cu 1 prin registrul temporar cu incrementare-decrementare, pentru a se obţine adresa următorului cuvânt din program, fără a se afecta adresa cuvântului în curs de extragere aflată în registrul tampon de adrese, ce o menţine pe magistrala de adrese;

- cuvântul instrucţiunii adresat prin magistrala de adrese, este copiat de pe magistrala de date, în registrul microprocesorului implicat în instrucţiune;

- dacă instrucţiunea în curs de execuţie este formată doar din două cuvinte, atunci se comandă executarea operaţiei din instrucţiune, rezultatul fiind generat în registrul acumulator, dacă operaţia se efectuează în unitatea aritmetică şi logică a microprocesorului.

Pentru extragerea firecărui nou cuvânt din codificarea unei instrucţiuni de executat se parcurge câte un ciclu de maşină format din aceleaşi etape ca pentru extragerea celui de al doilea cuvânt, la sfârşitul ciclului de maşină al extragerii ultimului cuvânt efectuându-se operaţia din instrucţiune.

Dacă efectuarea unei instrucţiuni constă în transferul unor alte cuvinte ce nu intră în codificarea instrucţiunii, atunci execuţia instrucţiunii continuă cu câte un nou ciclu de maşină pentru transferul fiecărui alt cuvânt, dar fără a se incrementa cu 1 registrul numărător de adrese, deoarece aceşti octeţi nefiind incluşi în instrucţiuni, se află în alte locaţii decât cele ce conţin programul de executat.

După execuţiei unei instrucţiuni, registrul numărător de adrese al microprocesorului va conţine deja adresa următorului cuvânt din program, reprezentat de cuvântul instrucţiune al următoarei instrucţiuni, la a cărei execuţie microprocesorul trece automat.

Tehnica incrementarii cu 1 a registrului numărător de adrese, pe durata transferării unui cuvânt al unei instrucţiuni, determină ca microprocesorul să execute automat un întreg program, la viteza sa mare de operare, fără intervenţia programatorului.

Se observă că microprocesorul execută doar cicluri de transfer de cuvinte, o operaţie elementară, ce implică unitatea aritmetică şi logică, fiind executată la sfârşitul ciclului de transferare al ultimului cuvânt al instrucţiunii.

Page 12: Curs Asm 2Curs-ASM014

2-1

2. MICROPROCESORUL INTEL 8080

2.1. ARHITECTURA INTERNĂ

Microprocesorului de 8 biţi Intel 8080 (fig.2.1), conţine următoarele elemente:

2.1.1. UNITATEA ARITMETICĂ ŞI LOGICĂ (=Arithmetic Logic Unit) Unitatea aritmetică şi logică, notată ALU (=Arithmetic Logic Unit) este formată dintr-o

reţea de circuite logice combinaţionale ce alcătuiesc un sumator paralel pe 8 biţi, prin care se efectuează operaţiile aritmetice şi logice prevăzute microprocesorului Intel 8080. Într-o operaţie aritmetică sau logică pot interveni maxim doi operanzi, fiecare din operanzi fiind memorat în registrul de pe una din cele două intrări ale unităţii aritmetice şi logice, numite registru temporar (=Temporary Register) şi registru acumulator temporar (=Accumulator Latch), pentru a fi menţinuţi nemodificaţi pe durata efectuării operaţiei, rezultatul dintr-o operaţie efectuată fiind preluat în registrul acumulator (=Accumulator).

La microprocesorul Intel 8080 registrul acumulator apare ca registru tampon între magistrala de date şi registrul acumulator temporar, iar ieşirea unităţii aritmetice şi logice este conectată la magistrala internă de date.

Prin singura magistrală internă de date a microprocesorului, octeţii vor fi transferaţi succesiv, în orice moment pe magistrala internă de date existând doar un singur octet. Astfel, efectuarea unei operaţii aritmetice sau logice între doi operanzi are loc în următoarele etape:

- Se transferă primul operand, prin magistrala de date, în registrul acumulator. - Se transferă al doilea operand, prin magistrala de date, în registrul temporar,

simultan transferându-se şi primul operand din registrul acumulator în registrul acumulator temporar, transferuri ce se pot face simultan deoarece sunt realizate pe căi diferite.

- Se efectuează operaţia, iar rezultatul de la ieşirea unităţii aritmetice şi logice este transferat, prin magistrala internă de date, în registrul acumulator.

2.1.2. CIRCUITELE BASCULANTE BISTABILE DE CONDIŢIE (= Flag Flip-Flops) În cadrul unui program, fiecare rezultat obţinut în urma unei operaţii efectuate în

unitatea aritmetică şi logică influenţează rezolvarea în continuare a programului printr-o serie de caracteristici pe care le are şi care trebuie cunoscute. Pentru a putea fi uşor testată, fiecare caracteristică a unui rezultat este descrisă printr-un singur bit, memorat într-un circuit basculant bistabil distinct, numit bistabil de condiţie, stările logice ale bistabilelor de condiţie fiind stabilite simultan cu generarea rezultatului operaţiei, ca biţi ai unui registru pe opt biţi, numit registrul bistabilelor de condiţie. Acest registru, alături de registrul acumulator A, formează registrul cuvântului de stări al procesorului, notat PSW (=Processor Status Word) şi având următoarea structură pe 16 biţi:

← Registrul A → ← Registrul bistabilelor de condiţie →

A7 A6 A5 A4 A3 A2 A1 A0 S Z - AC - P - C =PSW

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Microprocesorul Intel 8080 este prevăzut cu următoarele bistabile de condiţie: - Bistabilul de transport (=Carry Flag)

Bistabilul de transport, notat CY (=Carry), are rolul ca, în cazul unei operaţii arit-metice cu depăşire de capacitate, să treacă în starea logică „1”, stare ce reprezintă chiar bitul de transport-împrumut ca al nouălea bit al rezultatului. De asemenea, bistabilul de transport CY este folosit şi la testarea bit cu bit a octetului din registrul acumulator. Astfel, pentru testarea unui bit dintr-un octet, întâi se transferă octetul în registrul acumulator, apoi aducându-se bitul de testat în bistabilul de transport printr-o deplasare a conţinutului registrului acumulator. În acest sens, registrul acumulator este prevăzut cu o logică prin

Page 13: Curs Asm 2Curs-ASM014

2-2

Fig.2.1 Arhitectura standard a microprocesorului pe opt biţi Intel 8080

MULTIPLEXER

B

E

C

L

D

W

H

Z

SP=Stack Pointer

PC=Program Counter

RE

GIS

TE

R S

ELE

CT

Instruction Decoder

& Machine

Cycle Encoding

Timing & Control

Accumulator

Temporary Register

Accumulator Latch

Flags Flip-Flops:

S,Z,AC,P,CY

Decimal Adjust

Data Bus Buffer Latch

INTE

Flags S,Z,-,AC,-,P,-,CY

Arithmetic Logic Unit (=A.L.U.)

Control Bus - 6 Inputs

Command Bus - 6 Outputs

Ø1 Ø2 RESET READY HOLD INT

WR DBIN SYNC WAIT HOLDA INTE

D0 INTA

D1 WO D2 STACK D3 HALTA D4 OUT D5 M1 D6 INP D7 MEMR

Internal Data Bus D0..D7

„Data .Bus”

Registers Area

INTERRUPT 0=Disable

1=Enable

A0...A15 „Address Bus”

Interrupt Flag Flip-Flop

PSW=

„Con

trol

Bus

Incrementer-Decrementer ADDRESS LATCH

Instruction Register

ADDRESS BUFFER

Microprocessor Internal Control

Page 14: Curs Asm 2Curs-ASM014

2-3

care se realizează deplasarea conţinutului său prin recirculare la dreapta, sau la stânga atât în mod direct, cât şi în mod indirect (prin bistabilul de transport CY), operaţii care care se reprezintă grafic astfel:

- Bistabilul de condiţie de zero (=Zero Flag) Bistabilul de condiţie de zero, notat Z (=Zero Flag), are rolul de a bascula în starea

logică „1” când rezultatul operaţiei efectuate în unitatea aritmetică şi logică este nul. De asemenea, bistabilul de zero va bascula în starea logică „1” pentru a indica rezultatul de egalitate, într-o operaţie de comparare a doi operanzi, compararea a doi operanzi fiind făcută prin scăderea operanzilor, dar fără generare de rezultat şi cu afectarea bistabilelor de condiţie după rezultatul care s-ar fi generat prin scădere.

- Bistabilul de condiţie de semn (=Sign Flag) Bistabilul de semn, notat S (=Sign Flag), reprezintă o copie a celui mai semnificativ

bit al octetului din registrul acumulator, bit care în cazul operaţiilor aritmetice între numere cu semn codifică semnul „+” prin starea logica „0” şi semnul „-” prin starea logică „1”, această codificare a semnelor fiind păstrată şi în aritmetica complementului faţă de doi în care operează microprocesorul Intel 8080.

- Bistabilul de condiţie de paritate (=Parity Flag) Bistabilul de paritate, notat P (=Parity Flag), are rolul de a bascula, fie în starea

logică „0”, când rezultatul generat în operaţia logică efectuată în unitatea aritmetică şi logică conţine un număr par (=Even) de stări logice „1”, fie în starea logică „1”, când rezultatul generat în operaţia logică efectuată în unitatea aritmetică şi logică conţine un număr impar (=Odd) de stări logice „1”.

Bistabilul de paritate este testat în transmiterea serială a unei informaţii standard pe nouă biţi, o transmitere serială fiind, fie de paritate pară, când fiecare dată transmisă are un număr par de biţi în starea logică „1”, fie de paritate impară, când fiecare dată transmisă are un număr impar de biţi în starea logică „1”. Astfel, fiecărui octet de transmis i se ataşează un al nouălea bit, încât informaţia de nouă biţi rezultată să aibă paritatea convenită pentru transmisie. Dacă la recepţie se primeşte o dată cu paritate modificată, atunci se reia transferul datei ce a fost alterată pe lanţul de transmisie.

- Bistabilul de transport auxiliar (=Auxiliary Carry Flag) Bistabilul de transport auxiliar, notat AC (=Auxiliary Carry Flag), are rolul de a

memora, din rezultatul generat în registrul acumulator la efectuarea unei operaţii aritmetice, bitul de transport-împrumut dintre biţii de rang 3 şi 4, transportul fiind necesar în cazul operării cu numere în baza 10, la care fiecare cifră zecimală este codificată în binar pe câte patru biţi, folosind codul BCD (=Binary Coded Decimal) în care primele zece stări, notate 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, sunt stări utile, iar ultimele şase stări, notate în hexazecimal prin A, B, C, D, E, F, reprezintă stări interzise. O operaţie aritmetică cu numere zecimale în cod BCD, în care fiecare octet conţine câte două cifre zecimale, este efectuată ca între numere binare, din rezultatul generat în registrul acumulator A, bistabilul de transport auxiliar AC memorând bitul de transport-împrumut al cifrei zecimale de pondere minimă, iar bistabilul de transport CY memorând bitul de transport-împrumut al cifrei zecimale de pondere maximă. Deoarece o operaţie aritmetică este efectuată de microprocesor ca între numere binare, la operarea în baza 10 cu cifre în cod BCD, se va obţine un rezultat eronat ce va conţine fie cifre în stări interzise, fie cifre în stări permise, dar în a căror generare s-a trecut prin cele şase stări interzise, fiind necesară ajustarea

CY A7 A6 … A0 CY A7 A6 … A0

Recirculare indirectă la dreapta Recirculare directă la stânga

Page 15: Curs Asm 2Curs-ASM014

2-4

rezultatului pentru a reprezenta cifre zecimale corecte. Ajustarea rezultatului dintr-o operaţie de adunare, se face adunând întâi numărul 6 la

cifra zecimală de pondere minimă, dacă aceasta fie se află într-o stare interzisă, fie a trecut prin cele şase stări interzise generând transport memorat în bistabilul de transport auxiliar AC, după care se va aduna numărul 6 la cifra zecimală de pondere maximă, dacă aceasta fie se află într-o stare interzisă, fie a trecut prin cele şase stări interzise generând transport memorat în bistabilul de transport CY.

Corectarea rezultatului generat în registrul acumulator A, ca urmare a efectuării operaţiei de adunare între numere zecimale ca între numere binare, se face prin instrucţiunea cu simbolizarea

DAA , mnemonica DAA (=Decimal Adjust Accumulator) semnificând operaţia de ajustare zecimală a rezultatului din registrul acumulator A. Modul de execuţie a instrucţiunii de ajustare zecimală este exemplificat prin operaţia zecimală 75 + 96 = 171:

0 1 1 1. 0 1 0 1 +

1 0 0 1. 0 1 1 0

CY=1 AC=0

0 0 0 0. 1 0 1 1 + Rezultat iniţial

0

0

0

0.

0

1

1

0

Corecţie: (digit 0) + 6

CY=1 AC=1

0 0 0 1. 0 0 0 1 + Rezultat intermediar

0

1

1

0.

0

0

0

0

Corecţie: (digit 1) + 6

CY=1 AC=1

0 1 1 1. 0 0 0 1 Rezultat final

Bistabilele CY, S, Z, P, AC se numesc bistabile de condiţie, deoarece stările logice ale bistabilelor CY, S, Z, P reprezintă în instrucţiunile de ramificare condiţionată, cele 8 condiţii de testat, notate: C (CY=1), NC (CY=0), P (S=0), M (S=1), Z (Z=1), NZ (Z=0), PO (P=1), PE (P=0).

2.1.3. REGISTRE INTERNE DE DATE Dintre registrele interne de date ce au mărimea a opt biţi fac parte următoarele

registre: - Registrul acumulator, notat A (=Accumulator), are rolul de a memora rezultatul

dintr-o operaţie aritmetică sau logică efectuată în unitatea aritmetică şi logică a microprocesorului, registrul acumulator fiind plasat ca tampon între magistrala internă de date a microprocesorului şi registrul acumulator temporar (=Accumulator Latch). Într-o operaţie aritmetică sau logică întotdeauna primul operand se va afla în registrul acumulator.

- Registrul acumulator temporar (=Accumulator Latch) are rolul de a menţine primul operand la intrarea unităţii aritmetice şi logice, pe durata executării unei operaţii.

- Registrul temporar (=Temporary Register) are rolul de a menţine al doilea operand nemodificat la intrarea unităţii aritmetice şi logice pe durata executării unei operaţii.

- Registrul de instrucţiuni (=Instruction Register) este plasat la intrarea blocului de comandă şi control al microprocesorului şi are rolul de a prelua primul octet al unei instrucţiuni de efectuat, numit octet instrucţiune. Prin decodificarea octetului instrucţiune se obţine adresa microprogramului din memoria de comandă a blocului de comandă şi

Page 16: Curs Asm 2Curs-ASM014

2-5

control, prin a cărui citire se generează comenzile de executare a instrucţiunii. - Registrul tampon de date (=Data Bus Buffer) are rolul de a conecta magistrala

internă de date a microprocesorului la magistrala de date a sistemului, crescând capacitatea de comandă a liniilor de date ale microprocesorului şi protejând microprocesorul împotriva perturbaţiilor de pe magistrala de date a sistemului.

- Registrele de date cu destinaţie generală (=Data Registers) sunt notate W, Z, B, C, D, E, H, L şi au rolul de a păstra operanzi şi rezultate intermediare. Folosirea acestor registre, a căror selectare se face direct şi nu prin magistrala de adrese a sistemului, duce la o creştere considerabilă a vitezei de operare a microprocesorului. Registrele de date cu destinaţie generală pot fi cuplate câte două W-Z, B-C, D-E, H-L pentru a forma registre de 16 biţi. Registrele W şi Z sunt invizibile programatorului, fiind folosite de microprocesor în transferurile sale interne. Dintre registrele de date cu destinaţie generală se poate selecta la un moment dat doar un singur registru, ce se conectează la magistrala internă de date printr-un multiplexor (= Multiplexer).

2.1.4. REGISTRELE DE ADRESE Dintre registrele de adrese (=Address Registers) fac parte următoarele registre

utilizate în formarea şi generarea adreselor locaţiilor sistemului: a) Registrul tampon de adrese (=Address Buffer) creează prin ieşirile sale magistrala

de adrese (=Address Bus), având rolul de a memora adresa locaţiei sistemului implicată în transferul unui octet, adresă pe care o aplică tuturor circuitelor sistemului conectate la magistrala de adrese.

b) Registrul temporar de adrese cu incrementare-decrementare (=Incrementer-Decrementer Address Latch Register) are rolul de a transfera numere de adresă în registrul tampon de adrese şi de a efectua, prin logica asociată, incrementarea şi decrementarea unor registre de adrese.

c) Registrul numărător de adrese, numit şi registru numărător de program (=Program Counter), are rolul, de a forma adresa următorului octet din programul de efectuat, prin incrementarea sa cu 1, ce are loc pe durata transferului octetului cu adresa memorată în registrul tampon de adrese şi aflată pe magistrala de adrese.

d) Registrul indicator de stivă (=Stack Pointer Register) intervine ori de câte ori microprocesorul efectuează transfer de date cu locaţiile unei zone a memoriei RAM a sistemului numită memorie stivă (=Stack Memory). Instrucţiunile a căror execuţie presupune folosirea memoriei stivă sunt instrucţiunile de apel, de revenire şi cele special destinate transferului de date cu memoria stivă. Memoria stivă a fost gândită pentru salvarea de numere de adrese din 16 biţi şi de aceea un transfer cu memoria stivă implică transferul celor doi octeţi din componenţa unei date din 16 biţi.

Astfel, într-un program poate apare necesitatea apelării unui subprogram, după a cărui efectuare să se revină la continuarea programului apelant. Apelarea subprogramului se face prin executarea unei instrucţiuni de apel, introdusă în program acolo unde se impune apelul subprogramului, în timp ce revenirea în continuarea programul apelant la instrucţiunea următoare celei de apel, se face prin efectuarea instrucţiunii de revenire de la sfârşitul subprogramului.

Rezultă că după faza pregătitoare a execuţiei instrucţiunii de apel, în registrul numărător de adrese s-a format deja adresa următoarei instrucţiuni din program, ce reprezintă adresa de revenire din subprogramul apelant, adresă ce trebuie salvată pentru ca în registrul numărător de adrese să se introducă adresa subprogramului apelat la a cărui efectuare astfel se va trece.

Salvarea adresei de revenire din registrul numărător de adrese, are loc într-o zonă a memoriei RAM a sistemului, numită memorie stivă, special rezervată acestui scop din faza de realizare a programului apelant. La microprocesorul Intel 8080, ca şi la alte microprocesoare, locaţiile stivei sunt ocupate în ordinea descrescătoare a numerelor de

Page 17: Curs Asm 2Curs-ASM014

2-6

adresă, adresa locaţiei de la care începe stiva fiind numita baza stivei, iar adresa ultimei locaţii ocupate din stivă, numită vârful stivei, fiind conţinută în registrul indicator de stivă, notat SP(=Stack Pointer Register).

Prin executarea instrucţiunii de revenire de la sfârşitul subprogramului, se transferă în registrul numărător de adrese, din memoria stivă, adresa de revenire în programul apelant, a cărui efectuare astfel continuă.

Pentru memoria stivă, este necesar să se prevadă numărul maxim posibil de locaţii, deoarece în cazul unei mărimi insuficiente a stivei, aceasta se va extinde peste locaţii al căror conţinut se va pierde prin supraînscriere, microprocesorul neavând posibilitatea de a sesiza ocuparea integrală a stivei rezervată de către programator.

Rezultă că un octet va fi salvat în următoarea locaţie liberă a stivei cu adresa generată prin decrementarea cu 1 a registrului SP, ce reprezintă noul vârf al stivei, în timp ce după citirea octetului din locaţia din vârful stivei, care astfel se eliberează, registrul SP va fi incrementat cu 1 pentru a obţine noul vârf al stivei.

Memoria stivă are deci o structură cronologică, în sensul că acumulează octeţii în ordinea depunerii lor, citirea octeţilor din stivă fiind făcută în ordinea inversă celei de la depunere. Cu alte cuvinte modul de operare al stivei este de tipul ultimul intrat-primul ieşit, notat LI-FO (=Last In-First Out).

Din cele prezentate rezultă că o instrucţiune de apel, simbolizată prin CALL HL B,B

este codificată pe trei octeţi (CALL=octetul instrucţiune, LB =octetul minim al adresei subprogramului apelat, HB =octetul maxim al adresei subprogramului apelat), iar execuţia sa, ce constă în salvarea în stivă a adresei de revenire din registrul PC şi înscrierea în PC a adresei LHBB indicată în instrucţiune, are loc în următoarele etape:

- Se determină adresa următoarei locaţii libere din stivă, prin decrementarea registrului SP:

SP ← SP-1 - Se salvează în locaţia reprezentînd noul vârf al stivei, octetul de pondere maximă

al adresei din registrul numărător de adrese PC: (SP) ← HPC - Se determină adresa următoarei locaţii libere din stivă, prin decrementarea

registrului SP: SP ← SP-1 - Se salvează în locaţia din vârful stivei, octetul de pondere minimă al adresei din

registrul numărător de adrese PC: (SP) ← LPC - Se transferă în registrul numărător de adrese PC, al doilea octet al instrucţiunii de

apel, ce reprezintă octetul de pondere minimă al adresei subprogramului apelat: LPC ← LB - Se transferă în registrul numărător de adrese PC, al treilea octet al instrucţiunii de

apel, ce reprezintă octetul de pondere maxima al adresei subprogramului apelat: HPC ← HB

în timp ce o instrucţiune de revenire, simbolizată prin RET

este codificată pe un octet (RET=octetul instrucţiune), iar execuţia sa, ce constă în transferul adresei de revenire din vârful stivei, în registrul numărător de adrese, este realizată în următoarele etape:

- Octetul de pondere minimă al adresei de revenire în programul apelant este transferată din locaţia din vârful stivei, pe poziţia de pondere minimă a registrului numărător de adrese PC:

Page 18: Curs Asm 2Curs-ASM014

2-7

LPC ← (SP) - Se determină adresa locaţiei ce rerprezintă noul vârf al stivei, prin incrementarea

cu 1 a registrului indicator de stivă SP: SP ← SP+1 - Octetul de pondere maximă al adresei de revenire în programul apelant este

transferat din locaţia din vârful stivei, pe poziţia de pondere maximă a registrului numărător de adrese PC:

HPC ← (SP) - Se determină adresa locaţiei ce reprezintă noul vârf al stivei, prin incrementarea cu

1 a registrului indicator de stivă SP: SP ← SP+1. Observaţii 1. La un registru din 16 biţi înscrierea începe cu octetul de pondere minimă, iar

salvarea porneşte cu octetul de pondere maximă. Ca urmare, adresa din câmpul operand al unei instrucţiuni trbuind încărcată într-un registru din 16 biţi, va fi indicată începând cu octetul de pondere minimă.

2. În dezvoltarea microprocesoarelor, creşterea vitezei de operare s-a obţinut prin introducerea în microprocesor a unei memorii stivă de tipul FI-FO (First In-First Out) formată din câteva registre prin care instrucţiunile din program sunt transferate în ordinea efectuării lor, de la baza stivei, către vărful stivei ce conţine următoarea instrucţiune de executat pe care o va citi microprocesorul.

2.1.5. MAGISTRALA DE COMANDĂ ŞI CONTROL (=Control Bus) Microprocesorul Intel 8080 realizează comanda şi controlul sistemului de calcul prin

semnale logice, dintre care opt semnale de comandă sunt transferate pe magistrala de date, când această magistră este liberă, iar celelalte semnale sunt transferate pe terminale distincte ale microprocesorului.

Semnalele de comandă şi control transferate la terminale distincte ale microprocesorului Intel 8080 sunt:

- Ø1 şi Ø2 = semnale de tact aplicate microprocesorului de circuitul Intel 8224; - SYNC = semnal de sincronizare emis de microprocesor la începutul unor intervale

de timp numite cicluri de maşină, pentru a comanda memorarea semnalelor de comandă emise pe magistrala de date, în circuitul Intel 8228;

- DBIN (= Data Bus Input) = semnal emis de microprocesor pentru a indica că magistrala de date este în modul pe intrare de date;

- READY = este semnalul de control emis de circuitul implicat într-un transfer cu microprocesorul pentru a indica că data de transferat este accesibilă pe magistrala de date;

- WAIT = este semnalul de comandă emis de către microprocesor pentru a informa că se află într-o stare de inactivitate, numită stare de aşteptare, determinată de comanda READY=0, generată de circuitul mai lent, implicat în transferul unui octet cu microprocesorul, pe intervalul de efectuare a sarcinii ce-i revine;

- WR = semnalul emis de microprocesor pentru a comanda înscrierea datei de pe magistrala de date, în locaţia adresată;

- HLD (=Hold) = este semnalul emis către microprocesor, de către un circuit extern care solicită microprocesorului să cedeze controlul sistemului prin trecerea în înaltă impedanţa a magistralei de date, a magistralei de adrese şi a semnalelor de comandă IOR , IOW , MEMR , MEMW , 1M pentru un acces direct la memorie, notat DMA (=Direct Memory Acces);

- HLDA (=Hold Acknowledge) = este semnalul emis de microprocesor pentru a semnala că a acceptat cererea DMA, prin trecerea în înaltă impedanţă a magistralei de

Page 19: Curs Asm 2Curs-ASM014

2-8

date, a magistralei de adrese şi a semnalelor de comandă IOR , IOW , MEMR , MEMW , 1M ;

- INT (= Interrupt Request) = este semnalul prin care se solicită microprocesorului o întrerupere în vederea efectuării unui program mai prioritar;

- INTE (= Interrupt Enable) = reprezintă starea bistabilului de validare a funcţionării în întreruperi a microprocesorului, starea logică „1” validând funcţionarea în întreruperi a microprocesorului, iar starea logică „0” inhibând-o;

- RESET = este semnalul de iniţializare a microprocesorului ce determină operaţiile: PC=00.00H, INTE=0 şi HLDA=0.

A10 - 1 x 40 - A11 Vss=0V - 2 Intel 8080 39 - A14

D4 - 3 38 - A13 D5 - 4 37 - A12 D6 - 5 36 - A15 D3 - 6 35 - A9

D2 - 7 34 - A8 D1 - 8 33 - A7 D0 - 9 32 - A6 D6 - 10 31 - A5

Vbb=-5V - 11 30 - A4 RESET - 12 29 - A3

HOLD - 13 28 - Vdd=+12V

INT - 14 27 - A2 Ø2 - 15 26 - A1

INTE- 16 25 - A0 DBIN- 17 24 - WAIT

WR - 18 23 - READY SYNC- 19 22 - Ø1

Vcc=+5V- 20 21 - HLDA

Fig.2.2 Intel 8080-Vedere de sus (=Top View)

Pe magistrala de date, microprocesorul Intel 8080 emite următoarele semnale de

comandă: - INTA (=Interrupt Acknowledge) = este semnalul emis de microprocesor pe bitul

D0 al magistralei de date, la acceptarea întreruperii ce i s-a solicitat prin INT=1; - WO (=Write Output) = este semnalul emis de microprocesor pe bitul D1 al

magistralei de date pentru a informa că transferul în curs este unul de scriere; - STACK = este semnalul emis de microprocesor pe bitul D2 al magistralei de date

pentru a informa că pe magistrala de adrese se află adresa vârfului stivei; - HALTA (=Halt Acknowledge) = este semnalul emis de microprocesor pe bitul D3

al magistralei de date, pentru a informa că a intrat în starea HALT, de blocare a funcţionării, ca urmare a efectuării instrucţiunii cu simbolizarea

HLT ieşirea din starea HALT realizându-se printr-o comandă RESET, sau printr-o cerere de

Page 20: Curs Asm 2Curs-ASM014

2-9

întrerupere INT =0, dacă funcţionarea în întreruperi a microprocesorului este validată prin INTE=1;

- OUT (=Output Cycle) = este semnalul emis de microprocesor pe bitul D4 al magistralei de date pentru a informa că transferul în curs este unul de ieşire ce se va realiza la emiterea comenzii WR =0;

- M1 (=Machine Cycle One) = este semnalul emis de microprocesor pe bitul D5 al magistralei la începutul primului ciclu de maşină al unei instrucţiuni;

- INP (=Input Cycle) = este semnalul emis de microprocesor pe bitul D6 al magistralei de date pentru a informa că transferul în curs este unul de intrare, ce se va realiza la emiterea comenzii DBIN=1;

- MEMR (=Memory Read) = este semnalul emis de microprocesor pe bitul D7 al magistralei de date, pentru a comanda citirea locaţiei de memoria cu adresa de pe magistrala de adrese.

Intel 8080 este un microprocesor pe 8 biţi, cu frecvenţa tactului de 2MHz şi are 40 terminale a căror funcţii, indicate în fig.2.2, au următoarea repartizare pe terminale:

- 8 terminale pentru magistrala de date; - 16 terminale pentru magistrala de adrese; - 12 terminale pentru semnale de comandă şi control; - 4 terminale de alimentare.

2.2. CICLURI ŞI STĂRI ÎN FUNCŢIONAREA UNUI MICROPROCESOR

Definiţie O etapă în funcţionarea automatului programabil algoritmic (prin care se efectuează

instrucţiunile microprocesorului), în care se execută o microoperaţie se numeşte stare.

Un ciclu de maşină poate conţine până la 5 stări, notate T1, T2, .. , T5, fiecare stare având, pentru microprocesorul Intel 8080, durata unei perioade a tactului de sincronizare.

O instrucţiune poate necesita până la 5 cicluri de maşină notate M1, M2, .. , M5, în primul ciclu de maşină M1 al efectuării unei instrucţiuni, micropocesorul transferând în registrul de instrucţiuni al blocului de comandă şi control octetul instrucţiune în care este codificată operaţia de efectuat.

Organigrama de parcurgere a unui ciclu de maşină este dată în fig.2.3. În stările unui ciclu de maşină sunt efectuate următoarele operaţii: a) În starea T1, conţinutul registrului numărător de adrese este transferat în registrul tampon de adrese şi astfel aplicat prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228 la comanda SYNC=1 emisă de microprocesor. b) În starea T2, - se decodifică adresa de pe magistrala de adrese în toate circuitele sistemului

conectate la magistrala de adrese; - se incrementarea cu 1 registrul numărător de adrese PC numai când se citeşte un

octet din codificarea unei instrucţiuni, prin registrul de incrementare-decrementare adrese (Incrementer-Decrementer Address Latch), astfel generându-se adresa următorului octet din programul în execuţie;

- se testează condiţa READY=1, ce marchează trecerea în următoarea stare, prin depunerea pe magistrala de date a octetului din locaţia adresată; intervalul de timp în care READY=0, reprezintă o stare de inactivitate a microprocesorului, notată cu Tw, numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

c) În starea T3, octetul de pe magistrala de date este preluat în locaţia de destinaţie, care, pentru un octet instrucţiune, este registrul de instrucţiuni al blocului de comandă şi control al microprocesorului.

Page 21: Curs Asm 2Curs-ASM014

2-10

d) Starea T4, apare atât în ciclul de maşină M1 al unei instrucţiuni, când se decodifică octetul instrucţiune pentru a se obţine adresa microprogramului prin a cărui citire se generează semnalele de continuare a efectuării instrucţiunii, cât şi în ultimul ciclu de maşină al instrucţiunii în curs de execuţie, când se comandă executarea operaţiei din instrucţiune.

e) În starea T5, se finalizează acele microoperaţii comandate în starea T4, care necesită semnale de comandă defazate cu un tact, după care se continuă cu starea T1 a unui nou ciclu de maşină.

Fig.2.3 Organigrama de parcurgere a unui ciclu de maşină

T1

T2

Tw

T3

T4

T5

INTE=0

READY=?

=0

=1

Ciclu complet ?

Ciclu complet ?

Da

Da

Da

Da

Nu

Nu

Nu

Nu

Instrucţiune completă ?

INTE=1 ? (Este validată funcţionarea în întreruperi a microprocesorului?)

INT=1? (Există cerere de întrerupere ?) Nu

Da (Se dezactivează funcţionarea în întreruperi a microprocesorului.)

Co

nti

nuă in

stru

cţiu

nea

în c

urs

de

exec

uţi

e cu

următo

rul c

iclu

de

maş

ină

.

Co

nti

nuă c

u p

rim

ul c

iclu

de

maş

ină a

l următo

arei

inst

rucţ

iun

i din

pro

gra

mu

l în

cu

rs d

e ex

ecuţi

e.

Co

nti

nuă c

u p

rim

ul c

iclu

de

maş

inăal

pri

mei

inst

ruct

iun

i din

pro

gra

mu

l de

intr

eru

per

e.

(Stare de aşteptare)

( PC ←←←← PC + 1 )

(Microprocesorul emite adresa, semnale de comandă pe DATA BUS şi semnalul SYNC.

(Transfer în locaţia de destinaţie)

( În ciclul de maşină M1, se decodifică octetului instrucţiune şi în ultimul ciclu de maşină, se efectuează operaţia din instrucţiune, în ALU.)

(Încheierea operaţiei în ALU)

Page 22: Curs Asm 2Curs-ASM014

2-11

Ciclurile de maşină, diferite de ciclul de maşină M1, în care are loc doar transferul unui octet se vor încheia cu starea T3. O instrucţiune va fi efectuată integral, în atâtea cicluri de maşină, câţi octeţi sunt necesari a se transfera în instrucţiune, iar finalizarea în unitatea aritmetică şi logică ALU, a operaţiei din instrucţiune are loc în stările T4 şi T5 din ultimul ciclu de maşină, în care se transferă ultimul octet.

La sfârşitul execuţiei unei instrucţiuni, microprocesorul va testa întâi starea logică a bistabilului de validare întreruperi INTE, pentru a verifica programarea în întreruperi a microprocesorului, după care va determina existenţa unei cereri de întrerupere, prin testarea semnalului INT. Când funcţionarea în întreruperi a microprocesorului nu-i validată (INTE=0), sau când nu există cerere de întrerupere (INT=0), microprocesorul va continua cu primul ciclu de maşină al următoarei instrucţiuni din programul în curs de execuţie, iar când este validată funcţionarea în întreruperi a microprocesorului (INTE=1) şi există şi cere de întrerupere (INT=1), atunci se va continua cu primul ciclu de maşină al primei instrucţiuni din programul de întrerupere a cărui cerere de întrerupere a fost astfel acceptată.

La sfârşitul stărilor T3, T4, T5, microprocesorul testează dacă ciclul de maşină în curs este complet.

2.3. PARTICULARITĂŢI ÎN FUNCŢIONAREA UNUI MICROPROCESOR

Particularităţile din funcţionarea unui microprocesor sunt evidenţiate prin descrierea execuţiei unor instrucţiuni, cele mai rapide instrucţiuni fiind codificate pe un octet, iar cele mai complexe instrucţiuni fiind codificate pe trei octeţi. Simbolizările şi codificările binare ale registrelor de date cu destinaţie generală ale microprocesorului Intel 8080, sunt prezentate în Tabelul 2.1, în care locaţia de memorie cu adresa din registrul HL, este tratată de microprocesor ca registru al său, notat în instrucţiuni prin M şi conţinând octetul indicat prin (HL).

Observaţii 1. În descrierea sintetică a unei instrucţiuni, un operand se indică fie prin registrul

microprocesorului unde se află, fie prin punerea între parateze a numărului de adresă al locaţiei sale ori a registrului din 16 biţi ce conţine adresa, fie prin mărimea sa.

2. În codificarea binară a unei instrucţiuni, un operand se indică, fie prin codul registrului microprocesorului unde se află, introdus în octetul instrucţiune citit într-un ciclu de maşină, fie prin adăugarea la octetul instrucţiune a celor doi octeţi ai adresei locaţiei sistemului unde se află, a căror citire necesită încă două cicluri de maşină, fie prin mărimea sa ca octet distinct în codificarea instrucţiunii

Tabelul 2.1

Simbolizare Codificare binară

B 000 C 001 D 010 E 011 H 100 L 101

M=(HL) 110 A 111

2.3.1. FOLOSIREA REGISTRELOR DE DATE ALE MICROPROCESORULUI O instrucţiune tipică de un octet este cea cu simbolizarea MOV D,C

Page 23: Curs Asm 2Curs-ASM014

2-12

codificată prin octetul

Bsss.ddd.01=B001.010.01not

(litera B indicând sistemul binar de codificare), a cărei mnemonică MOV (=Move) semnifică transferul octetului din registrul sursă C (codificat în instrucţiune prin biţii sss), în registrul de destinaţie D (codificat în instrucţiune prin biţii ddd), operaţie descrisă sintetic prin

D←C şi care este efectuată într-un ciclu de maşină din următoarele stări:

- În starea T1, adresa locaţiei ce conţine octetul instrucţiune este transferată din registrul numărător de adrese, în registrul tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228, la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodarea adresei de pe magistrala de adrese în toate circuitele sistemului conectate la magistrala de adrese, incrementarea cu 1 a registrului numărător de adrese PC, în care se formează astfel adresa următorului octet din memorie şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare prin depunerea pe magistrala de date a octetului din locaţia adresată. Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul instrucţiune este preluat în registrul de instrucţiuni al blocului de comandă şi control.

- În starea T4, octetul instrucţiune, aflat în registrul de instrucţiuni, este decodificat pentru a se identifica adresa microprogramului din memoria de comandă a microprocesorului, prin a cărui citire se obţin semnalele ce comandă în această stare transferul octetului din registrul sursă C, în registrul temporar al unităţii aritmetice şi logice, şi se vor genera, în stările următoare, semnalele de comandă a efectuării instrucţiunii.

- În starea T5, se comandă transferul octetului din registrul temporar al unităţii aritmetice şi logice, în registrul de destinaţie D.

Observaţii 1. În stările T1, T2, T3 are loc faza pregătitoare a instrucţiunii în care se extrage din

memorie octetul ce codifică instrucţiunea. 2. În stările T3 şi T4 are loc faza de execuţie a instrucţiunii, transferul octetului din

registrul sursă C, în registrul de destinaţie D, realizându-se în două stări, prin intermediul registrului temporar al unităţii aritmetice şi logice, deoarece prin registrul de selecţie (=Select Register) nu se poate adresa la un moment dat decât un singur registru de date al microprocesorului.

3. La o frecvenţă de tact de 2MHz (perioada fiind de 0,5 µsec), efectuarea instrucţiunii are loc într-un interval de timp de 2,5 µsec.

2.3.2. TEHNICA SUPRAPUNERII INSTRUCŢIUNILOR SUCCESIVE Dintre instrucţiunile aritmetice, instrucţiunea cu simbolizarea ADD C

codificată prin octetul

Brrr.000.01=B001.000.01not

, a cărei mnemonică ADD (=Add) semnifică adunarea la primul operand, reprezentat prin octetul din registrul acumulator A (al cărui cod nu este indicat în codificarea instrucţiunii), a celui de al doilea operand, reprezentat prin octetul din registrul C (codificat în instrucţiune prin biţii rrr), cu formarea rezultatului în registrul acumulator, operaţie descrisă sintetic prin

A←A+C.

Page 24: Curs Asm 2Curs-ASM014

2-13

şi efectuată într-un ciclu de maşină din următoarele stări: - În starea T1, adresa locaţiei ce conţine octetul instrucţiune este transferată din

registrul numărător de adrese, în registrul tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă, sunt transferate 8 semnale de comandă, ce-s memorate în circuitul Intel 8228 la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodarea adresei de pe magistrala de adrese în toate circuitele sistemului conectate la magistrala de adrese, incrementarea cu 1 a registrului numărător de adrese, în care se formează astfel adresa următorului octet din memorie şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare prin depunerea pe magistrala de date a octetului din locaţia adresată. Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul instrucţiune este preluat în registrul de instrucţiuni al blocului de comandă şi control.

- În starea T4, octetul instrucţiune, aflat în registrul de instrucţiuni, este decodificat pentru a se identifica adresa microprogramului din memoria de comandă a microprocesorului, prin a cărui citire se obţin semnalele ce comandă în această stare atât transferul octetului celui de al doilea operand, din registrul C, în registrul temporar al unităţii aritmetice şi logice, cât şi a transferului octetului primului operand, din registrul acumulator A, în registrul acumulator temporar al unităţii aritmetice şi logice, operaţia de adunare fiind amânată pentru starea T2 din primul ciclu de maşină al următoarei instrucţiuni, când magistrala de date, fiind liberă, este utilizată pentru transferul rezultatului operaţiei de adunare în registrul acumulator.

Observaţii 1. La o frecvenţă de tact de 2MHz, deşi efectuarea instrucţiunii de adunare necesită

în realitate 5 stări, cu o durată de 2,5 µsec, aparent efectuarea instrucţiunii are loc doar în patru stări, pe o durată de doar 2 µsec.

2. Tehnica de suprapunere a două instrucţiuni succesive, a căror efectuare se face pe căi diferite, reprezentată în fig.2.4, determină o creştere a vitezei de operare a microprocesorului.

(instrucţiune curentă: ADD C)

← M1 → ....... → T1 T2 T3 T4 T5

T1 T2 T3 T4 ← M1 →

(instrucţiune următoare)

Fig.2.4 Tehnica suprapunerii instrucţiunilor succesive

2.3.3. FOLOSIREA REGISTRULUI M=(HL) O instrucţiune în care este utilizat registrul M, reprezentat prin locaţia de memorie cu

adresa din registrul HL, este instrucţiunea cu simbolizarea ADD M

codificată prin octetul

Brrr.000.10=B110.000.10not

, a cărei mnemonică ADD (=Add) semnifică adunarea la primul operand, reprezentat prin

Page 25: Curs Asm 2Curs-ASM014

2-14

octetul din registrul acumulator A (al cărui cod nu este indicat în codificarea instrucţiunii), a celui de al doilea operand, reprezentat prin octetul din registrul M (codificat în instrucţiune prin biţii rrr), cu formarea rezultatului în registrul acumulator, operaţie descrisă sintetic prin

A←A+M şi efectuată în două cicluri de maşină, notate M1 şi M2.

În ciclul de maşină M1, octetul instrucţiune este transferat în registrul de instrucţiuni al blocului de comandă şi control, prin parcurgerea următoarelor stări:

- În starea T1, adresa locaţiei ce conţine octetul instrucţiune este transferată din registrul numărător de adrese, în registrul tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228, la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodarea adresei de pe magistrala de adrese în toate circuitele sistemului conectate la magistrala de adrese, incrementarea cu 1 a registrului numărător de adrese, în care se formează astfel adresa următorului octet din memorie şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare, prin depunerea pe magistrala de date a octetului din locaţia adresată. Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul instrucţiune este preluat în registrul de instrucţiuni al blocului de comandă şi control.

- În starea T4, octetul instrucţiune, aflat în registrul de instrucţiuni, este decodificat pentru a se identifica adresa microprogramului din memoria de comandă a microprocesorului, prin a cărui citire se obţin semnalele ce comandă în această stare, transferul octetului primului operand, din registrul acumulator A, în registrul acumulator temporar al unităţii aritmetice şi logice, şi se vor genera în stările următoare semnalele de comandă necesare efectuării instrucţiunii.

În ciclul de maşină M2, octetul celui de al doilea operand este transferat din locaţia de memorie cu adresa din registrul HL, în registrul temporar al unităţii aritmetice şi logice, prin parcurgerea următoarelor stări:

- În starea T1, adresa celui de al doilea operand este transferată din registrul HL, în registrul tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228, la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodificarea adresei de pe magistrala de adrese în toate circuitele sistemului conectate la magistrala de adrese şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare prin depunerea pe magistrala de date a octetului din locaţia adresată. Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul celui de al doilea operand este preluat de pe magistrala de date, în registrul temporar de al unităţii aritmetice şi logice, dar operaţia de adunare este amânată pentru starea T2 a următorului ciclu de maşină din aceleaşi considerente de suprapunere a ciclurilor de maşină succesive.

Observaţii 1. La frecvenţa de 2 MHz a tactului sistemului, deşi timpul real de efectuare a

instrucţiunii de adunare cu simbolizarea ADD M

este de 4 µsec, datorită suprapunerii ciclurilor de maşină succesive, timpul aparent de efectuare a instrucţiunii este doar de 3,5 µsec.

Page 26: Curs Asm 2Curs-ASM014

2-15

2. Deşi instrucţiunea cu simbolizarea ADD M

este codificată pe un singur octet, execuţia sa necesită două cicluri de maşină: unul pentru extragerea octetului instrucţiune şi altul pentru transferul octetului celui de al doilea operand din locaţia de memorie cu adresa din registrul HL, în registrul temporar al unităţii aritmetice şi logice.

2.3.4. UTILIZAREA REGISTRELOR DE DATE W ŞI Z O instrucţiune în care sunt utilizate registrele W şi Z, invizibile programatorului, este

instrucţiunea cu simbolizarea LDA HL B,B

codificată pe trei octeţi (LDA=00111010B=octetul instrucţiune, LB =octetul minim de adresă, HB =octetul maxim de adresă), a cărei mnemonică LDA (=Load Accumulator) semnifică transferul în registrul acumulator A, a octetului din locaţia de memorie cu adresa

LHBB , operaţie descrisă sintetic prin A← )BB( LH

şi efectuată în patru cicluri de maşină, notate M1, M2, M3 şi M4. In ciclul de maşină M1, se transferă octetul instrucţiune, în registrul de instrucţiuni al

blocului de comandă şi control, prin parcurgerea următoarelor stări: - În starea T1, adresa locaţiei ce conţine octetul instrucţiune este transferată din

registrul numărător de adrese, în registrul tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228, la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodificarea adresei de pe magistrala de adrese în toate circuitele sistemului conectate la magistrala de adrese, incrementarea cu 1 a registrului numărător de adrese, în care se formează astfel adresa următorului octet din memorie şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare prin depunerea pe magistrala de date a octetului instrucţiune din locaţia adresată. Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul instrucţiune este preluat în registrul de instrucţiuni al blocului de comandă şi control.

- În starea T4, octetul instrucţiune, aflat în registrul de instrucţiuni, este decodificat pentru a se identifica adresa microprogramului din memoria de comandă a microprocesorului, prin a cărui citire se vor genera, în stările următoare, semnalele de comandă necesare efectuării instrucţiunii.

În ciclul de maşină M2, octetul minim de adresa al operandului, notat LB , este transferat din locaţia cu adresa din registrul numărător de adrese, în registrul Z, prin parcurgerea următoarelor stări:

- În starea T1, adresa celui de al doilea octet al instrucţiunii, notat LB , este transferată din registrul numărător de adrese, în registrul tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228, la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodificarea adresei de pe magistrala de adrese, în circuitele sistemului conectate la magistrala de adrese, incrementarea cu 1 a registrului numărător de adrese, în care se formează astfel adresa următorului octet din memorie şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare, prin depunerea

Page 27: Curs Asm 2Curs-ASM014

2-16

pe magistrala de date a octetului LB din locaţia adresată. Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul LB este preluat de pe magistrala de date, în registrul Z. În ciclul de maşină M3, octetul maxim de adresa al operandului, notat HB , este

transferat din locaţia cu adresa din registrul numărător de adrese, în registrul W, prin parcurgerea următoarelor stări:

- În starea T1, adresa celui de al treilea octet al instrucţiunii, notat HB , este transferată din registrul numărător de adrese, în registrul tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228, la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodificarea adresei de pe magistrala de adrese, în circuitele sistemului conectate la magistrala de adrese, incrementarea cu 1 a registrului numărător de adrese, în care se formează astfel adresa următorului octet din memorie şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare, prin depunerea pe magistrala de date a octetului HB din locaţia adresată.Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul HB este preluat de pe magistrala de date, în registrul W. În ciclul de maşină M4, octetul din locaţia de memorie cu adresa din registrul WZ

este transferat în registrul acumulator, în următoarele stări: - În starea T1, adresa operandului este transferată din registrul WZ, în registrul

tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228, la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodificarea adresei de pe magistrala de adrese, în circuitele sistemului conectate la magistrala de adrese şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare, prin depunerea pe magistrala de date a octetului operand din locaţia adresată. Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul operand este preluat de pe magistrala de date, în registrul acumulator.

Observaţie Deşi instrucţiunea cu simbolizarea LDA HL B,B

este codificată pe trei octeţi, efectuarea sa necesită patru cicluri de maşină: trei cicluri de maşină pentru citirea celor trei octeţi ai instrucţiunii şi un ciclu de maşină pentru transferul operandului în faza de execuţie a instrucţiunii.

O altă instrucţiune, în care sunt utilizate registrele W şi Z, invizibile programatorului, este şi instrucţiunea de salt necondiţionat, cu simbolizarea

JMP HL B,B codificată pe trei octeţi (JMP=11000011B=octetul instrucţiune, LB =octetul minim al adresei de salt, HB =octetul maxim al adresei de salt), a cărei mnemonică JMP (=Jump) semnifică saltul necondiţionat la adresa LHBB , operaţie descrisă sintetic prin

Page 28: Curs Asm 2Curs-ASM014

2-17

PC← LHBB şi efectuată în trei cicluri de maşină, notate M1, M2 şi M3.

În ciclul de maşină M1, se transfera octetul instrucţiune, in registrul de instrucţiuni al blocului de comandă şi control, prin parcurgerea următoarelor stări:

- În starea T1, adresa locaţiei ce conţine octetul instrucţiune este transferată din registrul numărător de adrese, în registrul tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228, la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodificarea adresei de pe magistrala de adrese în toate circuitele sistemului conectate la magistrala de adrese, incrementarea cu 1 a registrului numărător de adrese, în care se formează astfel adresa următorului octet din memorie şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare prin depunerea pe magistrala de date a octetului instrucţiune din locaţia adresată. Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul instrucţiune este preluat în registrul de instrucţiuni al blocului de comandă şi control.

- În starea T4, octetul instrucţiune, aflat în registrul de instrucţiuni, este decodificat pentru a se identifica adresa microprogramului din memoria de comandă a microprocesorului, prin a cărui citire se vor genera, în stările următoare, semnalele de comandă necesare efectuării instrucţiunii.

În ciclul de maşină M2, octetul minim de adresa al operandului, notat LB , este transferat din locaţia cu adresa din registrul numărător de adrese, în registrul Z, prin parcurgerea următoarelor stări:

- În starea T1, adresa celui de al doilea octet al instrucţiunii, notat LB , este transferată din registrul numărător de adrese, în registrul tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228, la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodificarea adresei de pe magistrala de adrese, în circuitele sistemului conectate la magistrala de adrese, incrementarea cu 1 a registrului numărător de adrese,în care se formează astfel adresa următorului octet din memorie şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare, prin depunerea pe magistrala de date a octetului LB din locaţia adresată. Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul LB este preluat de pe magistrala de date, în registrul Z. În ciclul de maşină M3, octetul maxim de adresă al operandului, notat HB , este

trasferat din locaţia cu adresa din registrul numărător de adrese, în registrul W prin parcurgerea următoarelor stări:

- În starea T1, adresa celui de al treilea octet al instrucţiunii, notat HB , este transferată din registrul numărător de adrese, în registrul tampon de adrese şi astfel aplicată prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228, la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodificarea adresei de pe magistrala de adrese, în circuitele sistemului conectate la magistrala de adrese, incrementarea cu 1 a registrului

Page 29: Curs Asm 2Curs-ASM014

2-18

numărător de adrese, în care se formează astfel adresa următorului octet din memorie, şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare, prin depunerea pe magistrala de date a octetului HB din locaţia adresată. Intervalul de timp în care READY=0 reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

- În starea T3, octetul HB este preluat de pe magistrala de date, în registrul W. Prin tehnica de suprapunere a ciclurilor de maşină succesive, operaţia de transfer a

adresei de salt, din registrul WZ, în registrul tampon de adrese, este amânată pentru starea T1 din ciclul de maşină M1, al instrucţiunii la care s-a făcut saltul, în care primele două stări au următoarele particularităţi:

- În starea T1, conţinutul registrului WZ este transferat în registrul tampon de adrese şi astfel aplicat prin magistrala de adrese tuturor circuitelor sistemului, iar prin magistrala de date liberă sunt transferate 8 semnale de comandă ce-s memorate în circuitul Intel 8228 la comanda SYNC=1 emisă de microprocesor.

- În starea T2, are loc decodarea adresei de pe magistrala de adrese în toate circuitele sistemului conectate la magistrala de adrese, transferul în registrul PC al conţinutului registrului WZ, incrementat cu 1 prin circuitul de incrementare-decrementare (Incrementer-Decrementer Address Latch), astfel formându-se adresa următorului octet din memorie şi testarea condiţiei READY=1, ce marchează trecerea în următoarea stare prin depunerea pe magistrala de date a octetului din locaţia adresată. Intervalul de timp în care READY=0, reprezintă o stare de inactivitate a microprocesorului, notată cu Tw şi numită stare de aşteptare (=Wait State), necesară operaţiei de decodificare a adresei în circuitele sistemului şi semnalată de microprocesor prin emiterea semnalului WAIT=1.

Observaţie Prin tehnica de suprapunere a efectuării instrucţiunilor succesive, timpul aparent de

efectuare a instrucţiunii JMP HL B,B

la o frecvenţă a tactului sistemului f=2 MHz, este de 5 µsec, deşi timpul real de efectuare este de 5,5 µsec.

Page 30: Curs Asm 2Curs-ASM014

3-1

3. MICROPROCESORUL ZILOG Z80. ARHITECTURĂ INTERNĂ. Microprocesorul ZILOG Z80, a cărui arhitectură internă este prezentată în fig.3.1,

este un microprocesor pe 8 biţi ce se conectează la sistemul pe care-l controlează printr-o magistrală de date de 8 biţi (= Data Bus), o magistrală de adrese de 16 biţi (= Address Bus) şi o magistrală de comandă şi control de 13 biţi (= Control Bus), din care 5 biţi de comandă şi 8 biţi de control. Acest microprocesor conţine o unitate aritmetică şi logică notată ALU (= Arithmetic Logic Unit), în care se efectuează operaţiile aritmetice şi logice elementare implementate în memoria de comandă internă a microprocesorului, un bloc de comandă adrese, un bloc de registre interne şi un bloc de comandă şi control.

Blocul de comandă adrese conţine o logică necesară prelucrării numerelor de adresă şi un număr de registre de adrese de 16 biţi, dintre care registrul tampon de adrese formează prin ieşiri le sale magistrala de adrese a sistemului.

Blocul de registre interne conţine un grup de registre de date de 8 biţi şi un grup de registre de adrese din 16 biţi destinat prelucrării numerelor de adrese. Registrele de date folosite de microprocesor în mod curent, notate A, F, B, C, D, E, H, L, formează setul principal de registre, iar registrele de date notate A’, F’, B’, C’, D’, E’, H’, L’, folosite de microprocesor doar pentru salvarea registrelor setului principal, formează setul auxiliar de registre. Din grupul registrelor de date fac parte: registrul tampon de date (Data Bus Buffer), registrul temporar (Temporary Register), registrul acumulator temporar (Accumulator Latch), A,A’= registre acumulator, F,F’ = registrele cu stările bistabilelor de condiţie (Flags Flip Flop Register) şi B, B’, C, C’, D, D’, E, E’, H, H’, L, L’ = registre de date cu destinaţie generală. Setul principal de registre A, F, B, C, D, E, H, L, poate fi utilizat şi ca registre de 16 biţi în forma A-F (=AF), B-C (=BC), D-E (=DE), H-L (=HL), registrele A, B, D, H fiind de pondere maximă, iar registrele F, C, E, L fiind de pondere minimă.

Transferul datelor între cele două seturi de registre de date se face cu două instrucţiuni de schimb reciproc (de tip exchange), una cu simbolizarea

EX AF,AF’ ce realizează schimbul reciproc de date între registrele AF şi AF’, descrisă sintetic prin

AF↔AF’, şi alta cu simbolizarea

EXX ce realizează schimbul reciproc de date între registrele BC şi BC’, DE şi DE’, HL şi HL’, descrisă sintetic prin

BC↔BC’ DE↔DE’ HL↔HL’ Existenţa celor două seturi identice de registre de date permite un răspuns mai rapid

la o cerere de întrerupere prin salvarea datelor din registrele setului principal, în registrele setului auxiliar (şi nu în memoria stivă), doar cu instrucţiunile de schimb reciproc de date EXX şi EX AF,AF’, transferul de date între registrele interne ale microprocesorului fiind mai rapid decât transferul de date cu memoria stivă. De asemenea existenţa celor două seturi de registre de date mai permite implementarea eficientă a unor tehnici de programare, cum este programarea foreground-background şi determină o simplificare a programării pentru sistemele cu multă memorie ROM (=Read Only Memory) şi mai puţină memorie RAM (=Random Access Memory).

În blocul registrelor de adrese sunt incluse atât registrele notate IX, IY, SP, PC, I şi R, cât şi bistabilele notate IFF1, IFF2, IMFa, IMFb, aceste registre şi bistabile având următoarele semnificaţii :

- Registrul SP (= Stack Pointer), numit registru indicator de stivă, conţine numărul de adresă al ultimei locaţii ocupate din memoria stivă, locaţie ce reprezintă vârful stivei;

Page 31: Curs Asm 2Curs-ASM014

3-2

Fig.3.1 Arhitectura internă a microprocesorului pe opt biţi Zilog Z80

Data Bus Buffer Latch

Registers Area

MULTIPLEXER

B

E

C

L

D

W=invisible

H

Z=invisible

SP=Stack Pointer

PC=Program Counter

Incrementer-Decrementer ADDRESS LATCH

ADDRESS BUFFER

RE

GIS

TE

R S

ELE

CT

Instruction Register

Instruction Decoder

& Machine

Cycle Encoding

Timing & Control

Accumulator

Temporary Register

Accumulator Latch

Flags Flip-Flops:

S,Z,H,P/V,N,C

Decimal Adjust

IFF1

Flags S,Z,-,H,-,P/V,N,C

A’

C’

F’

E’

B’

H’

D’

L’

Arithmetic Logic Unit (=A.L.U.)

Control Bus - 5 Inputs

Control Bus - 8 Outputs

WAIT INT NMI RESET BUSRQ

M1 MREQ IORQ RD WR RFSH HALT BUSACK

Internal Data Bus

D0..D7 „Data .Bus”

INTERRUPT 0=Disable 1=Enable

A0...A15 = Address Bus

Interrupt Flip-Flop Status

I=Interrupt Vector

R=Refresh Register

IX=Index Register

IY=Index Register

IFF2

Store IFF1 in NMI service

Interrupt Mode Flip-Flops

IMFa IMFb

00=MODE 0 01=Not Used 10=MODE 1 11=MODE 2

AF=

„Con

trol

Bus

Microprocessor Internal Control

Page 32: Curs Asm 2Curs-ASM014

3-3

memoria stivă este plasată de programator într-o zonă a memoriei RAM a sistemului, memoria stivă fiind de tipul ultimul intrat - primul ieşit, notat LIFO (=Last In - First Out).

- Registrul PC (=Program Counter), numit registru numărător de adrese sau numărător de program, conţine adresa următoarei locaţii din sistem de unde urmează a se extrage un octet, adresă care este incrementată cu 1(unu) după ce apare pe magistrala de adrese, prin copierea sa în registrul tampon de adrese.

- Registrele IX şi IY, numite registre index, sunt destinate păstrării unor numere de adresă, care-s utilizate în obţinerea rapidă a adresei unui operand, printr-o tehnică de adresare numită adresare indexată. Într-o adresare indexată, numărul de adresă al unui operand dintr-o instrucţiune folosind adresarea indexată este obţinut prin adunarea dintre adresa aflată în registrul index, indicat în instrucţiune (IX sau IY), şi un octet numit deplasament, aflat în câmpul operand al instrucţiunii.

- Registrul I (=Interrupt Vector), numit registrul vectorului de întrerupere, este utilizat la obţinerea indirectă a adresei programului pentru care s-a cerut o întrerupere microprocesorului. Într-o adresare indirectă se va indica microprocesorului adresa locaţiei de memorie la care se află adresa de început a programului de întrerupere. Astfel, la acceptarea unei cereri de întrerupere, adresa programului de întrerupere este obţinută de microprocesor prin folosirea octetului din registrul I ca octet de pondere maximă, iar octetul comunicat prin magistrala de date de circuitul ce a solicitat întreruperea fiind folosit ca octet de pondere minimă. Modul de întrerupere folosind adresarea indirectă are avantajele că permite plasarea programului de întrerupere oriunde în memoria sistemului, timpul de intrare în programul de întrerupere rămânând minim, şi că permite deservirea a 128 cereri de întrerupere distincte.

- Registrul R (=Refresh Register), numit registru de reîmprospătare şi având mărimea a 7 biţi, este utilizat la reâmprospătarea conţinutului locaţiilor unei memorii RAM dinamice, memorii care păstrând informaţia în condensatoare MOS, îşi pierd conţinutul datorită existenţei curenţilor de fugă în circa 2 msec. Aceste memorii au însă avantajul unei densităţi foarte mari de locaţii pe circuit de memorie, fiind utilizate în sistemele cu capacitate mare a memoriei. În vederea reâmprospătării simultane a tuturor locaţiilor dintr-o linie a matricei memoriei RAM dinamice, microprocesorul depune în intervalul decodificării unei instrucţiuni, când magistralele de date şi de adrese sunt libere, conţinutul registrului R pe cei 7 biţi de pondere minimă ai magistralei de adrese, simultam microprocesorul generând şi un semnal de comandă a reâmprospătării. După reâmprospătarea unei linii, registrul R este incrementat cu 1 în vederea obţinerii adresei următoarei linii de reâmprospătat. Operaţia de reâmprospătarea a memoriei RAM dinamice are loc simultan cu efectuarea unui program.

Implementarea funcţiei de reâmprospătare a memoriei RAM dinamice, constituie un avantaj major al microprocesorului Zilog Z80, faţă de celelalte microprocesoare de 8 biţi la care refacerea memoriei RAM dinamice este controlată printr-o logică sintetizată, sau cu un circuit specializat prevăzut sistemului.

- Prin bistabilele de întrerupere IFF1, IFF2 (=Interrupt Flip-Flop) şi ale modului de întrerupere IMFa, IMFb (=Interrupt Mode Flip-flop) se realizează programarea microprocesorului în cazul cererilor de întrerupere mascabile. Astfel, prin starea IFF1 = 1, stabilită prin instrucţiunea cu simbolizarea

EI (=Enable Interrupt), se validează funcţionarea microprocesorului în întreruperi mascabile, în timp ce prin starea IFF1 = 0, stabilită cu instrucţiunea cu simbolizarea

DI (=Disable Interrupt), se dezactivează funcţionarea în întreruperi mascabile a microprocesorului, care, astfel nu ia în consideraţie cererile de întrerupere mascabile solicitate prin semnalul INT = 0.

Indiferent de starea logică a bistabilului IFF1, microprocesorul ZILOG Z80 are posibilitatea de a deservi cererile de întrerupere nemascabile, notate NMI (=Non Mascable

Page 33: Curs Asm 2Curs-ASM014

3-4

Interrupt), ce i se solicită prin semnalul NMI =0. Bistabilul de întrerupere IFF2 are rolul de a memora starea bistabilului IFF1 la

intrarea într-o întrerupere nemascabilă, când bistabilul IFF1 este pus în 0 logic în vederea protecţiei faţă de cererile ulterioare de întrerupere mascabilă, refacerea stării bistabilului IFF1 cu starea din IFF2 făcându-se la revenirea din programul de întrerupere prin instrucţiunea cu simbolizarea

RETN (=Return Non Mascable Interrupt). O cerere de întrerupere mascabilă poate fi tratată de microprocesorul ZILOG Z80 în

modurile notate 0, 1, 2, moduri ce sunt programate prin stările logice a bistabilelor IMFa şi IMFb stabilite prin instrucţiunile

IM 0 ; (IMFa=0, IMFb=0) IM 1 ; (IMFa=1, IMFb=0) IM 2 ; (IMFa=1, IMFb=1),

în care simbolizarea are semnificaţia: IM i = Interrupt Mod i , i=0, 1, 2.

Bistabilele de condiţie Caracteristicile rezultatelor obţinute în ALU pot fi cunoscute prin citirea stărilor logice

a 6 bistabile de condiţie notate S, Z, H, P/V, N, C ce formează registrul bistabilelor (=fanioanelor) de condiţie, notat F şi structurat ca în fig.3.2, fiecare bistabil informând cu privire la o singură proprietate a rezultatului generat de ALU în registrul acumulator A. Bistabilele de condiţie, a căror stări sunt stabilite simultan cu generarea în ALU a rezultatului dintr-o instrucţiune executată, au rolul de a evita determinarea proprietăţilor rezultatului generat de ALU prin testarea bit cu bit a registrului acumulator, operaţie complicată ce ar necesita mult timp.

Registrul F

S Z - H - P/V N C F7 F6 F5 F4 F3 F2 F1 F0 Fig.3.2 – Structura registrului F

Bistabilele de condiţie au următoarele semnificaţii : - Bistabilul de semn, notat S (=Sign Flag), reprezintă copia celui mai semnificativ bit

al rezultatului din registrul A ce într-o operaţie aritmetică între numere cu semn codifică semnul „ - ” prin starea logică „1”, iar semnul „+” prin starea logică „0”.

- Bistabilul de zero, notat Z (=Zero Flag), are rolul de a indica prin bascularea sa în starea logică „1” că s-a generat rezultatul nul în ultima operaţie efectuată în unitatea aritmetică şi logică, starea logică „0” semnificând că rezultatul generat este diferit de zero. Acest bistabil trece în starea logică ”1” şi când într-o instrucţiune de comparare a doi operanzi rezultă egaliate, compararea făcându-se prin scăderea operanzilor pentru afectarea bistabilelor de condiţie, dar fără a se genera rezultat.

- Bistabilul de transport, notat C (=Carry Flag), are rolul de a sesiza depăşirea de capacitate dintr-o operaţie aritmetică prin bascularea în starea logică „1”, stare ce reprezintă chiar cifra de transport generată, adică al 9-lea bit. De asemenea, acest bistabil este folosit şi la testarea bit cu bit a conţinutului registrului acumulator A, prin recirculare sau deplasare la stânga, ori la dreapta, cu o logică prevăzută acestui registru.

- Bistabilul de transport auxiliar, notat H (=Half Carry Flag), este utilizat în cazul operaţiilor aritmetice cu numere zecimale (în baza 10), la care fiecare cifră zecimală este codificată în binar pe câte 4 biţi, în cod BCD, acest bistabil având rolul de a memora cifra de transport generată de la bitul de rang 3 câtre bitul de rang 4. Acest bistabil nu poate condiţiona o ramificare, fiind testat doar la executarea instrucţiunii de ajustare zecimală,

Page 34: Curs Asm 2Curs-ASM014

3-5

simbolizată prin DAA (=Decimal Adjust Accumulator),

prin care se corectează rezultatul din registrul acumulator A (=A7, A6, .. , A0), generat în binar la executarea unei instrucţiuni aritmetice, pentru a reprezenta două cifre zecimale în cod BCD, una codificată pe cei patru biţi de pondere minimă A3, A2, A1, A0, iar alta pe cei patru biţi de pondere maximă A7, A6, A5, A4.

- Bistabilul de adunare/scădere, notat N (=Negative Flag), are rolul de a memora tipul de adunare sau de scădere al unei operaţii aritmetice efectuate, stare logică „0” indicând operaţia de adunare, iar starea logică „1” indicând operaţia de scădere. Acest bistabil nu este testat în operaţiile de ramificare, fiind folosit, ca şi bistabilele C (=Carry Flag) şi H (=Half carry flag), în executarea instrucţiunii de ajustare zecimală DAA .

- Bistabilul de paritate/depăşire, notat P/V (=Parity/Overflow Flag), într-o operaţie logică, va indica paritatea rezultatului, starea logică „1” semnalând paritatea pară, notată PE (=Parity Even), iar starea logică „0” semnalând paritatea impară, notată PO (=Parity Odd), în timp ce, într-o operaţie aritmetică între numere cu semn, va memora transportul de la bitul de rang 6, bitul de rang 7 fiind destinat semnului. În instrucţiunile de transfer multiplu (LDD, LDI, LDDR, LDIR) şi în instrucţiunile de căutare (CPI, CPD, CPIR, CPDR), bistabilul P/V va bascula în starea logică „0” la anularea registrului pereche BC folosit ca numărător.

Blocul de comandă şi control Blocul de comandă şi control asigură sincronizarea funcţionării circuitelor sistemului

prin următoarele semnale: a) Semnale de control - RESET , este semnalul prin care se comandă iniţializarea sistemului prin punerea

în starea logică „0” a bistabilelor de întrerupere IFF1, IFF2, IMFa, IMFb şi anularea registrelor PC, R şi I. Pe durata comenzii de iniţializare, ce trebuie să fie de cel puţin trei perioade ale tactului sistemului pentru o completă iniţializare şi în care nu se efectuează cicluri de reâmprospătare a conţinutului memoriei dinamice, magistralele de date şi de adrese sunt trecute în înaltă impedanţă, iar cele 8 semnale de comandă ale microprocesorului sunt dezactivate.

- BUSRQ (=Bus Request), este semnalul prin care un circuit al sistemului solicită microprocesorului să cedeze controlul sistemului prin trecerea în înaltă impedanţă a magistralelor de date (=Data Bus) şi de adrese (=Address Bus), precum şi a semnalelor de comandă M1,MREQ , IORQ , RD , WR .

- NMI (= Non Mascable Interrupt) , este semnalul numit cerere de întrerupere nemascabilă, prin care un circuit al sistemului solicită microprocesorului întreruperea temporară a programului în curs de execuţie, în vederea efectuării unui program mai prioritar, cerere ce va fi luată în consideraţie la sfârşitul instrucţiunii în curs de execuţie, indiferent de starea logică a bistabilului de întrerupere IFF1 şi care este prioritară faţă de o cerere de întrerupere mascabilă solicitată cu semnalul INT = 0.

- INT (= Interrupt Request), este semnalul, numit cere de întrerupere mascabilă, prin care un circuit al sistemului solicită microprocesorului întreruperea temporară a programului în curs de execuţie, în vederea efectuării unui program mai prioritar, cerere ce va fi luată în consideraţie la sfârşitul instrucţiunii în curs de execuţie , dar numai dacă microprocesorul este programat să funcţioneze în întreruperi mascabile prin IFF1 = 1.

- WAIT este semnalul de sincronizare prin care microprocesorul este comandat să treacă într-o stare de inactivitate, numită stare de aşteptare, în care microprocesorul rămâne cât timp WAIT =0. Extinderea excesivă a duratei stării de aşteptare, în care microprocesorul Zilog Z80 nu emite semnale RFSH, poate determina pierderea

Page 35: Curs Asm 2Curs-ASM014

3-6

conţinutului memoriei RAM dinamice. - CLK , este terminalul de aplicare a tactului extern de sincronizare. b) Semnale de comandă - BUSAK (=Bus Acknowledge), semnal echivalent semnalului HOLDA al

microprocesorului Intel 8080, este emis de microprocesorul Zilog Z80 la acceptarea cererii de acces direct la memoria sistemului, ce a fost solicitată prin BUSRQ =0, informând că

magistrala de date, magistrala de adrese şi semnalele de comandă M1,MREQ , IORQ , RD , WR fiind trecute în înaltă impedanţă, controlul sistemului poate fi preluat. Acest semnal nu prezintă starea de înaltă impedanţă.

- HALT (=Halt State) este semnalul emis de microprocesor pentru a informa că a trecut în starea halt de inactivitate, ca urmare a efectuării instrucţiunii cu simbolizarea HALT. În starea halt, pentru a se efectua refacerea conţinutului memoriei RAM dinamice, microprocesorul efectuează permanent instrucţiunea cu simbolizarea

NOP (=No Operation), ce semnifică o pauză de un ciclu de maşină în funcţionarea microprocesorului. Din starea halt, microprocesorul nu poate ieşi decât printr-o comandă RESET =0 de iniţializare a sistemului, printr-o cerere de întrerupere nemascabilă NMI=0, sau printr-o cerere de întrerupere mascabilă INT =0 dacă IFF1=1.

- MREQ (=Memory Request) este semnalul emis de microprocesorul Zilog Z80 pentru a informa că pe magistrala de adrese se afla adresa unei locaţii de memorie implicată într-un transfer al cărui tip de citire sau de scriere va fi indicat de microprocesor prin emiterea unei comenzi RD =0, respectiv WR =0. Semnalul MREQ prezintă trei stări : starea „0”, starea „1” şi starea de înaltă impedanţă notată „Z”.

- IORQ (=Input/Output Request) este semnalul emis de microprocesorul Zilog Z80 pentru a informa că pe cei mai puţin semnificativi 8 biţi ai magistralei de adrese se afla adresa unei locaţii de intrare/ieşire implicată într-un transfer, al cărui tip de citire sau de scriere va fi indicat de microprocesor prin emiterea unei comenzi RD =0, respectiv WR =0. Semnalul IORQ=0 va fi emis de microprocesor şi la acceptarea unei cereri de întrerupere, în toate ciclurile de maşină în care se preia un octet de la circuitul ce a solicitat întreruperea, numite cicluri de achitare a întreruperii. Acest semnal prezintă trei stări.

- M1 (=Machine Cycle One) este semnalul emis de microprocesorul Zilog Z80 în primul ciclu de maşină al executării unei instrucţiuni, ce este un ciclu fetch (=Fetch Cycle), în care se extrage cuvântul instrucţiune. Emiterea simultană a semnalelor M1 şi MREQ informează că ciclul fetch în curs este un ciclu de extragere din memorie, în timp ce emiterea simultană a semnalelor M1 şi IORQ indică acceptarea unei cereri de întrerupere, determinând circuitul ce a solicitat întreruperea să transfere prin magistrala de date adresa programului de întrerupere, fie sub forma octetului de pondere minimă al adresei din memorie unde se găseşte adresa de întrerupere, când microprocesorul este programat să funcţioneze în modul 2 mascabil ce utilizează adresarea indirectă, fie prin depunerea succesivă a octeţilor unei instrucţiuni de apel când microprocesorul programat să funcţioneze în modul 0 mascabil va emite semnalele simultane M1 şi IORQ pentru

fiecare octet al instrucţiunii de apel. Emiterea simultană a semnalelor M1 şi IORQ este echivalentă semnalului INTA al microprocesorului Intel 8080 :

M1 ∩ IORQ ≡ INTA (= Interrupt Acknowledge) .

Semnalul M1 prezintă trei stări. - RD (=Read) este semnalul emis de microprocesorul Zilog Z80 pentru a comanda

citirea locaţiei de memorie sau de intrare/ieşire a cărei adresă se află pe magistrala de

Page 36: Curs Asm 2Curs-ASM014

3-7

adrese a sistemului. Semnalul RD are trei stări. - WR (=Write) este semnalul emis de microprocesorul Zilog Z80 pentru a comanda

scrierea locaţiei de memorie sau de intrare/ieşire a cărei adresă se află pe magistrala de adrese a sistemului. Semnalul WR are trei stări.

- RFSH (=Refresh) este semnalul emis de microprocesorul Zilog Z80 pentru comanda reâmprospătării simultane a tuturor locaţiilor situate în linia matricei memoriei RAM dinamice a cărei adresă a fost preluată, din registrul R, pe cei 7 biţi de pondere minimă ai magistralei de adrese. Emiterea simultană a semnalelor RFSH şi MREQ informează că pe cei 7 biţi de pondere minimă ai magistralei de adrese se află adresa liniei de reâmprospătat din matricea memoriei RAM dinamice.

Funcţiile pe terminale ale microprocesorului Zilog Z80 sunt prezentate în fig.3.3.

A11 - 1 x 40 - A10 A12 - 2 Zilog Z80 39 - A9 A13 - 3 38 - A8 A14 - 4 37 - A7 A15 - 5 36 - A6 CLK - 6 35 - A5

D4 - 7 34 - A4 D3 - 8 33 - A3 D5 - 9 32 - A2 D6 - 10 31 - A1

+5V - 11 30 - A0 D2 - 12 29 - GND D7 - 13 28 - RFSH D0 - 14 27 - M1 D1 - 15 26 - RESET

INT - 16 25 - BUSRQ NMI - 17 24 - WAIT

HALT - 18 23 - BUSAK MREQ - 19 22 - WR

IORQ - 20 21 - RD Fig.3.3 Zilog Z80-Vedere de sus (=Top View)

Microprocesorul Zilog Z80 are următoarele caracteristici : - Are 158 instrucţiuni, ce includ şi cele 78 instrucţiuni ale microprocesorului Intel

8080, în aceeaşi codificare binară, astfel că un program realizat în limbajul de programare al microprocesorului Intel 8080 poate fi executat şi într-un sistem cu microprocesor Zilog Z80.

- Setul extins de instrucţiuni conţine operaţii pe bit, pe octeţi şi pe cuvinte. Instrucţiunile de căutare şi de transfer de blocuri de date, împreună cu adresările relativă şi indexată oferă mari posibilităţi în utilizarea microprocesorului Zilog Z80.

- Existenţa setului auxiliar de registre şi a registrelor index IX, IY permite o programare uşoară a aplicaţiilor.

Page 37: Curs Asm 2Curs-ASM014

3-8

- Microprocesorul Zilog Z80 are un sistem complex de întreruperi şi o logică de comandă a reâmprospătării memoriei RAM dinamice, ceea ce simplifică structura în hard a sistemului pe care-l controlează.

Page 38: Curs Asm 2Curs-ASM014

4-1

4. SISTEMUL DE ÎNTRERUPERI Zilog Z80 şi Intel 8080 Unui microprocesor i se poate solicita să întrerupă efectuarea programului în curs de

execuţie prin semnalele RESET , BUSRQ , NMI, INT , indicate în ordinea lor de prioritate. Când mai multe din aceste semnale apar simultan, va avea efect doar semnalul cel mai prioritar.

Sub acţiunea semnalului RESET=0 microprocesorul este iniţializat, abandonându-se programul în curs de execuţie. Sub acţiunea semnalului BUSRQ =0, la terminarea instrucţiunii în curs de execuţie, microprocesorul va ceda controlul sistemului circuitului ce a solicitat un acces direct la memorie, prin trecerea în înaltă impedanţă a terminalelor sale M1,MREQ , IORQ , RD , WR , de date şi de adrese. Sub acţiunea semnalelor NMI=0 şi INT =0 microprocesorul întrerupe temporar efectuarea programului în curs de execuţie în vederea efectuării unui program mai prioritar după a cărui execuţie se va reveni la continuarea programului întrerupt.

Întreruperile solicitate prin semnalul NMI=0 se numesc întreruperi nemascabile, iar întreruperile solicitate prin semnalul INT =0 se numesc întreruperi mascabile.

La microprocesorul Zilog Z80 se deosebesc următoarele tipuri de întreruperi: 4.1. ÎNTRERUPERI NEMASCABILE Cererile de întrerupere nemascabile, solicitate prin semnale NMI, sunt întotdeauna

recunoscute de către microprocesor, care, la primirea unei comenzi NMI=0, după terminarea instrucţiunii în curs de execuţie, va trece la efectuarea programului de întrerupere prioritar plasat în memorie de la adresa hexazecimală 00.66 H, prin efectuarea următoarelor operaţii :

- Salvează în memoria stivă numărul de adresă din registrul numărător de adrese PC (= Program Counter);

- Salvează starea bistabilului IFF1 în bistabilul IFF2; - Se pune bistabilul IFF1 în starea logică „0”; - Se înscrie, în registrul numărător de adrese PC, numărul de adresă 00.66 H, ce

reprezintă adresa de început a programului de întrerupere prioritar; - Pentru a informa că s-a acceptat o întrerupere, se emit pe magistrala de comandă şi control semnalele M1 şi IORQ , echivalente semnalului INTA al microprocesorului Intel 8080:

INTA = M1 ∩ IORQ

Salvarea numărului de adresă din registrul numărător de adrese PC şi salvarea stării bistabilului IFF1 în bistabilul IFF2 sunt necesare pentru a se putea reface conţinutul acestora la terminarea programului de întrerupere, în vederea revenirii la continuarea programului întrerupt.

Punerea în starea logică „0” a bistabilului IFF1 realizează prin mascare protecţia împotriva cererilor de întrerupere mascabilă ulterioare solicitate prin semnalul INT =0, protecţie necesară deoarece programul de întrerupere nemascabilă este considerat implicit cel mai prioritar.

Prin înscrierea în registrul PC a adresei 00.66 H, de la care începe programul de întrerupere, se declanşează efectuarea programului de întrerupere prin transferul pe magistrala de adrese a numărului de adresă 00.66 H.

Înaintea efectuării programului de întrerupere, se impune şi salvarea registrelor microprocesorului afectate prin folosirea lor în programul de întrerupere de efectuat, salvare absolut necesară pentru refacerea conţinutului acestor registre la revenirea în

Page 39: Curs Asm 2Curs-ASM014

4-2

programul întrerupt, salvarea şi refacerea registrelor de date rămânând în sarcina exclusivă a programatorului. Salvarea registrelor de date se va face cu primele instrucţiuni ale programului de întrerupere, în timp ce refacerea conţinutului registrelor salvate se va face prin ultimele instrucţiuni ale programului de întrerupere dinaintea instrucţiunii de revenire în programul întrerupt.

Salvarea registrelor de date se poate face fie în memoria stivă, fie în setul auxiliar de registre prin următoarele instrucţiuni de schimb reciproc de date:

EX AF,AF’ (Exchange : AF ↔ AF’) EXX (Exchange : BC ↔ BC’ , DE ↔ DE’ , HL ↔ HL’) În vederea revenirii în programul întrerupt, operaţiile de refacere a conţinutului

registrului numărător de adrese cu adresa de revenire din vârful stivei şi a stării bistabilului de întrerupere IFF1 cu starea logică din bistabilul IFF2, se vor realiza prin instrucţiunea

RETN (Return Non Maskable Interrupt : IFF1 ← IFF2, PC ← adresa de revenire din vârful stivei),

ce se introduce la sfârşitul programului de întrerupere şi care semnifică revenirea din întrerupere nemascabilă deservită, la continuarea programului întrerupt.

Revenirea în programul întrerupt se poate face şi prin instrucţiunile RET (Return : PC ← adresa de revenire din vârful stivei) RETI (Return Interrupt : PC ← adresa de revenire din vârful stivei),

prin care nu se reface însă starea iniţială a bistabilului de întrerupere IFF1. Semnalul NMI este asincron faţă de tactul sistemului, fiind memorat în microprocesor

pe frontul său căzător (1ց 0) şi luat în consideraţie la sfârşitul instrucţiunii în curs de execuţie din programul de întrerupt.

4.2. ÎNTRERUPERI MASCABILE Aceste cereri de întrerupere, solicitate prin semnalul INT =0, pot declanşa o

întrerupere în funcţionarea microprocesorului, numai dacă funcţionarea microprocesorului în întreruperi mascabile este validată prin starea logică „1” a bistabilului IFF1, starea logică „0” a bistabilului de întrerupere IFF1 determinând protecţia împotriva oricărei cereri de întrerupere mascabilă prin neluarea în consideraţie a semnalului INT =0. Programarea stării IFF1=0 se face prin instrucţiunea

DI (Disable Interrupt : IFF1←0), în timp ce programarea stării IFF1=1 se face prin instrucţiunea

EI (Enable Interrupt : IFF1←1). În program, în locul unde este necesară validarea, sau inhibarea funcţionării

microprocesorului în întreruperi mascabile, se va introduce instrucţiunea EI, respectiv DI. O cerere de întrerupere mascabilă, solicitată microprocesorului printr-un semnal

INT =0, va fi luată în consideraţie de microprocesor la terminarea instrucţiunii în curs de execuţie, dar numai dacă funcţionarea în întreruperi a microprocesorului este validată prin IFF1=1, iar starea INT =0 se păstrează, o cerere de întrerupere nemascabilă nefiind memorată de microprocesor.

La acceptarea unei cereri de întrerupere mascabilă, bistabilul de întrerupere IFF1 este pus în starea logică „0”, pentru ca programul de întrerupere, considerat apriori prioritar, să nu poată fi întrerupt de o cerere de întrerupere mascabilă ulterioară. Dacă programul de întrerupere, în a cărui efectuare se intră, este unul neprioritar, ce permite întreruperea sa, atunci acest program va începe cu instrucţiunea EI, de validare a funcţionării microprocesorului în întreruperi mascabile.

Într-o cerere de întrerupere mascabilă, semnalul INT =0 va determina doar salvarea în memoria stivă a conţinutului registrului PC, în sarcina programatorului programului de întrerupere rămânând atât stabilirea stării bistabilului de întrerupere IFF1, cât şi

Page 40: Curs Asm 2Curs-ASM014

4-3

gestionarea registrelor de date afectate în programul de întrerupere, ce trebuie salvate la începutul programului de întrerupere, şi refăcute la sfârşitul programului de întrerupere. Revenirea în programul întrerupt se face cu una din instrucţiunile

RET (Return : PC ← adresa de revenire din vârful stivei) RETI (Return Interrupt : PC ← adresa de revenire din vârful stivei),

plasată la sfârşitul programului de întrerupere. Între instrucţiunile RET şi RETI, ce acţionează în mod identic, există doar diferenţă

de codificare, instrucţiunea RETI, al cărei cod este recunoscut de circuitele de interfaţă din familia microprocesorului Zilog Z80, fiind utilizată la revenirea din programele de întrerupere a căror prioritate în deservire este stabilită prin cascadarea circuitelor de interfaţă prin care se solicită întreruperi mascabile.

O cerere de întrerupere mascabilă poate fi tratată de microprocesorul Zilog Z80 în modurile notate Mod 0, Mod 1, Mod 2, moduri programate anterior cererii de întrerupere de deservit, prin stabilirea stărilor logice a bistabilelor modului de întrerupere IMFa şi IMFb cu una din instrucţiunile:

IM 0 (Interrupt Mod 0 : IMFa ← 0 , IMFb ← 0) IM 1 (Interrupt Mod 1 : IMFa ← 1 , IMFb ← 0) IM 2 (Interrupt Mod 2 : IMFa ← Ø , IMFb ← 1). 4.2.1. MOD 1 mascabil

Deservirea în MOD 1 a unei cereri de întrerupere mascabilă este similară modului de întrerupere nemascabil. În MOD 1, sub acţiunea semnalului INT =0, microprocesorul va efectua următoarele operaţii:

- Se pun în starea logică „0” bistabilele IFF1 şi IFF2; - Se salvează în vârful memoriei stivă adresa de revenire aflată în registrul

numărător de adrese PC; - Pentru a informa că s-a acceptat o întrerupere, se emit pe magistrala de comandă şi control semnalele M1 şi IORQ , echivalente semnalului INTA al microprocesorului Intel 8080:

INTA = M1 ∩ IORQ ; - Se înscrie, în registrul numărător de adrese PC, numărul de adresă 00.38 H, ce

reprezintă adresa de început a programului de întrerupere prioritar. Observaţie Operaţiile efectuate au următorul rol: - Prin starea logică „0” a bistabilului de întrerupere IFF1, se realizează protecţia

împotriva unor cereri de întrerupere mascabilă ulterioare, iar vechea stare a bistabilului IFF1 nefiind salvată, se va pune în „0” logic şi bistabilul de întrerupere IFF2.

- Salvarea în memoria stivă a adresei de revenire din registrul numărător de adrese PC, este necesară la revenirea din programul de întrerupere, în vederea continuării nealterate a programului întrerupt.

- Prin înscrierea în registrul PC a adresei 00.38 H, de la care începe programul de întrerupere, se declanşează efectuarea programului de întrerupere prin transferul pe magistrala de adrese a numărului de adresă 00.38 H.

4.2.2. MOD 0 mascabil

În MOD 0 mascabil, identificarea programului de întrerupere se face prin efectuarea instrucţiunii de apel transferată microprocesorului, la acceptarea întreruperii, de către circuitul ce a solicitat întreruperea. În timp ce microprocesorul Intel 8080, ce poate funcţiona doar în MOD 0 mascabil, acceptă doar instrucţiuni de apel dintr-un octet, de tipul

Page 41: Curs Asm 2Curs-ASM014

4-4

restart: RST p (Restart : stivă ← PC, PC ← 8×p, cu p = 0, .. ,7) ,

microprocesorul Zilog Z80 acceptă şi instrucţiuni de apel din trei octeţi: CALL LB , HB ; (Call : stivă ← PC, PC ← H LB B ). Microprocesorul Zilog Z80 intră în MOD 0 mascabil la conectarea tensiunii de

alimentare, sau în urma efectuării instrucţiunii cu simbolizarea IM 0 (Interrupt Mod 0 : IMFa ← 0 , IMFb ← 0). În MOD 0 mascabil, microprocesorul, sub acţiunea semnalului INT =0, va efectua

următoarele operaţii : - Fixează în starea logică „0” bistabilul de întrerupere IFF1 ≡ INTE, astfel inhibându-

se funcţionarea în întreruperi mascabile a microprocesorului. La microprocesorul Zilog Z80 se pune în starea logică „0” şi bistabilul de întrerupere IFF2 care nu este folosit la salvarea stării lui IFF1.

- Pentru a informa că s-a acceptat o întrerupere, se emit pe magistrala de comandă şi control semnalele M1 şi IORQ , echivalente semnalului INTA al microprocesorului Intel 8080:

INTA = M1 ∩ IORQ ; - Sub comanda semnalului de acceptare a întreruperii INTA = M1 ∩ IORQ ,

se preia în registrul de instrucţiuni al blocului de comandă şi control al microprocesorului, octetul instrucţiunii de apel de tip restart, transferat pe magistrala de date de circuitul ce a solicitat întreruperea ;

- Se execută instrucţiunea de apel de tip restart RST p (Restart : stivă ← PC, PC ← 8×p, cu p = 0, .. ,7 ), ce constă în salvarea în vârful memoriei stivă a adresei de revenire din registrul

numărător de adrese PC, şi declanşarea execuţiei programului de întrerupere prin înscrierea în registrul PC a adresei 8×p de început a programului de întrerupere.

Observaţie În cazul microprocesorului Zilog Z80, dacă octetul depus pe magistrala de date de

circuitul ce a solicitat întreruperea este octetul instrucţiune al unei instrucţiuni de apel CALL LB , HB ,

formată din trei octeţi, microprocesorul va emite încă două semnale INTA = M1 ∩ IORQ ,

pentru a prelua de la circuitul ce a solicitat întreruperea şi ceilalţi doi octeţi ai instrucţiunii, notaţi LB (=octetul minim al adresei programului de întrerupere) şi respectiv HB (=octetul maxim al adresei programului de întrerupere), după care, prin executarea instrucţiunii de apel, va salva în vârful memoriei stivă adresa de revenire din registrul numărător de adrese PC şi va declanşa execuţia programului de întrerupere prin înscrierea în registrul PC a adresei H LB B de început a programului de întrerupere.

O instrucţiune de apel de tip restart RST p , p = 0, .. ,7

are avantajul unei execuţii rapide, fiind codificată pe un singur octet, dar permite deservirea doar a opt programe de întrerupere, în timp ce cu o instrucţiune de apel de tipul

CALL LB , HB , deşi timpul de efectuare a instrucţiunii este mai mare, pot fi deservite oricâte programe de întrerupere plasate oriunde în spaţiul memoriei sistemului.

Adresele subrutinelor apelate prin cereri de întrerupere deservite în MOD 0 mascabil, sunt indicate în Tabelul 4.1.

Page 42: Curs Asm 2Curs-ASM014

4-5

4.2.3. MOD 2 mascabil

Pentru microprocesorul Zilog Z80 programat să funcţioneze în MOD 2 mascabil cu instrucţiunea cu simbolizarea

IM 2 ; Interrupt Mod 2 : IMFa ← Ø , IMFb ← 1 , sub acţiunea semnalului de cerere de întrerupere INT =0, la terminarea instrucţiunii în curs de execuţie, microprocesorul va efectua următoarele operaţii:

- Se pun în starea logică „0” bistabilele de întrerupere IFF1 şi IFF2; - Se salvează în memoria stivă adresa de revenire aflată în registrul numărător de

adrese PC ; - Pentru a informa că s-a acceptat o întrerupere, se emit pe magistrala de comandă şi control semnalele M1 şi IORQ , echivalente semnalului INTA al microprocesorului Intel 8080:

INTA = M1 ∩ IORQ ; - Sub acţiunea semnalului de acceptare a întreruperii INTA = M1 ∩ IORQ ,

emis de micropropcesor, circuitul ce a solicitat întreruperea depune pe magistrala de date un octet având bitul 0D =0.

- Microprocesorul formează în registrul numărător de adrese PC numărul de adresă N = 15A , … , 9A , 8A , 7A , … , 1A , 0A ,

în care cei mai puţin semnificativi opt biţi, notaţi 7A , … , 1A , 0A , sunt formaţi din octetul

7D , … , 1D , 0D , în care 0D =0, depus pe magistrala de date de circuitul ce a solicitat

întreruperea, iar cei opt biţi de pondere maximă, notaţi 15A , … , 9A , 8A , sunt daţi de

octetul conţinut în registrul vectorului de întrerupere I (=Interrupt Vector)= 7I , … , 1I , 0I :

N = 15A , .. , 9A , 8A , 7A , .. , 1A , 0A = 7I , … , 1I , 0I , 7D , … , 1D , 0D .

Data Bus

I=Interrupt Vector Register 7D … 1D 0D =0

7I … 1I 0I

⇓ ⇓

15A … 9A 8A 7A … 1A 0A = N

PC = Program Counter Register

Tabelul 4.1

Instrucţiune de apel

Codificare instrucţiune

(H)

Adresă de întrerupere

(H) RST 0 C7 00.00 RST 1 CF 00.08 RST 2 D7 00.10 RST 3 DF 00.18 RST 4 E7 00.20 RST 5 EF 00.28 RST 6 F7 00.30 RST 7 FF 00.38

CALL 0EFH,01H CD.EF.01 01.EF

Page 43: Curs Asm 2Curs-ASM014

4-6

- Microprocesorul extrage din locaţia de memorie cu adresa N (=număr par pentru că 0D =0) octetul minim al adresei programului de întrerupere, octet notat (N), iar din următoarea locaţie de memorie cu adresa N+1 (=număr impar deoarece

0D =1) octetul maxim al adresei programului de întrerupere, octet notat (N+1), formând în registrul numărător de adrese PC adresa programului de întrerupere în a cărui execuţie astfel se intră:

PC ← (N+1) (N) . Observaţii 1. În MOD 2 mascabil, adresa programului de întrerupere este indicată prin tehnica

adresării indirecte, circuitul ce a solicitat întreruperea comunicând microprocesorului adresa locaţiei de memorie unde se află adresa programului de întrerupere.

2. În MOD 2 mascabil, deşi timpul de identificare a adresei programului de întrerupere este mai mare, pot fi deservite 128 de programe de întrerupere distincte ce pot fi plasate oriunde în spaţiul memoriei sistemului.

4.3. CERERI MULTIPLE DE ÎNTRERUPERE Perifericele conectate la un sistem cu microprocesor, pot solicita microprocesorului

să întrerupă temporar rezolvarea programului în curs de execuţie în vederea rezolvării unor programe de întrerupere prin care se rezolvă sarcini mai prioritare, existând posibilitatea apariţiei simultane a mai multor cereri de întrerupere. În aceste cazuri, cererile de întrerupere vor fi deservite succesiv într-o anumită ordine de prioritate ce se identifică prin următoarele tehnici: tehnica de interogare, tehnica întreruperii prioritare şi tehnica cascadării circuitelor de interfaţă.

Tehnica de interogare utilizează un program de interogare care, la acceptarea

întreruperii, identifică circuitele de interfaţă ce au solicitat întrerupere, prin testarea fanionului de întrerupere din fiecare interfaţă conectată sistemului, şi stabileşte, după criterii impuse de aplicaţie, cea mai prioritară între cererile de întrerupere detectate al cărei program de întrerupere îl execută. Fiecare circuit de interfaţă se conectează cu semnalul de cerere de întrerupere, generat cu un tranzistor cu drena în gol, la terminalul INT al microprocesorului, ca în fig.4.1. Circuitul de interfaţă a cărui cerere de întrerupere a fost deservită îşi va anula semnalul de cerere de întrerupere, astfel că semnalul INT =0 menţinut de circuitele a căror cereri de întrerupere nu au fost deservite vor determina reluarea procedeului de interogare pentru deservirea celei mai prioritare dintre cererile de întrerupere existente.

Tehnica de interogare are dezavantajul că timpul de intrare în programul de întrerupere cel mai prioritar este lung, dar în schimb nu impune introducerea unor circuite suplimentare în sistem.

Tehnica întreruperii prioritare foloseşte un circuit specializat în gestionarea cererilor

de întrerupere pentru identificarea în permanenţă a circuitului de interfaţă cu cea mai prioritară cerere de întrerupere ce va fi deservită imediat ce microprocesorul va accepta întreruperea solicitată prin semnalul INT =0. Circuitul specializat în gestionarea cererilor de întrerupere are rolul de a dirija transferul de date către circuitul de interfaţă cu cererea de întrerupere cea mai prioritară.

Un astfel de circuit pentru gestionarea cererilor de întrerupere este circuitul PIC 8259 (PIC=Programmable Interrupt Controller) la care se pot conecta opt circuite de interfaţă, existând posibilitatea conectării a opt circuite PIC 8259 pentru gestionarea a 64 cereri de întrerupere. Modul de conectare a unui circuit de gestionare a cererilor de întrerupere este

Page 44: Curs Asm 2Curs-ASM014

4-7

ilustrat în fig.4.2. Tehnica cascadării circuitelor de interfaţă necesită înserierea circuitelor de interfaţă

după ordinea lor de prioritate, pornind de la sursa de alimentare, la care se conectează circuitul de interfaţă cel mai prioritar. Fiecare circuit de interfaţă este prevăzut cu două terminale de înseriere, unul de intrare, notat IEI (=Interrupt Enable In), ce se conectează la circuitul cu prioritate imediat superioară şi altul de ieşire, notat IEO (=Interupt Enable Out), ce se conectează la circuitul de prioritate imediat inferioară, terminalul IEI al celui mai prioritar circuit fiind conectat la sursa de alimentare, iar terminalul IEO al circuitului cu cea mai mică prioritate fiind neconectat. Terminalele IEI şi IEO ale unui circuit de interfaţă sunt conectate între ele când circuitul solicită o întrerupere şi deconectate în lipsa unei cereri de întrerupere. Astfel, între circuitele de interfaţă ce au solicitat o întrerupere, doar circuitul cel mai prioritar va avea pe terminalul IEI tensiunea sursei de alimentare, programul său de întrerupere fiind efectuat la acceptarea întreruperii de către microprocesor.

Un circuit a cărui cerere de întrerupere a fost deservită îşi întrerupe legătura dintre terminalele sale IEI şi IEO la efectuarea instrucţiunii RETI (= Return Interrupt) de la sfârşitul programului de întrerupere, al cărei cod este recunoscut de circuitele de interfaţă. În continuare, semnalul INT =0 determină microprocesorul să intre din nou în întrerupere deservind astfel cererea de întrerupere a următorului circuit de interfaţă ce are acum pe teminalil I tenaiunea sursei de alimentare.

Această tehnică de cascadare, ilustrată în fig.4.3, a fost prevăzută circuitelor de interfaţă ale microprocesorului Zilog Z80. Un sistem folosind identificarea priorităţii cererilor de întrerupere prin tehnica cascadării circuitelor de interfaţă nu este flexibil, modificarea ordinii de prioritate impunând modificarea în hard a sistemului.

Fig.4.1 Tehnica interogării

Interface 0

CPU Zilog Z80

0

0

0

INT

7D , ... , 1D , 0D

Interface 1

Interface 7

Page 45: Curs Asm 2Curs-ASM014

4-8

Fig.4.2 Tehnica întreruperii prioritare

Fig.4.3 Metoda cascadării circuitelor de interfaţă

CPU Intel 8080

Interface 0

Interface 1

Interface 7

INTA INT0IR

1IR

7IR

...

7D , ... , 1D , 0D (= Data Bus)

PIC 8259

INT INTA

Interface 0

CPU Zilog Z80 0

0

0

INT

7D , ... , 1D , 0D

Interface 1

Interface 7

...

IEI

IEI

IEI

IEO

IEO

IEO

+5V

Page 46: Curs Asm 2Curs-ASM014

5-1

5. PROGRAMAREA MICROPROCESOARELOR Intel 8080, Zilog Z80 5.1. TEHNICI DE ADRESARE Definiţii 1. Modul în care se indică o locaţie dintr-un sistem cu microprocesor, poartă numele

de adresare. 2. Tehnica prin care într-o instrucţiune se indică un operand, sau o locaţie din

sistemul cu microprocesor, poartă numele de tehnică de adresare. În general se deosebesc următoarele tehnici de adresare: adresarea implicită,

adresarea explicită, adresarea imediată, adresarea normală, adresarea directă, adresarea indirectă, adresarea indexată şi adresarea relativă.

Adresarea implicită a unui operand semnifică faptul că operandul adresat se află într-

unul din registrele speciale ale microprocesorului, cum ar fi registrul acumulator A, sau registrul numărător de adrese PC, registrul special fiind folosit fără a i se specifică codul său binar în forma simbolică binară a instrucţiunii.

Adresarea explicită a unui operand semnifică faptul că operandul adresat se află într-

un registru din microprocesor, al cărui cod binar este inclus în forma simbolică binară a instrucţiunii.

Observaţie Adresarea implicită şi adresarea explicită, pentru că se referă la registre ale

microprocesorului, mai sunt numite şi adresare pe registru. Adresarea imediată a unui operand reprezintă includerea operandului în câmpul

operand al instrucţiunii. Instrucţiunile ce folosesc adresarea imediată a unui operand au mărimea a doi octeţi, conţinând octetul instrucţiune şi octetul operand.

Adresarea extinsă, numită şi adresare normală, reprezintă adresarea unui operand

situat într-o locaţie de memorie, tehnică în care operandul este indicat prin adresa locaţiei unde se află, adresa din 16 biţi fiind indicată pe doi octeţi în câmpul operand al instrucţiunii. O instrucţiune folosind pentru un operand tehnica adresării extinse are mărimea a trei octeţi, primul fiind octetul instrucţiune, iar următorii doi octeţi conţinând adresa locaţiei operandului, indicată începând cu octetul minim, urmat de cel maxim.

Adresarea directă, reprezintă adresarea unui operand situat într-o locaţie a sistemului

a cărei adresă are valori în intervalul 0 ... 255, tehnică în care operandul este indicat printr-o adresă dintr-un octet inclusă în câmpul operand al instrucţiunii. O instrucţiune folosind adresarea directă a unui operand va avea mărimea a doi octeţi, primul fiind octetul instrucţiune, iar al doilea octet conţinând adresa locaţiei operandului.

Adresarea indexată, reprezintă adresarea unui operand situat într-o zona din 255

locaţii, a cărei locaţie centrală are adresa din 16 biţi plasată într-un registru numit registru index, tehnică prin care operandul este indicat cu un octet numit deplasament, cu valori în intervalul -127 ... +127 ce reprezintă poziţia ocupată de operand în zona celor 255 locaţii. Adresa unui operand indicat prin tehnica adresării indexate, este obţinută prin adunarea dintre octetul deplasament şi conţinutul registrului index. O instrucţiune folosind adresarea indexată a unui operand va avea mărimea a doi octeţi, primul fiind octetul instrucţiune, iar al doilea octet fiind octetul deplasament.

Page 47: Curs Asm 2Curs-ASM014

5-2

Adresarea relativă, reprezintă adresarea unui operand situat într-o zonă din 255 locaţii, a cărei locaţie centrală are adresa din registrul numărător de adrese, tehnică prin care operandul este indicat cu un octet, numit deplasament, cu valori în intervalul -127 ... +127 ce reprezintă poziţia ocupată de operand în zona celor 255 locaţii. Adresa unui operand indicat prin tehnica adresării relative, este obţinută prin adunarea octetului deplasament la conţinutul registrului numărător de adrese. O instrucţiune folosind adresarea relativă a unui operand va avea mărimea a doi octeţi, primul fiind octetul instrucţiune, iar al doilea octet fiind octetul deplasament.

Adresarea indirectă, reprezintă tehnica de adresare prin care un operand este indicat

cu adresa din 16 biţi de la care se va citi adresa locaţiei operandului. Adresarea indirectă este realizată prin citirea dintr-o tabelă de date a locaţiei unde se află adresa căutată.

5.2. SETUL DE INSTRUCŢIUNI: Intel 8080, Zilog Z80 5.2.1. CLASIFICAREA ŞI FORMATUL INSTRUCŢIUNILOR Instrucţiunile unui microprocesor pot fi clasificate după mai multe criterii: - După operaţiile executate, se deosebesc instrucţiuni de transfer, instrucţiuni de

ramificare, instrucţiuni de rotire şi deplasare, instrucţiuni logice, instrucţiuni aritmetice, instrucţiuni de prelucrare pe bit şi instrucţiuni de control.

- După locaţiile adresate în efectuarea sa, o instrucţiune poate folosi registre ale microprocesorului, locaţii ale memoriei sistemului şi locaţii de intrare-ieşire.

- După mărimea în octeţi, se deosebesc instrucţiuni dintr-un singur octet, din doi octeţi, din trei octeţi, sau din patru octeţi.

O instrucţiune este cu atât mai rapidă, cu cât este formată din mai puţine cuvinte şi este cu atât mai complexă, cu cât numărul de octeţi pe care-i codificată este mai mare.

Definiţie În reprezentarea simbolică binară a unei instrucţiuni, grupul de biţi destinaţi codificării

unei informaţii, se numeşte câmp. Primul octet al unei instrucţiuni, numit octet instrucţiune, conţine câmpul codului

operaţiei şi câmpul tipului de adresare, iar restul octeţilor instrucţiunii sunt destinaţi pentru câmpul operand, numit şi câmp adresă.

Câmpul codului operaţiei conţine un cod arbitrar de identificare a unei instrucţiuni. Numărul maxim al instrucţiunilor ce pot fi prevăzute este dat de numărul codificărilor distincte ce pot fi obţinute din biţii câmpului codului operaţiei. Pentru un câmp al codului operaţiei din 6 biţi, numărul maxim al instrucţiunilor ce ar putea fi prevăzute unui microprocesor ar fi de 64. În realitate, numărul instrucţiunilor având un câmp al codului operaţiei din 6 biţi este mai mare de 64 datorită existenţei instrucţiunilor cu adresare implicită la care câmpul codului operaţiei poate fi extins pe toţi cei 8 biţi ai octetului instrucţiune.

Câmpul adresă apare în instrucţiunile cu adresarea unei locaţii a sistemului, având mărimea a 16 biţi pentru adresarea uneia din cele 65536 locaţii de memorie prin tehnica adresării normale şi mărimea a 8 biţi care reprezintă fie un număr de adresă, în cazul adresării uneia din cele 256 locaţii de intrare-ieşire prin tehnica adresării directe, fie un deplasament pe 8 biţi în raport cu o bază din 16 biţi, în cazul adresării unei locaţii de memorie în tehnica adresării relative ori în tehnica adresării indexate.

În tabelele cu instrucţiuni, notaţiile folosite au următoarele semnificaţii: - „” = bistabilul de condiţie este afectat de rezultatul operaţiei ; - „0”, „1” = stări logice ale unui bistabil de condiţie ; - „spaţiu alb” = starea bistabilului de condiţie nu are importanţă ; - S, Z, H, P/V, N, C = notaţii ale bistabilelor de condiţie de semn, de zero, de

Page 48: Curs Asm 2Curs-ASM014

5-3

transport auxiliar, de paritate/depăşire, de adunare-scădere şi respectiv de transport ; - „cc” = simbol al condiţiei de ramificare testate ; - „b” = rangul unui bit dintr-un octet, cu valori în intervalul 0 ... 7 ; - „n” = octet cu valori în intervalul 0 ... 255 ; - „d” = octet în complement faţă de 2, indicat într-o instrucţiune cu adresare

indexată, în care adresa necesară se determină cu una din relaţiile: IX+d, IY+d ; - „e” = octet în complement faţă de 2, indicat într-o instrucţiune cu adresare relativă,

în care adresa necesară se determină cu relaţia: PC+d ; - „(IX+d), (IY+d)” = octetul dintr-o locaţie de memorie adresată indexat prin

deplasamentul d şi registrul index IX sau IY specificat în instrucţiune; - „r’, r ” = unul din registrele de date A, B, C, D, E, H, L, M=(HL) din microprocesor ; - „rp” = unul din registrele de 16 biţi BC, DE, HL, SP ; - „ HL n,n ” = notaţiile octeţilor minim şi respectiv maxim dintr-un număr de adresă ; - „ LHnn ” = număr de adresă indicat prin octeţii minim, Ln şi maxim, Hn ; - „( LHnn )” = octetul din locaţia de memorie cu adresa LHnn . În instrucţiunile microprocesoarelor Intel 8080 şi Zilog Z80, pentru registrele de 8 biţi

şi de 16 biţi se utilizează notaţiile din tabelele 5.1 şi 5.2.

Tabelul 5.1 Tabelul 5.2 Simbolizare Zilog Z80

Simbolizare Intel 8080

Codificare binară

LHrprp=rp

B B 000

Notare registre rp

Cod binar

Hrp Lrp

C C 001 B 00 B C D D 010 D 01 D E E E 011 H 10 H L H H 100 SP 11 HSP LSP

L L 101 (HL) M 110

A A 111

5.2.2. INSTRUCŢIUNI DE TRANSFER, DE SCHIMB ŞI DE CĂUTARE Instrucţiunile de transfer se împart în instrucţiuni de transfer pe 8 biţi, instrucţiuni de

transfer pe 16 biţi şi instrucţiuni de transfer de blocuri-schimburi între registre-căutare. Instrucţiunile de transfer sunt în fapt instrucţiuni de copiere a conţinutului registrului sursă în registrul de destinaţie, registrele sursă şi destinaţie având după executarea instrucţiunii de transfer acelaşi conţinut, excepţie făcând doar instrucţiunile de schimb reciproc între registre.

Modul de efectuare a unei instrucţiuni de transfer este evidenţiat prin următoarele exemple:

- Instrucţiunea cu simbolizarea LD r,(HL) pentru microprocesorul Zilog Z80 MOV r,M pentru microprocesorul Intel 8080

şi codificarea binară

01 rrr 110 not= 01 rrr mmm

în care biţii rrr reprezintă codificarea binară a registrului r, iar biţii mmm=110 codificarea binară a registrului M=(HL), realizează transferul octetului din locaţia de memorie cu adresa din registrul HL, în registrul r indicat in instrucţiune, operaţie descrisă sintetic prin

r←M=(HL),

Page 49: Curs Asm 2Curs-ASM014

5-4

şi indicată cu mnemonicele LD (=Load), MOV (=Move).

- Instrucţiunea cu simbolizarea LD rp, L Hn n pentru microprocesorul Zilog Z80

LXI rp, L Hn n pentru microprocesorul Intel 8080

transferă în registrul pereche rp indicat, numărul din 16 biţi LHnn , indicat în câmpul operand prin tehnica adresării imediate, operaţie descrisă sintetic prin

Lrp ← Ln

Hrp ← Hn

şi indicată cu mnemonicele LD (=Load), LXI (=Load in Imediat Addressing Mode).

- Instrucţiunea cu simbolizarea EX (SP),HL pentru microprocesorul Zilog Z80 XTHL pentru microprocesorul Intel 8080

codificată prin octetul 11100011B, realizează schimbul reciproc de date între cele două locaţii din vârful stivei şi registrul HL, operaţie descrisă sintetic prin

L↔(SP) H↔(SP+1),

şi având mnemonicele EX=Exchange, XTHL=Exchange Stack Top with HL register.

- Instrucţiunea cu simbolizarea PUSH AF pentru microprocesorul Zilog Z80 PUSH PSW pentru microprocesorul Intel 8080,

codificată prin octetul 11110101B (=F5H), realizează salvarea în stivă a registrului AF=PSW începând cu registrul de pondere maximă A, operaţie descrisă sintetic prin

(SP-1)← A (SP-2)← F SP←SP-2,

şi având mnemonica PUSH=Push.

În instrucţiunile de transfer de blocuri de date, implementate doar microprocesorului Zilog Z80 şi având mnemonicele LDI (=Load & Increment), LDIR (=Load, Increment & Repeat), LDD (=Load & Decrement), LDDR (=Load, Decrement & Repeat), registrul HL conţine adresa locaţiei sursă, registrul DE conţine adresa locaţiei de destinaţtie, iar registrul BC are rolul de numărător al locaţiilor transferate.

Modul de operare în transferul unui bloc de date este evidenţiat prin următoarele instrucţiuni:

- Instrucţiunea cu simbolizarea LDI

realizează transferul octetului din locaţia sursă cu adresa din registrul HL în locaţia de destinaţie cu adresa din registrul DE, numărarea transferului efectuat prin decrementarea cu 1 a registrului BC şi formarea adreselor pentru următorul transfer prin incrementarea cu 1 a registrelor DE şi HL, sarcină descrisă sintetic prin

(DE)←(HL) HL←HL+1 DE←DE+1 BC←BC-1. - Instrucţiunea cu simbolizarea LDIR

transferă atâţia octeţi câţi sunt indicaţi în registrul BC, prin repetarea instrucţiunii LDI, sarcină descrisă sintetic prin

Page 50: Curs Asm 2Curs-ASM014

5-5

(DE)←(HL) HL←HL+1 DE←DE+1 BC←BC-1 repetă până BC=0. În instrucţiunile de căutare, implementate doar microprocesorului Zilog Z80 şi având

mnemonicele CPI (=Compare & Increment), CPIR (=Compare, Increment & Repeat), CPD (=Compare & Decrement), CPDR (=Compare, Decrement & Repeat), registrul HL conţine adresa locaţiei în care se caută octetul din registrul A, iar registrul BC are rolul de numărător al cautărilor efectuate, căutarea constând în compararea prin scădere din registrul acumulator a octetului din locaţia cu adresa din registrul HL.

Modul de operare în căutarea unui octet este evidenţiat prin următoarele instrucţiuni: - Instrucţiunea cu simbolizarea CPI

compară octetul din registrul acumulator A cu octetul aflat în locaţia cu adresa din registrul HL, numără compararea efectuată prin decrementarea cu 1 a registrului BC şi generează adresa locaţiei următorului octet de comparat prin incrementarea cu 1 a registrului HL, sarcină descrisă sintetic prin

A-(HL) HL←HL+1 BC←BC-1. - Instrucţiunea cu simbolizarea CPIR

repetă sacina instrucţiunii CPI până cand fie A=(HL), fie BC=0, având următoarea descriere sintetică

A-(HL) HL←HL+1 BC←BC-1 repetă până A=(HL) sau BC=0. Mnemonicele instrucţiunilor de transfer ale microprocesorului Intel 8080 au

următoarele semnificaţii: - MOV = Move - MVI = Move in Immediate Addressing Mode - LDAX = Load Accumulator from Address of rp Register - LDA = Load Accumulator from Address of Instruction - STAX = Store Accumulator to Address from rp Register - STA = Store Accumulator to Address of Instruction - LXI = Load rp Register in Immediate Addressing Mode - LHLD = Load HL Register Direct from Address of Instruction - SHLD = Store HL Register Direct to Address of Instruction - PUSH = Push rp Register to Stack Top - POP = Pop rp Register from Stack Top - XCHG = Exchange HL with DE - XTHL = Exchange Stack Top with HL 5.2.3. INSTRUCŢIUNI DE RAMIFICARE Definiţie Continuarea unui program de la altă adresă decât cea aflată în registrul numărător

de adrese se numeşte ramificare.

Page 51: Curs Asm 2Curs-ASM014

5-6

O ramificare se poate realiza fie în urma îndeplinirii unei condiţii care se testează, caz în care ramificarea se numeşte ramificare condiţionată, fie fără testarea vreunei condiţii, caz în care ramificarea se numeşte ramificare necondiţionată. Se deosebesc ramificări prin salt, prin apel şi prin revenire, fiecare tip de ramificare fiind realizată prin instrucţiuni de ramificare specifice prevăzute microprocesorului.

Ramificarea prin salt se realizează prin efectuarea unei instrucţiuni de salt ce conţine în câmpul operand adresa la care se face saltul în program, adresă care este scrisă în registrul numărător de adrese PC, al cărui vechi conţinut astfel se pierde.

Ramificarea prin apel este realizată prin efectuarea unei instrucţiuni de apel a unui subprogram a cărui adresă de început este indicată în câmpul operand al instrucţiunii. Efectuarea unei instrucţiuni de apel constă în salvarea în vârful memoriei stivă, cu adresa din registrul indicator de stivă SP, a conţinutului registrului numărător de adrese PC, ce reprezintă adresa de revenire la continuarea programului apelant după efectuarea subprogramului apelat, şi trecerea la efectuarea subprogramului apelat prin înscrierea în registrul PC a adresei sale de început din câmpul operand al instrucţiunii.

Ramificarea prin revenire în programul apelant, dintr-un subprogram, se realizează prin efectuarea instrucţiunii de revenire de la sfârşitul subprogramului, ce constă în transferul adresei de revenire, din vârful memoriei stivă, a cărui adresă se află în registrul indicator de stivă SP, în registrul numărător de adrese PC.

Dintre instrucţiunile de ramificare necondiţionată fac parte următoarele instrucţiuni: - Instrucţiunea de ramificare prin salt cu simbolizarea JP L Hn n pentru microprocesorul Zilog Z80

JMP L Hn n pentru microprocesorul Intel 8080

realizează saltul la adresa LHnn indicată în câmpul operand, prin înscrierea sa în registrul numărător de adrese, sarcină descrisă sintetic prin

LPC ← Ln

HPC ← Hn şi având mnemonicele JP, JMP (=Jump).

- Instrucţiunea de salt în tehnica adresării relative cu simbolizarea JR e

realizează saltul la adresa obţinută prin adunarea octetului deplasament, cu valori în intervalul -127 ... +127, la registrul numărător de adrese, sarcină descrisă sintetic prin

PC←PC+e şi indicată cu mnemonica JR (=Jump in the Relative Addressing Mode).

- Instrucţiunea cu simbolizarea JP (HL) pentru microprocesorul Zilog Z80 PCHL pentru microprocesorul Intel 8080

realizează transferul în registrul numărător de adrese PC, a conţinutului registrului HL, sarcină de iniţializare a registrului numărător de adrese descrisă sintetic prin

LPC ←L

HPC ←H şi având mnemonicele JP (=Jump), PCHL (=Move HL in PC).

- Instrucţiunea de apel a unui subprogram, codificată pe trei octeţi, cu simbolizarea CALL L Hn n

realizează transferul numărului de adresa LHnn , indicat în câmpul operand al instrucţiunii, în registrul numărător de adrese, al cărui vechi conţinut, ce reprezintă adresa de revenire din subprogramul apelat, este salvat în memoria stivă, sarcină descrisă sintetic prin

Page 52: Curs Asm 2Curs-ASM014

5-7

(SP-1) ← HPC (SP-2) ← LPC SP←SP-2

LPC ← Ln

HPC ← Hn şi având mnemonica CALL (=Call).

- Instrucţiunea de apel a unui subprogram, codificată pe un singur octet, cu simbolizarea

RST p , unde p=0, ... ,7 realizează transferul numărului de adresa 8×p, indicat prin octetul p din câmpul operand al instrucţiunii, în registrul numărător de adrese, al cărui vechi conţinut, ce reprezintă adresa de revenire din subprogramul apelat, este salvat în memoria stivă, sarcină descrisă sintetic prin

(SP-1) ← HPC (SP-2) ← LPC SP←SP-2

LPC ←8×p

HPC ←0 şi având mnemonica RST (=Restart).

- Instrucţiunea de la sfârşitul unui subprogram, simbolizată prin RET

şi având mnemonica RET (=Return), realizează revenirea în programul apelant, prin transferul în registrul numărător de adrese PC, a adresei de revenire din vârful memoriei stivă, indicat în registrul indicator de stivă SP, sarcină descrisă sintetic prin

LPC ←(SP)

HPC ←(SP+1) SP←SP+2. Într-un program poate apare necesitatea efectuării unei ramificări condiţionată de o

caracteristică a rezultatului dintr-o operaţie efectuată. Deoarece caracteristicile unui rezultat obţinut în unitatea aritmetică şi logică a microprocesorului sunt memorate în circuitele basculante bistabile de condiţie, rezultă că o ramificare condiţionată de o anumită caracteristică a rezultatului se va face prin testarea stării logice a bistabilului destinat memorării proprietăţii.

Având în vedere că într-o ramificare condiţionată pot fi testate doar bistabilele de condiţie S, Z, P si CY şi că fiecare bistabil de condiţie are două stări logice stabile, vor exista un număr de 8 condiţii de testat într-o astfel de ramificare, pentru fiecare tip de ramificare existând câte o instrucţiune de testare a fiecăreia din cele 8 codiţii.

Pentru instrucţiunile de ramificare condiţionată comune microprocesoarelor Intel 8080 şi Zilog Z80, octetul instrucţiune are codificarea binară

11.ccc.ttt unde biţii ccc reprezintă codificarea binară a condiţiei de ramificare, iar prin biţii ttt se codifică tipul de salt, apel, sau revenire al ramificării.

Simbolizarea şi codificarea binară, atât a celor opt condiţii de ramificare, prin care se

testează starea logică a unui bistabil de condiţie, cât şi a tipului de salt, apel ori revenire al ramificării, sunt indicate în tabelele 5.3 şi 5.4.

Page 53: Curs Asm 2Curs-ASM014

5-8

Tabel 5.3: Condiţii de ramificare

Descriere condiţie de ramificare

Bistabil condiţie testat

Stare bistabil condiţie

Notare condiţie

(cc)

Cod binar al condiţiei

(ccc) Rezultat ≠ 0 0 NZ 000 Rezultat = 0

Z 1 Z 001

Rezultat fără transport 0 NC 010 Rezultat cu transport

CY 1 C 011

Rezultat cu paritate impară 0 PO 100 Rezultat cu paritate pară

P 1 PE 101

Rezultat pozitiv 0 P 110 Rezultat negativ

S 1 M 111

Tabel 5.4: Tipuri de ramificări

Tipul de ramificare Cod binar (ttt)

Notare Z80

Notare Intel 8080

Salt condiţionat 010 JP J Apel condiţionat 100 CALL C

Revenire condiţionată 000 RET R

Modul de efectuare a instrucţiunilor de ramificare condiţionată este exemplificat prin

următoarele instrucţiuni: - Instrucţiunile de salt condiţionat cu simbolizarea JR cc,e

şi mnemonica JR (=Jump in the Relative Addressing Mode), semnifică testarea condiţiei cc (=C, NC, Z, NZ) indicată în instrucţiune, la a cărei îndeplinire se face saltul la adresa obţinută prin adunarea octetului deplasament e, indicat în câmpul operand al instrucţiunii, la conţinutul registrului numărător de adrese PC, în timp ce nerealizarea condiţiei testate determină continuarea programului cu instrucţiunea următoare, sarcină descrisă sintetic prin:

cc=adevărat ⇒ PC←PC+e cc=fals ⇒ continuă programul cu următoarea instrucţiune. - Instrucţiunea cu simbolizarea DJNZ e

şi mnemonica DJNZ (=Decrement and Jump in the Relative Addresssing Mode, if Z=0), semnifică decrementarea cu 1 a registrului B cu rol de numărător şi continuarea programului cu următoarea instrucţiune dacă B=0, sau, dacă B≠0 salt la adresa formată prin adunarea la registrul numărător de adrese PC, a octetului deplasament e cu valori in intervalul -127…+127 din câmpul operand al instrucţiunii, sarcină descrisă sintetic prin

B←B-1 B≠0 ⇒ PC←PC+e B=0 ⇒ continuă programul cu următoarea instrucţiune. Modul de efectuare a instrucţiunilor de ramificare condiţionată este reprezentat grafic

în fig.5.1 pentru cazul testării condiţiei Z =1 în instrucţiunile microprocesorului Intel 8080, condiţie notată prin Z.

Page 54: Curs Asm 2Curs-ASM014

5-9

Fig.5.1 Modul de operare al instrucţiunilor de ramificare condiţionată

5.2.5. INSTRUCŢIUNI DE INTRARE-IEŞIRE La un sistem cu microprocesor, introducerea şi extragerea datelor se face prin

echipamente periferice ce se conectează la sistem prin intermediul unor circuite de interfaţă prevazute sistemului. Astfel, transferul unei date între microprocesor şi un periferic se va efectua prin două transferuri susccesive, dintre care unul între periferic şi interfaţă şi altul între interfaţă şi microprocesor, interfaţa având circuite distincte pentru transfer cu perifericul şi pentru transfer cu microprocesorul. Registrele interfeţei destinate transferului de date cu perifericul sunt numite locaţii de intrare-ieşire şi pot fi adresate de microprocesor prin numere de adresă din 8 biţi transferaţi pe cei 8 biţi de pondere minimă ai magistralei de adrese.

Z=?

Z=?

Z=?

stivă←PC=p+2 PC← LHBB

PC←p+2 din stivă

PC← LHnn

=0

=0

=0

=1

=1

=1

Subprogram apelat

Memoria sistemului:

Adresă locaţie

Conţinut locaţie

0

k-1 JZ

k Ln

k+1 Hn

k+2

LHnn

LHnn +1

p-1 CZ

p LB

p+1 HB

p+2

LHBB

LHBB +1

LHBB +n RZ

LHBB +n+1

...

Page 55: Curs Asm 2Curs-ASM014

5-10

Transferul datelor cu locaţiile de intrare-ieşire se realizează cu instrucţiunile de intrare-ieşire prevazute microprocesorului, a căror execuţie este exemplificată prin instrucţiunea cu simbolizarea

IN A,(n) pentru microprocesorul Zilog Z80 IN n pentru microprocesorul Intel 8080

şi mnemonica IN (=Input), ce semnifică transferul în registrul acumulator a octetului din locaţia de intrare cu adresa n de un octet, indicată în câmpul operand al instrucţiunii, sarcină descrisă sintetc prin

A7 ...A0←n ⇔ Address Bus ← A n A15...A8←A A←(n). Dintre instrucţiunile de intrare-ieşire implementare doar microprocesorului Zilog Z80,

fac parte următoarele instrucţiuni: - Instrucţiunea cu simbolizarea IN r,(C)

având mnemonica IN (=Input) şi codificarea binară pe doi octeţi 11101101 01 rrr 000,

în care biţii rrr reprezintă codul binar al registrului r implicat în instrucţiune, semnifică transferul în registrul r din 8 biţi al microprocesorului, a octetului din locaţia de intrare cu adresa din registrul C, sarcină descrisă sintetic prin

A7 ...A0 ← C ⇔ Address Bus ← BC A15...A8 ← B r ← (C). - Instrucţiunea cu simbolizarea IND

şi mnemonica IND (=Input and Decrement), semnifică transferul octetului din locaţia de intrare cu adresa din registrul C, în locaţia de memorie cu adresa din registrul HL, numărarea transferului efectuat prin decrementarea cu 1 a registrului B cu rol de numărător şi generarea adresei de destinaţie a următorului transfer prin decrementarea cu 1 a registrului HL, sarcină descrisă sintetic prin

A7 ...A0 ← C ⇔ Address Bus ← BC A15...A8 ← B (HL)← (C) B←B-1 HL←HL-1. - Instrucţiunea cu simbolizarea OTIR

şi mnemonica OTIR (=Out, Increment and Repeat), semnifică transferul octetului din locaţia de memorie cu adresa din registrul HL, în locaţia de ieşire cu adresa din registrul C, numărarea transferului efectuat prin decrementarea cu 1 a registrului B cu rol de numărător, generarea adresei locaţiei sursă a următorului transfer prin incrementarea cu 1 a registrului HL şi repetarea acestor operaţii până la anularea registrului B, adică prin efectuarea atâtor transferuri din zona de memorie cu adresa de început din registrul HL, în locatia de ieşire cu adresa din registrul C, câte transferuri sunt indicate în registrul B, sarcină descrisă sintetic prin

A7 ...A0 ← C ⇔ Address Bus ← BC A15...A8 ← B (C)← (HL)

Page 56: Curs Asm 2Curs-ASM014

5-11

HL←HL+1 B←B-1 repetă operaţiile până B=0. 5.2.5. INSTRUCŢIUNI DE PRELUCRARE PE BIT: Zilog Z80 Prin instrucţiunile de prelucrare pe bit se poate realiza pentru un octet aflat într-un

registru al microprocesorului sau într-o locaţie a memoriei sistemului, testarea unui singur bit sau punerea unui singur bit într-una din stările logice „0” sau „1”. Într-o astfel de instrucţiune, bitul asupra căruia se operează este indicat prin rangul său care fiind cuprins între 0 si 7, este indicat pe trei biţi în codificarea binară a instrucţiunii.

Între instrucţiunile de prelucrare pe bit se deosebesc instrucţiuni cu mnemonica BIT de testare a stării unui bit prin transferul stării sale complementare în bistabilul de condiţie de zero Z, instructiuni de setare cu mnemonica SET, prin care un bit este pus în starea logică „1” şi instrucţiuni de resetare cu mnemonica RES prin care un bit este pus în starea logică „0”.

Codificarea binară a rangului bitului pe care se operează este indicată în Tabelul 5.5.

Tabel 5.5 Rang

bit Cod rang

0b 000

1b 001

2b 010

3b 011

4b 100

5b 101

6b 110

7b 111

Modul de operare a instrucţiunilor de prelucrare pe bit este exemplificat prin următoarele instrucţiuni:

- Instructiunea cu simbolizarea BIT b,r

codificată pe doi octeţi 11001011 01 bbb rrr,

în care biţii bbb codifică rangul bitului prelucrat, iar biţii rrr codifică registrul implicat din microprocesor, semnifică transferul în bistabilul de condiţie de zero Z, a stării complementate a bitului de rang b din octetul aflat în registrul r al microprocesorului, sarcină descrisă sintetic prin

Z← br - Instrucţiunea cu simbolizarea SET b,(IX+d)

semnifică punerea în starea logică „1” a bitului de rang b, din octetul aflat în locaţia de memorie a cărei adresă, indicată în tehnica adresării indexate, este obţinută prin adunarea dintre octetul deplasament, notat d, şi conţinutul registrului index IX, indicate in instrucţiune, sarcină descrisă sintetic prin

b)d+IX( ←1.

Page 57: Curs Asm 2Curs-ASM014

5-12

5.2.6. INSTRUCŢIUNI DE ROTIRE ŞI DEPLASARE În verificarea conţinutului unui registru al microprocesorului sau al unei locaţii din

sistem nu pot fi testaţi simultan toţi biţii, un microprocesor oferind posibilitatea testării la un moment dat doar a unui singur bit, testarea efectuându-se transferând bitul de testat în bistabilul de transport printr-o mişcare a biţilor octetului de testat, operaţie numită deplasare şi care atunci când este efectuată prin recircularea biţilor octetului testat fiind numită rotire. Operaţiile de rotire şi deplasare pot fi efectuate la stânga, sau la dreapta. Operaţia de rotire se poate realiza atât în mod direct, cât şi prin intermediul bistabilului de transport.

Microprocesorului Intel 8080 i s-au implementat doar operaţiile de rotire pe bit a registrului acumulator, în timp ce microprocesorului Zilog Z80 i s-au prevăzut operaţiile de rotire şi deplasare pe bit a registrelor de date ale microprocesorului şi a locaţiilor de memorie, precum şi operaţia de rotire pe grupuri de patru biţi, numite digiţi.

În mnemonica unei asemenea instrucţiuni se va indica tipul de rotire sau deplasare al operaţiei de mişcare a biţilor şi sensul la dreapta sau la stânga în care se efectuează, iar în mnemonica unei instrucţiuni de deplasare se va mai indica şi tipul aritmetic sau logic al deplasării.

Modul de efectuare a instrucţiunilor de rotire şi deplasare este exemplificat prin următoarele instrucţiuni:

- Instrucţiunea cu simbolizarea RRD

a cărei mnemonică RRD (=Rotate to Right Digit ) semnifică rotirea la dreapta cu un digit, este descrisă sintetic prin

- Instrucţiunea cu simbolizarea RLC (IY+d)

a cărei mnemonică RLC (=Rotate to Left with Carry Flag) semnifică rotirea directă la stânga cu un bit a octetului din locaţia de memorie a cărei adresă, indicată în tehnica adresării indexate, e obţinută prin adunarea dintre deplasamentul d şi conţinutul registrului index IY, indicate in instrucţiune, operaţie în care bitul de pondere maximă este transferat pe poziţia de pondere minimă şi în bistabilul de transport CY, sarcină descrisă sintetic prin

- Instrucţiunea cu simbolizarea SRA r

a cărei mnemonică SRA (=Shift to Right Arithmetic ) semnifică deplasarea aritmetică la dreapta cu un bit a octetului din registrul r al microprocesorului, bitul de pondere minimă fiind deplasat în bistabilul de transport, iar bitul de pondere maximă, eliberat prin deplasare, fiind repus în poziţia dinaintea deplasării, sarcină descrisă sintetic prin

r 7 ... 0 CY

(IY+d) CY 7 ... 0

7.. 4 3.. 0 7.. 4 3 .. 0

A (HL)

Page 58: Curs Asm 2Curs-ASM014

5-13

- Instrucţiunea cu simbolizarea SRL r

a cărei mnemonică SRL (=Shift to Right Logic ) semnifică deplasarea logică la dreapta cu un bit a octetului din registrul r al microprocesorului, bitul de pondere minimă fiind deplasat în bistabilul de transpor CY, iar bitul de pondere maximă, eliberat prin rotire, fiind pus în starea logica „0”, sarcină descrisă sintetic prin

5.2.7. INSTRUCŢIUNI ARITMETICE GENERALE ŞI DE COMANDĂ Prin intermediul instrucţiunilor de comandă se poate interveni în funcţionarea

microprocesorului, astfel: - Prin instructiunea cu simbolizarea NOP

al cărei mnemonic NOP (=No Operation) semnifică neefectuarea niciunei operaţii, se realizează o pauză de un ciclu de maşină în funcţionarea microprocesorului.

- Prin instrucţiunea cu simbolizarea HALT pentru microprocesorul Zilog Z80 HLT pentru microprocesorul Intel 8080

se realizează oprirea funcţionarii microprocesorului ce poate ieşi din starea de blocare numai printr-o cerere de întrerupere: RESET, HOLD, INT pentru Intel 8080 şi RESET , BUSRQ , INT , NMI pentru Zilog Z80.

- Prin instrucţiunea cu simbolizarea DI

al cărei mnemonic DI (=Disable Interrupt) semnifică dezactivarea funcţionarii în întreruperi mascabile a microprocesorului, se realizează punerea în starea logică „0” a bistabilului de validare întreruperi, operaţie descrisă sintetic prin

IFF1 (=INTE) ← 0. - Prin instrucţiunea cu simbolizarea EI

al cărei mnemonic EI (=Enable Interrupt) semnifică validarea funcţionării în întreruperi mascabile a microprocesorului, se realizează punerea în starea logică „1” a bistabilului de validare întreruperi, operaţie descrisă sintetic prin

IFF1 (=INTE) ← 1. - Prin instrucţiunile cu simbolizarea IM i , unde i=0,1, 2

a căror mnemonică IM (=Interrupt Mode) semnifică programarea modului i (=0,1,2) de funcţionare în întreruperi mascabile a microprocesorului, realizează înscrierea bistabilelor modului de întrerupere IMFa şi IMFb ca în Tabelul 5.6.

Operaţiile aritmetice generale sunt efectuate prin următoarele instrucţiuni: - Instrucţiunea cu simbolizarea CCF pentru microprocesorul Zilog Z80 CMC pentru microprocesorul Intel 8080

a căror mnemonice CCF (=Complementer Carry Flag) şi CMC (=Complementer Carry)

r 7 ... 0 CY

0

Page 59: Curs Asm 2Curs-ASM014

5-14

semnifică complementarea bistabilului de transport, operaţie descrisă sintetic prin CY←CY .

Tabelul 5.6 Bistabilele modului de întrerupere

IMFa IMFb

Modul mascabil Instrucţiune

0 0 Mod 0 IM 0 1 0 Mod 1 IM 1 1 1 Mod 2 IM 2 0 1 combinaţie nefolosită

- Instrucţiunea cu simbolizarea SCF pentru microprocesorul Zilog Z80 STC pentru microprocesorul Intel 8080

a căror mnemonice SCF (=Set Carry Flag) şi STC (=Set Carry) semnifică punerea în starea logică „1” a bistabilului de întrerupere, operaţie descrisă sintetic prin

CY←1. - Instrucţiunea cu simbolizarea CPL pentru microprocesorul Zilog Z80 CMA pentru microprocesorul Intel 8080

a căror mnemonice CPL, CMA (=Complementer Accumulator) semnifică complementarea octetului din registrul acumulator A, operaţie descrisă sintetic prin

A←A . - Instrucţiunea cu simbolizarea DAA

al cărei mnemonic DAA (=Decimal Adjust Accumulator) semnifică corectarea rezultatului generat în registrul acumulator printr-o operaţie aritmetică efectuată în binar pentru a reprezenta cifre zecimale în cod BCD (=Binary Coded Decimal), prin adunarea cifrei 6 (=numărul de stări interzise în cod BCD) la cifra zecimală de pondere minimă din registrul acumulator, dacă această cifră este într-o stare interzisă, sau dacă bistabilul de transport auxiliar AC, H= „1”, urmată de adunarea cifrei 6 la cifra zecimală de pondere maximă din registrul acumulator, dacă aceasta se află într-o stare interzisă, sau dacă bistabilul de transport CY= „1”.

- Instrucţiunea cu simbolizarea NEG

prevăzută doar microprocesorului Zilog Z80, al cărei mnemonic NEG (=Negate Accumulator) semnifică schimbarea semnului octetului din registrul acumulator, în tehnica complementului faţă de 2, şi are următoarea descriere sintetică:

A←0-A (= A +1). 5.2.8. INSTRUCŢIUNILE ARITMETICE ŞI LOGICE PE OPT BIŢI O instrucţiune aritmetică sau logică impune ca primul operand să se afle în registrul

acumulator. La instrucţiunile aritmetice şi logice comune microprocesoarelor Intel 8080 şi Zilog

Z80, octetul instrucţiune va avea structura binară

Page 60: Curs Asm 2Curs-ASM014

5-15

10.xxx.rrr , pentru instrucţiunile în care al doilea operand se afla în registrul microprocesorului codificat prin biţii rrr, iar pentru instrucţiunile în care al doilea operand este indicat în instrucţiune prin tehnica adresării imediate, octetul instrucţiune are structura binară

11.xxx.110 , prin biţii xxx codificându-se operaţia din instrucţiune conform cu Tabelul 5.7

Tabel 5.7

Operaţia Cod binar (xxx)

Adunare (Add)

000

Adunare cu transport (Add with Carry)

001

Scădere (Subtract)

010

Scădere cu împrumut (Subtract with Borrow)

011

SI logic (And) 100

SAU logic (Or) 101

SAU EXCLUSIV logic (Eclusive Or) 110

Comparare (Compare) 111

Modul de operare la efectuarea instrucţiunilor aritmetice şi logice este exemplificat prin următoarele instrucţiuni:

- Instrucţiunea cu simbolizările ADC r pentru microprocesorul Intel 8080 ADC A,r pentru microprocesorul Zilog Z80

a căror mnemonice ADC (=Add with Carry) semnifică adunarea la primul operand din registrul acumulator a celui de al doilea operand din registrul r şi a bitului de transport din bistabilul de transport CY, cu formarea rezultatului în registrul acumulator, operaţie descrisă sintetic prin

A←A+r+CY. - Instrucţiunea cu simbolizările ANI n pentru microprocesorul Intel 8080 AND n pentru microprocesorul Zilog Z80

a căror mnemonice ANI, AND (= And in the Immediate Addressing Mode) semnifică efectuarea operaţiei logice AND între primul operand din registrul acumulator şi al doilea operand, indicat în instrucţiune prin tehnica adresării imediate, cu formarea rezultatului în registrul acumulator A, operaţie descrisă sintetic prin

A←A∩n. - Instrucţiunea cu simbolizarile INR r pentru microprocesorul Intel 8080 INC r pentru microprocesorul Zilog Z80

a căror mnemonice INR, INC (=Incrementer) semnifică incrementarea cu 1 a octetului din

Page 61: Curs Asm 2Curs-ASM014

5-16

registrul r al microprocesorului, este descrisă sintetic prin r←r+1. Observaţie O instrucţiune logică negenerând transport, va determina CY= „0”. Mnemonicele instrucţiunilor aritmetice şi logice pe 8 biţi au următoarele semnificaţii: - ADD = Add - ADI = Add in the Immediate Addressing Mode - ADC = Add with Carry - ACI = Add with Carry in the Immediate Addressing Mode - SUB = Substract - SBB = Subtract with Borrow - SUI = Subtract in the Immediate Addressing Mode - SBI = Subtract with Borrow in Immediate Addressing Mode - SBC = Subtract with Carry - AND = And - ANA = And with Accumulator - ANI = And in the Immediate Addressing Mode - OR = Or - ORA = Or with Accumulator - ORI = Or in the Immediate Addressing Mode - XOR = Exclusive Or - XRA = Exclusive Or with Accumulator - XRI = Exclusive Or in the Immediate Addressing Mode - CMP, CP = Compare - CPI = Compare in the Immediate Addressing Mode - INR, INC = Incrementer - DCR, DEC = Decrementer 5.2.9. INSTRUCŢIUNI ARITMETICE PE 16 BIŢI Într-o instrucţiune aritmetică de adunare ori scădere a doi operanzi pe 16 biţi, primul

operand se află într-unul din registrele HL, IX sau IY în care se generează şi rezultatul operaţiei. Mnemonicele instrucţiunilor aritmetice pe 16 biţi ale microprocesorului Intel 8080 au următoarele semnificaţii:

DAD = Double Add INX = Incrementer 16 bit Register DCX = Decrementer 16 bit Register Dintre instrucţiunile aritmetice pe 16 biţi, instrucţiunea cu simbolizarea DAD rp pentru microprocesorul Intel 8080 ADD HL,rp pentru microprocesorul Zilog Z80

semnifică adunarea la primul operand din registrul HL a celui de al doilea operand din registrul rp, cu formarea rezultatului în registrul HL, operaţie descrisă sintetic prin

HL←HL+rp. Observaţie Într-o operaţie aritmetică pe 16 biţi ambii operanzi trebuie să fie din cîte 16 biţi şi de

aceea un operand pe opt biţi, pentru a putea fi folosit într-o instrucţiune pe 16 biţi, trebuie exprimat pe 16 biţi prin adăugarea octetului nul ca octet de pondere maximă.

Page 62: Curs Asm 2Curs-ASM014

5-17

5.3. TABELE INSTRUCŢIUNI: Intel 8080, Zilog Z80

Instrucţiuni de transfer pe 8 biţi

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

LD r,r’ MOV r,r’ r←r’ 01 rrr r’r’r’ LD r,n MOV r,n r←n 00 rrr 110

← n →

nn

LD r,(HL) MOV r,M r←(HL) 01 rrr 110 LD r,(IX+d) r←(IX+d) 11011101

01 rrr 101 ← d →

DD d

LD r,(IY+ d) r←(IY+d) 11111101 01 rrr 101 ← d →

FD d

LD (HL),r MOV M,r (HL)←r 01110 rrr LD (IX+ d),r (IX+ d)←r 11011101

01110 rrr ← d →

DD

LD (IY+ d),r (IY+ d)←r 11111101 01110 rrr ← d →

FD d

LD (HL),n MVI M,n (HL)←n 00110110 ← n →

36 n

LD (IX+ d),n (IX+ d)←n 11011101 00110110 ← d → ← n →

DD 36 d n

LD (IY+ d),n (IY+ d)←n 11111101 00110110 ← d → ← n →

FD 36 d n

LD A,(BC) LDAX B A←(BC) 00001010 0A LD A,(DE) LDAX D A←(DE) 00011010 1A LD A,( HLnn ) LDA L Hn n A←( LHnn ) 00111010

← Ln →

← Hn →

3A

Ln

Hn

LD (BC),A STAX B (BC)←A 00000010 02 LD (DE),A STAX D (DE)←A 00010010 12 LD ( HLnn ),A STA L Hn n ( LHnn )←A 00110010

← Ln →

← Hn →

32

Ln

Hn

LD A,I A←I ED 57

0 0

LD A,R A←R ED 5F

0 0

LD I,A I←A ED 47

LD R,A R←A ED 4F

Instrucţiuni de transfer pe 16 biţi

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

LD rp, HLnn LXI rp, L Hn n Lrp ← Ln

Hrp ← Hn

00rp0001 ← Ln →

← Hn →

Ln

Hn

Page 63: Curs Asm 2Curs-ASM014

5-18

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

LD IX, HLnn LIX ← Ln

HIX ← Hn

11011101 00100001 ← Ln →

← Hn →

DD 21

Ln

Hn

LD IY, HLnn LIY ← Ln

HIY ← Hn

11111101 00100001 ← Ln →

← Hn →

FD 21

Ln

Hn

LD HL, ( HLnn ) LHLD L Hn n L←( LHnn )

H←( LHnn +1)

00101010 ← Ln →

← Hn →

2A

Ln

Hn

LD rp, ( HLnn ) Lrp ←( LHnn )

Hrp ←( LHnn +1)

11101101 01rp1011 ← Ln →

← Hn →

ED

Ln

Hn

LD IX, ( HLnn ) LIX ←( LHnn )

HIX ←( LHnn +1)

11011101 00101010 ← Ln →

← Hn →

DD 2A

Ln

Hn

LD IY, ( HLnn ) LIY ←( LHnn )

HIY ←( LHnn +1)

11111101 00101010 ← Ln →

← Hn →

FD 2A

Ln

Hn

LD ( HLnn ),HL SHLD L Hn n ( LHnn )←L

( LHnn +1)←H

00100010 ← Ln →

← Hn →

22

Ln

Hn

LD ( HLnn ),rp ( LHnn )← Lrp

( LHnn +1) ← Hrp

11101101 00100010 ← Ln →

← Hn →

ED 22

Ln

Hn

LD ( HLnn ),IX ( LHnn )← LIX

( LHnn +1)← HIX

11011101 00100010 ← Ln →

← Hn →

DD 22

Ln

Hn

LD ( HLnn ),IY ( LHnn )← LIY

( LHnn +1)← HIY

11111101 00100010 ← Ln →

← Hn →

FD 22

Ln

Hn

LD SP,HL SPHL SP←HL 11111001 F9 LD SP,IX SP←IX 11011101

11111001 DD F9

LD SP,IY SP←IY 11111101 11111001

FD F9

PUSH rp PUSH rp (SP-1)← Hrp

(SP-2)← Lrp SP←SP-2

11rp0101

PUSH AF PUSH PSW (SP-1)← A (SP-2)← F SP←SP-2

11110101 F5

PUSH IX (SP-1)← HIX

(SP-2)← LIX SP←SP-2

11011101 11100101

DD E5

Page 64: Curs Asm 2Curs-ASM014

5-19

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

PUSH IY (SP-1)← HIY

(SP-2)← LIY SP←SP-2

11111101 11100101

FD E5

POP rp POP rp Lrp ← (SP)

Hrp ← (SP+1) SP←SP+2

11rp0001

POP AF POP PSW F← (SP) A← (SP+1) SP←SP+2

11110001 F1

POP IX LIX ← (SP)

HIX ← (SP+1) SP←SP+2

11011101 11100001

DD E1

POP IY LIY ← (SP)

HIY ← (SP+1) SP←SP+2

11111101 11100001

FD E1

Instrucţiuni de schimb între registre, transfer de blocuri, căutări

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

EX DE,HL XCHG DE↔HL 11101011 EB EX AF,AF’ AF↔AF’ 00001000 08 EXX BC↔BC’

DE↔DE’ HL↔HL’

11011001 D9

EX (SP),HL XTHL L↔(SP) H↔(SP+1)

11100011 E3

EX (SP),IX LIX ↔(SP)

HIX ↔(SP+1)

11011101 11100011

DD E3

EX (SP),IY LIY ↔(SP)

HIY ↔(SP+1)

11111101 11100011

FD E3

LDI Observaţie: BC=0 ⇒ P/V=0

(DE)←(HL) DE←DE+1 HL←HL+1 BC←BC-1=0 ⇒P=0

11101101 10100000

ED A0

0 0

LDIR Observaţie: BC=0 ⇒ P/V=0

(DE)←(HL) DE←DE+1 HL←HL+1 BC←BC-1 şi repetă până ce BC=0

11101101 10110000

ED B0

0 0 0

LDD Observaţie: BC=0 ⇒ P/V=0

(DE)←(HL) DE←DE-1 HL←HL-1 BC←BC-1

11101101 10101000

ED A8

0 0

LDDR Observaţie: BC=0 ⇒ P/V=0

(DE)←(HL) DE←DE-1 HL←HL-1 BC←BC-1 şi repetă până ce BC=0

11101101 10111000

ED B8

0 0 0

CPI Observaţie: BC=0 ⇒ P/V=0; A=(HL) ⇒ Z=1

A-(HL) HL←HL+1 BC←BC-1

11101101 10100001

ED A1

1

Page 65: Curs Asm 2Curs-ASM014

5-20

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

CPIR Observaţie: BC=0 ⇒ P/V=0; A=(HL) ⇒ Z=1

A-(HL) HL←HL+1 BC←BC-1 şi repetă până BC=0 ori (HL)=0

11101101 10110001

ED B1

1

CPD Observaţie: BC=0 ⇒ P/V=0; A=(HL) ⇒ Z=1

A-(HL) HL←HL-1 BC←BC-1

11101101 10101001

ED A9

1

CPDR Observaţie: BC=0 ⇒ P/V=0; A=(HL) ⇒ Z=1

A-(HL) HL←HL-1 BC←BC-1 şi repetă până BC=0 ori (HL)=0

11101101 10111001

ED B9

1

Instrucţiuni de ramificare necondiţionată

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

JP HLnn JMP L Hn n LPC ← Ln

HPC ← Hn

11000011 ← Ln →

← Hn →

C3

Ln

Hn

JP (HL) PCHL LPC ← L

HPC ← H

11101001 E9

JP (IX) LPC ← LIX

HPC ← HIX

11011101 11101001

DD E9

JP (IY) LPC ← LIY

HPC ← HIY

11111101 11101001

FD E9

CALL HLnn CALL L Hn n (SP-1)← HPC

(SP-2)← LPC SP←SP-2

LPC ← Ln

HPC ← Hn

11001101 ← Ln →

← Hn →

CD

Ln

Hn

RST p RST p (SP-1)← HPC

(SP-2)← LPC SP←SP-2

LPC ←px8

HPC ←00

11ppp111

RET RET LPC ←(SP)

HPC ←(SP+1) SP←SP+2

11101001 E9

RETI LPC ←(SP)

HPC ←(SP+1) SP←SP+2

11011101 01001101

ED 4D

RETN LPC ←(SP)

HPC ←(SP+1) SP←SP+2 IFF1←IFF2

11101101 01000101

ED 45

JR e PC←PC+e 00011000 ← e →

18 e

Page 66: Curs Asm 2Curs-ASM014

5-21

Instrucţiuni de ramificare condiţionată

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

JP cc, HLnn Jcc L Hn n Dacă cc :

LPC ← Ln

HPC ← Hn , iar dacă nu, se continuă programul

11ccc010 ← Ln →

← Hn →

Ln

Hn

CALL cc, HLnn Ccc L Hn n Dacă cc : (SP-1)← HPC

(SP-2)← LPC SP←SP-2

LPC ← Ln

HPC ← Hn , iar dacă nu, se continuă programul

11001101 ← Ln →

← Hn →

CD

Ln

Hn

RET cc Rcc Dacă cc :

LPC ←(SP)

HPC ←(SP+1) SP←SP+2, iar dacă nu, se continuă programul

11ccc000

JR C,e Dacă CY=1 : PC←PC+e, iar dacă CY=0 se continuă programul

00111000 ← e →

38 e

JR NC,e Dacă CY=0 : PC←PC+e, iar dacă CY=1 se continuă programul

00110000 ← e →

30 e

JR Z,e Dacă Z=1 : PC←PC+e, iar dacă Z=0 se continuă programul

00101000 ← e →

28 e

JR NZ,e Dacă Z=0 : PC←PC+e, iar dacă Z=1 se continuă programul

00100000 ← e →

20 e

DJNZ e B←B-1 Dacă B≠0 : PC←PC+e, iar dacă B=0 se continuă programul

00010000 ← e →

10 e

Instrucţiuni de prelucrare pe bit

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

BIT b,r Z← br 11001011 01 bbb rrr

CB 1 0

Page 67: Curs Asm 2Curs-ASM014

5-22

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

BIT b,(IX+d) Z← b)d+IX( 11011101 11001011 ← d → 01bbb110

DD CB d

1 0

BIT b,(IY+d) Z← b)d+IY( 11111101 11001011 ← d → 01bbb110

FD CB d

1 0

SET b,r br ←1 11001101 11bbb rrr

CD

SET b,(IX+d) b)d+IX( ←1 11001011 11011101 ← d → 01bbb110

DD CB d

SET b,(IY+d) b)d+IY( ←1 11111101 11001011 ← d → 01bbb110

FD CB d

RES b,r br ←0 11001101 11bbb rrr

CD

RES b,(IX+d) b)d+IX( ←0 11011101 11011101 ← d → 01bbb110

DD CB d

RES b,(IY+d) b)d+IY( ←0 11111101 11001011 ← d → 01bbb110

FD CB d

Instrucţiuni de intrare-ieşire

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

IN A,(n) IN n A7..A0←n A15..A8←A A←(n)

11011011 ← n →

DB n

IN r,(C) A7..A0←C A15..A8←B r←(C)

11101101 ED P 0

INI Observaţie: B=0 ⇒ Z=1

A7..A0←C A15..A8←B (HL)←(C) B←B-1 HL←HL+1

11101101 10100010

ED A2

INIR Observaţie: B=0 ⇒ Z=1

A7..A0←C A15..A8←B (HL)←(C) B←B-1 HL←HL+1 si repeta pana B=0

11101101 10110010

ED B2

1

IND Observaţie: B=0 ⇒ Z=1

A7..A0←C A15..A8←B (HL)←(C) B←B-1 HL←HL-1

11101101 10101010

ED AA

INDR Observaţie: B=0 ⇒ Z=1

A7..A0←C A15..A8←B

11101101 10111010

ED BA

1

Page 68: Curs Asm 2Curs-ASM014

5-23

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

(HL)←(C) B←B-1 HL←HL-1 si repeta pana B=0

OUT (n),A OUT n A7..A0←n A15..A8←A (n) ←A

11010011 ← n →

D3 n

OUT (C),r A7..A0←n A15..A8←A (C) ←r

11101101 ED

OUTI Observaţie: B=0 ⇒ Z=1

A7..A0←C A15..A8←B (C)←(HL) B←B-1 HL←HL+1

11101101 10100011

ED A3

OTIR Observaţie: B=0 ⇒ Z=1

A7..A0←C A15..A8←B (C)←(HL) B←B-1 HL←HL+1 si repeta pana B=0

11101101 10110011

ED B3

1

OUTD

Observaţie: B=0 ⇒ Z=1

A7..A0←C A15..A8←B (C)←(HL) B←B-1 HL←HL-1

11101101 10101011

ED AB

OTDR

Observaţie: B=0 ⇒ Z=1

A7..A0←C A15..A8←B (C)←(HL) B←B-1 HL←HL-1 si repeta pana B=0

11101101 10111011

ED BB

1

Instrucţuni de rotire şi deplasare

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

RLCA RRC

00000111 07 0 0

RLA RAL

00010111 17 0 0

RRCA RRC

00001111 0F 0 0 CY A7 ... A0

CY A7 ... A0

CY A7 ... A0

Page 69: Curs Asm 2Curs-ASM014

5-24

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

RRA RAR

00011111 1F 0 0

RLD

11101101 01101111

ED 6F

0 P 0

RRD

11101101 01100111

ED 67

0 P 0

RLC r 11001011 00000 rrr

CB

RLC (IX+d) 11011101 11001011 ← d → 00000110

DD CD d 06

RLC (IY+d) 11111101 11001011 ← d → 00000110

FD CD d 06

0 P 0

RL r 11001011 00000 rrr

CB

RL (IX+d) 11011101 11001011 ← d → 00000110

DD CB d 06

RL (IY+d)

11111101 11001011 ← d → 00010110

FD CB d 16

0 P 0

RRC r 11001011 00001 rrr

CB

RRC (IX+d) 11011101 11001011 ← d → 00001110

DD CB d

0E RRC (IY+d) 11111101

11001011 ← d → 00001110

FD CB d

0E

0 P 0

RR r 11001011 00011 rrr

CB

RR (IX+d) 11011101 11001011 ← d → 00011110

DD CB d

1E RR (IY+d)

11111110 11001011 ← d → 00011110

FD CB d

1E

0 P 0 CY 7 ... 0

r (IX+d) (IY+d)

7 .. 4 3 .. 0 7 .. 4 3 .. 0

A (HL)

CY 7 ... 0

r (IX+d) (IY+d)

CY 7 ... 0

r (IX+d) (IY+d)

CY 7 ... 0

r (IX+d) (IY+d)

CY A7 ... A0

7 .. 4 3 .. 0 7 .. 4 3 .. 0

A (HL)

Page 70: Curs Asm 2Curs-ASM014

5-25

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

SLA r 11001011 00100 rrr

CB

SLA (IX+d) 11011101 11001011 ← d → 00100110

DD CB d 26

SLA (IY+d)

11111101 11001011 ← d → 00100110

FD CB d 26

0 P 0

SRA r 11001011 00100 rrr

CB

SRA (IX+d) 11011101 11001011 ← d → 00101110

DD CB d

2E SRA (IY+d)

11111101 11001011 ← d → 00101110

FD CB d

2E

0 P 0

SRL r 11001011 00100 rrr

CB

SRL (IX+d) 11011101 11001011 ← d → 00111110

DD CB d

3E SRL (IY+d)

11111101 11001011 ← d → 00111110

FD CB d

3E

0 P 0

Instrucţiuni aritmetice generale şi de comandă

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

DAA DAA Converteşte octetul din acumulator în format BCD

00100111 27 P

CPL CMA A← A 00101111 2F 1 1

NEG A←0-A = -A în com- plement faţă de 2

11101101 01000100

ED 44

V 1

CCF CMC CY←CY 00111111 3F 0

SCF STC CY←1 00110111 37 0 0 1 NOP NOP O pauză de un ciclu

de maşină 00000000 00

HALT HLT Oprirea funcţionării microprocesorului

01110110 76

DI DI IFF1=INTE←0 IFF2←0

11110011 F3

EI EI IFF1=INTE←1 IFF2←1

11111011 FB

IM0 Mod 0 mascabil: IMFa←0, IMFb←0

11101101 01000110

ED 46

IM1 Mod 1 mascabil: IMFa←0, IMFb←1

11101101 01010110

ED 56

IM2 Mod 2 mascabil: IMFb←1, IMFb←1

11101101 01011110

ED 5E

7 ... 0 CY

r, (IX+d), (IY+d)

7 ... 0 CY

0

r, (IX+d), (IY+d)

CY 7 ... 0

0

r (IX+d) (IY+d)

Page 71: Curs Asm 2Curs-ASM014

5-26

Instrucţiuni aritmetice şi logice pe 8 biţi

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

ADD A,r ADD r A←A+r 10000 rrr V 0 ADD A,n ADI n A←A+n 10000110

← n → 86 n

V 0

ADD A,(IX+d) A←A+(IX+d) 11011101 10000110 ← d →

DD 86 d

V 0

ADD A,(IY+d) A←A+(IY+d) 11111101 10000110 ← d →

FD 86 d

V 0

ADC A,r ADC r A←A+r+CY 10001 rrr V 0 ADC A,n ACI n A←A+n+CY 11001110

← n → CE n

V 0

ADC A,(IX+d) A←A+(IX+d)+CY 11011101 10001110 ← d →

DD 8E d

V 0

ADC A,(IY+d) A←A+(IY+d)+CY 11111101 10001110 ← d →

FD 8E d

V 0

SUB r SUB r A←A-r 10010 rrr V 0 SUB n SUI n A←A-n 11010110

← n → D6 n

V 0

SUB (IX+d) A←A-(IX+d) 11011101 10010110 ← d →

DD 96 d

V 0

SUB (IY+d) A←A-(IY+d) 11111101 10010110 ← d →

FD 96 d

V 0

SBC r SBB r A←A-r-CY 10011 rrr V 0 SBC n SBI n A←A-n-CY 11011110

← n → DD n

V 0

SBC (IX+d) A←A-(IX+d)-CY 11011101 10011110 ← d →

DD 9E d

V 0

SBC (IY+d) A←A-(IY+d)-CY 11111101 10011110 ← d →

FD 9E d

V 0

AND r ANA r A←A∩r 10100 rrr 1 P 0 0 AND n ANI n A←A∩n 11100110

← n → E6 n

1 P 0 0

AND (IX+d) A←A∩(IX+d) 11011101 10100110 ← d →

DD A6 d

1 P 0 0

AND (IY+d) A←A∩(IY+d) 11111101 10100110 ← d →

FD A6 d

1 P 0 0

OR r ORA r A←AUr 10110 rrr 0 P 0 1 OR n ORI n A←AUn 11110110

← n → F6 n

0 P 0 1

OR (IX+d) A←AU(IX+d) 11011101 10110110 ← d →

DD B6 d

0 P 0 1

OR (IY+d) A←AU(IY+d) 11111101 10110110 ← d →

FD B6 d

0 P 0 1

XOR r XRA r A←A⊕r 10101 rrr 0 P 0 1 XOR n XRI n A←A⊕n 11101110

← n → DD n

0 P 0 1

Page 72: Curs Asm 2Curs-ASM014

5-27

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

XOR (IX+d) A←A⊕(IX+d) 11011101 10101110 ← d →

DD AE d

0 P 0 1

XOR (IY+d) A←A⊕(IY+d) 11111101 10101110 ← d →

FD AE d

0 P 0 1

CP r CMP r A-r 10111 rrr V 1 CP n CPI n A-n 11111110

← n → FE n

V 1

CP (IX+d) A-(IX+d) 11011101 10111110 ← d →

DD BE d

V 1

CP (IY+d) A-(IY+d) 11111101 10111110 ← d →

FD BE d

V 1

INC r INR r r←r+1 00 rrr 100 V 0 INC (IX+d) (IX+d)←(IX+d)+1 11011101

00110100 ← d →

DD 34 d

V 0

INC (IY+d) (IY+d)←(IY+d)+1 11111101 00110100 ← d →

FD 34 d

V 0

DEC r DCR r r←r-1 00 rrr 101 V 1 DEC (IX+d) (IX+d)←(IX+d)-1 11011101

00110101 ← d →

DD 35 d

V 1

DEC (IY+d) (IY+d)←(IY+d)-1 11111101 00110101 ← d →

FD 35 d

V 1

Instrucţiuni aritmetice pe 16 biţi

Codificare Bistabile de condiţie Zilog Z80 Intel 8080 Descriere Binar H S Z H P/V N C

ADD HL,rp DAD rp HL←HL+rp 00rp1001 0 ADC HL,rp HL←HL+rp+CY 11101101 ED V 0 SBC HL,rp HL←HL-rp-CY 11101101 ED V 1

ADD IX,rp’ IX←IX+rp’ rp’=BC,DE,IX,SP

11011101 DD 0

ADD IY,rp” IY←IY+rp” rp”=BC,DE,IY,SP

11111101 FD 0

INC rp INX rp rp←rp+1 00rp0011

INC IX IX←IX+1 11011101 00100011

DD 23

INC IY IY←IY+1 11111101 00100011

FD 23

DEC rp DCX rp rp←rp-1 00rp1011

DEC IX IX←IX-1 11011101 00101011

DD 2B

DEC IY IY←IY-1 11111101 00101011

FD 2B

Page 73: Curs Asm 2Curs-ASM014

5-28

5.4. SET INSTRUCŢIUNI: Intel 8080, Zilog Z80

Intel 8080/Zilog Z80 - Instruction Set

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

8 Bit Transfer Instructions MOV A,A LD A,A 7F A ← A MOV A,B LD A,B 78 A ← B MOV A,C LD A,C 79 A ← C MOV A,D LD A,D 7A A ← D MOV A,E LD A,E 7B A ← E MOV A,H LD A,H 7C A ← H MOV A,L LD A,L 7D A ← L MOV A,M LD A,(HL) 7E A ← (HL) LDAX B LD A,(BC) 0A A ← (BC) LDAX D LD A,(DE) 1A A ← (DE) LDA word LD A,(word) 3Aword A ← (word) --- LD A,(IX+index) DD7Eindex A ← (IX+index) --- LD A,(IY+index) FD7Eindex A ← (IY+index) --- LD A,I ED57 A ← Interrupt Page MOV B,A LD B,A 47 B ← A MOV B,B LD B,B 40 B ← B MOV B,C LD B,C 41 B ← C MOV B,D LD B,D 42 B ← D MOV B,E LD B,E 43 B ← E MOV B,H LD B,H 44 B ← H MOV B,L LD B,L 45 B ← L MOV B,M LD B,(HL) 46 B ← (HL) --- LD B,(IX+index) DD46index B ← (IX+index) --- LD B,(IY+index) FD46index B ← (IY+index) MOV C,A LD C,A 4F C ← A MOV C,B LD C,B 48 C ← B MOV C,C LD C,C 49 C ← C MOV C,D LD C,D 4A C ← D MOV C,E LD C,E 4B C ← E MOV C,H LD C,H 4C C ← H MOV C,L LD C,L 4D C ← L MOV C,M LD C,(HL) 4E C ← (HL) --- LD C,(IX+index) DD4Eindex C ← (IX+index) --- LD C,(IY+index) FD4Eindex C ← (IY+index) MOV D,A LD D,A 57 D ← A

Page 74: Curs Asm 2Curs-ASM014

5-29

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

MOV D,B LD D,B 50 D ← B MOV D,C LD D,C 51 D ← C MOV D,D LD D,D 52 D ← D MOV D,E LD D,E 53 D ← E MOV D,H LD D,H 54 D ← H MOV D,L LD D,L 55 D ← L MOV D,M LD D,(HL) 56 D ← (HL) --- LD D,(IX+index) DD56index D ← (IX+index) --- LD D,(IY+index) FD56index D ← (IY+index) MOV E,A LD E,A 5F E ← A MOV E,B LD E,B 58 E ← B MOV E,C LD E,C 59 E ← C MOV E,D LD E,D 5A E ← D MOV E,E LD E,E 5B E ← E MOV E,H LD E,H 5C E ← H MOV E,L LD E,L 5D E ← L MOV E,M LD E,(HL) 5E E ← (HL) --- LD E,(IX+index) DD5Eindex E ← (IX+index) --- LD E,(IY+index) FD5Eindex E ← (IY+index) MOV H,A LD H,A 67 H ← A MOV H,B LD H,B 60 H ← B MOV H,C LD H,C 61 H ← C MOV H,D LD H,D 62 H ← D MOV H,E LD H,E 63 H ← E MOV H,H LD H,H 64 H ← H MOV H,L LD H,L 65 H ← L MOV H,M LD H,(HL) 66 H ← (HL) --- LD H,(IX+index) DD66index H ← (IX+index) --- LD H,(IY+index) FD66index H ← (IY+index) MOV L,A LD L,A 6F L ← A MOV L,B LD L,B 68 L ← B MOV L,C LD L,C 69 L ← C MOV L,D LD L,D 6A L ← D MOV L,E LD L,E 6B L ← E MOV L,H LD L,H 6C L ← H MOV L,L LD L,L 6D L ← L MOV L,M LD L,(HL) 6E L ← (HL) --- LD L,(IX+index) DD6Eindex L ← (IX+index) --- LD L,(IY+index) FD6Eindex L ← (IY+index) MOV M,A LD (HL),A 77 (HL) ← A MOV M,B LD (HL),B 70 (HL) ← B MOV M,C LD (HL),C 71 (HL) ← C MOV M,D LD (HL),D 72 (HL) ← D

Page 75: Curs Asm 2Curs-ASM014

5-30

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

MOV M,E LD (HL),E 73 (HL) ← E MOV M,H LD (HL),H 74 (HL) ← H MOV M,L LD (HL),L 75 (HL) ← L --- LD (IX+index),A DD77index (IX+index) ← A --- LD (IX+index),B DD70index (IX+index) ← B --- LD (IX+index),C DD71index (IX+index) ← C --- LD (IX+index),D DD72index (IX+index) ← D --- LD (IX+index),E DD73index (IX+index) ← E --- LD (IX+index),H DD74index (IX+index) ← H --- LD (IX+index),L DD75index (IX+index) ← L --- LD (IX+index),byte DD76index byte (IX+index) ← byte --- LD (IY+index),A FD77index (IY+index) ← A --- LD (IY+index),B FD70index (IY+index) ← B --- LD (IY+index),C FD71index (IY+index) ← C --- LD (IY+index),D FD72index (IY+index) ← D --- LD (IY+index),E FD73index (IY+index) ← E --- LD (IY+index),H FD74index (IY+index) ← H --- LD (IY+index),L FD75index (IY+index) ← L --- LD (IY+index),byte FD76index byte (IY+index) ← byte MVI A,byte LD A,byte 3Ebyte A ← byte MVI B,byte LD B,byte 06byte B ← byte MVI C,byte LD C,byte 0Ebyte C ← byte MVI D,byte LD D,byte 16byte D ← byte MVI E,byte LD E,byte 1Ebyte E ← byte MVI H,byte LD H,byte 26byte H ← byte MVI L,byte LD L,byte 2Ebyte L ← byte MVI M,byte LD (HL),byte 36byte (HL) ← byte --- LD (IX+index),byte DD36index byte (IX+index) ← byte --- LD (IY+index),byte FD36index byte (IY+index) ← byte STAX B LD (BC),A 02 (BC) ← A STAX D LD (DE),A 12 (DE) ← A STA word LD (word),A 32word (word) ← A 16 Bit Transfer Instructions LXI B,word LD BC,word 01word BC ← word LXI D,word LD DE,word 11word DE ← word LXI H,word LD HL,word 21word HL ← word LXI SP,word LD SP,word 31word SP ← word --- LD IX,word DD21word IX ← word --- LD IY,word FD21word IY ← word LHLD word LD HL,(word) 2Aword HL ← (word) --- LD BC,(word) ED4Bword BC ← (word) --- LD DE,(word) ED5Bword DE ← (word)

Page 76: Curs Asm 2Curs-ASM014

5-31

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- LD HL,(word) ED6Bword HL ← (word) --- LD SP,(word) ED7Bword SP ← (word) --- LD IX,(word) DD2Aword IX ← (word) --- LD IY,(word) FD2Aword IY ← (word) SHLD word LD (word),HL 22word (word) ← HL --- LD (word),BC ED43word (word) ← BC --- LD (word),DE ED53word (word) ← DE --- LD (word),HL ED6Bword (word) ← HL --- LD (word),IX DD22word (word) ← IX --- LD (word),IY DD22word (word) ← IY --- LD (word),SP ED73word (word) ← SP SPHL LD SP,HL F9 SP ← HL --- LD SP,IX DDF9 SP ← IX --- LD SP,IY FDF9 SP ← IY Register Exchange Instructions XCHG EX DE,HL EB HL ↔ DE XTHL EX (SP),HL E3 H ↔ (SP+1); L ↔ (SP) --- EX (SP),IX DDE3 IXhigh ↔ (SP+1); IXlow ↔ (SP) --- EX (SP),IY FDE3 IYhigh ↔ (SP+1); IYlow ↔ (SP) --- EX AF,AF' 08 AF ↔ AF' --- EXX D9 BC/DE/HL ↔ BC'/DE'/HL' Add Byte Instructions ADD A ADD A,A 87 A ← A + A ADD B ADD A,B 80 A ← A + B ADD C ADD A,C 81 A ← A + C ADD D ADD A,D 82 A ← A + D ADD E ADD A,E 83 A ← A + E ADD H ADD A,H 84 A ← A + H ADD L ADD A,L 85 A ← A + L ADD M ADD A,(HL) 86 A ← A + (HL) --- ADD A,(IX+index) DD86index A ← A + (IX+index) --- ADD A,(IY+index) FD86index A ← A + (IY+index) ADI byte ADD A,byte C6byte A ← A + byte Add Byte with Carry-In Instructions ADC A ADC A,A 8F A ← A + A + Carry ADC B ADC A,B 88 A ← A + B + Carry ADC C ADC A,C 89 A ← A + C + Carry ADC D ADC A,D 8A A ← A + D + Carry ADC E ADC A,E 8B A ← A + E + Carry

Page 77: Curs Asm 2Curs-ASM014

5-32

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

ADC H ADC A,H 8C A ← A + H + Carry ADC L ADC A,L 8D A ← A + L + Carry ADC M ADC A,(HL) 8E A ← A + (HL) + Carry --- ADC A,(IX+index) DD8Eindex A ← A + (IX+index) + Carry --- ADC A,(IY+index) FD8Eindex A ← A + (IY+index) + Carry ACI byte ADC A,byte CEbyte A ← A + byte + Carry Subtract Byte Instructions SUB A SUB A 97 A ← A - A SUB B SUB B 90 A ← A - B SUB C SUB C 91 A ← A - C SUB D SUB D 92 A ← A - D SUB E SUB E 93 A ← A - E SUB H SUB H 94 A ← A - H SUB L SUB L 95 A ← A - L SUB M SUB (HL) 96 A ← A - (HL) --- SUB (IX+index) DD96index A ← A - (IX+index) --- SUB (IY+index) FD96index A ← A - (IY+index) SUI byte SUB byte D6byte A ← A - byte Subtract Byte With Borrow-In Instructions SBB A SBC A 9F A ← A - A - Carry SBB B SBC B 98 A ← A - B - Carry SBB C SBC C 99 A ← A - C - Carry SBB D SBC D 9A A ← A - D - Carry SBB E SBC E 9B A ← A - E - Carry SBB H SBC H 9C A ← A - H - Carry SBB L SBC L 9D A ← A - L - Carry SBB M SBC (HL) 9E A ← A - (HL) - Carry --- SBC (IX+index) DD9Eindex A ← A - (IX+index) - Carry --- SBC (IY+index) FD9Eindex A ← A - (IY+index) - Carry SBI byte SBC byte DEbyte A ← A - byte - Carry Double Byte Add Instructions DAD B ADD HL,BC 09 HL ← HL + BC DAD D ADD HL,DE 19 HL ← HL + DE DAD H ADD HL,HL 29 HL ← HL + HL DAD SP ADD HL,SP 39 HL ← HL + SP --- ADD IX,BC DD09 IX ← X + BC --- ADD IX,DE DD19 IX ← IX + DE --- ADD IX,IX DD29 IX ← IX + IX --- ADD IX,SP DD39 IX ← IX + SP

Page 78: Curs Asm 2Curs-ASM014

5-33

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- ADD IY,BC FD09 IY ← IY + BC --- ADD IY,DE FD19 IY ← IY + DE --- ADD IY,IY FD29 IY ← IY + IY --- ADD IY,SP FD39 IY ← IY + SP Double Byte Add With Carry-In Instructions --- ADC HL,BC ED4A HL ← HL + BC + Carry --- ADC HL,DE ED5A HL ← HL + DE + Carry --- ADC HL,HL ED6A HL ← HL + HL + Carry --- ADC HL,SP ED7A HL ← HL + SP + Carry Double Byte Subtract With Borrow-In Instructions --- SBC HL,BC ED42 HL ← HL - BC - Carry --- SBC HL,DE ED52 HL ← HL - DE - Carry --- SBC HL,HL ED62 HL ← HL - HL - Carry --- SBC HL,SP ED72 HL ← HL - SP - Carry Control Instructions DI DI F3 IFF ← 0 EI EI FB IFF ← 1 --- IM 0 ED46 --- --- IM 1 ED56 --- --- IM 2 ED5E --- --- LD I,A ED47 Interrupt Page ← A NOP NOP 00 No Operation HLT HLT 76 NOP;PC ← PC-1 Increment Byte Instructions INR A INC A 3C A ← A + 1 INR B INC B 04 B ← B + 1 INR C INC C 0C C ← C + 1 INR D INC D 14 D ← D + 1 INR E INC E 1C E ← E + 1 INR H INC H 24 H ← H + 1 INR L INC L 2C L ← L + 1 INR M INC (HL) 34 (HL) ← (HL) + 1 --- INC (IX+index) DD34index (IX+index) ← (IX+index) + 1 --- INC (IY+index) FD34index (IY+index) ← (IY+index) + 1 Decrement Byte Instructions DCR A DEC A 3D A ← A - 1 DCR B DEC B 05 B ← B - 1

Page 79: Curs Asm 2Curs-ASM014

5-34

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

DCR C DEC C 0D C ← C - 1 DCR D DEC D 15 D ← D - 1 DCR E DEC E 1D E ← E - 1 DCR H DEC H 25 H ← H - 1 DCR L DEC L 2D L ← L - 1 DCR M DEC (HL) 35 (HL) ← (HL) - 1 --- DEC (IX+index) DD35index (IX+index) ← (IX+index) - 1 --- DEC (IY+index) FD35index (IY+index) ← (IY+index) - 1 Increment Register Pair Instructions INX B INC BC 03 BC ← BC + 1 INX D INC DE 13 DE ← DE + 1 INX H INC HL 23 HL ← HL + 1 INX SP INC SP 33 SP ← SP + 1 --- INC IX DD23 IX ← IX + 1 --- INC IY FD23 IY ← IY + 1 Decrement Register Pair Instructions DCX B DEC BC 0B BC ← BC - 1 DCX D DEC DE 1B DE ← DE - 1 DCX H DEC HL 2B HL ← HL - 1 DCX SP DEC SP 3B SP ← SP - 1 --- DEC IX DD2B IX ← IX - 1 --- DEC IY FD2B IY ← IY - 1 Special Accumulator and Flag Instructions DAA DAA 27 --- CMA CPL 2F A ← NOT A STC SCF 37 CF (Carry Flag) ← 1 CMC CCF 3F CF (Carry Flag) ← NOT CF --- NEG ED44 A ← 0-A Rotate Instructions RLC RLCA 07 --- RRC RRCA 0F --- RAL RLA 17 --- RAR RRA 1F --- --- RLD ED6F --- --- RRD ED67 --- --- RLC A CB07 --- --- RLC B CB00 --- --- RLC C CB01 ---

Page 80: Curs Asm 2Curs-ASM014

5-35

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- RLC D CB02 --- --- RLC E CB03 --- --- RLC H CB04 --- --- RLC L CB05 --- --- RLC (HL) CB06 --- --- RLC (IX+index) DDCBindex06 --- --- RLC (IY+index) FDCBindex06 --- --- RL A CB17 --- --- RL B CB10 --- --- RL C CB11 --- --- RL D CB12 --- --- RL E CB13 --- --- RL H CB14 --- --- RL L CB15 --- --- RL (HL) CB16 --- --- RL (IX+index) DDCBindex16 --- --- RL (IY+index) FDCBindex16 --- --- RRC A CB0F --- --- RRC B CB08 --- --- RRC C CB09 --- --- RRC D CB0A --- --- RRC E CB0B --- --- RRC H CB0C --- --- RRC L CB0D --- --- RRC (HL) CB0E --- --- RRC (IX+index) DDCBindex0E --- --- RRC (IY+index) FDCBindex0E --- --- RL A CB1F --- --- RL B CB18 --- --- RL C CB19 --- --- RL D CB1A --- --- RL E CB1B --- --- RL H CB1C --- --- RL L CB1D --- --- RL (HL) CB1E --- --- RL (IX+index) DDCBindex1E --- --- RL (IY+index) FDCBindex1E --- Logical Byte Instructions ANA A AND A A7 A ← A AND A ANA B AND B A0 A ← A AND B ANA C AND C A1 A ← A AND C ANA D AND D A2 A ← A AND D

Page 81: Curs Asm 2Curs-ASM014

5-36

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

ANA E AND E A3 A ← A AND E ANA H AND H A4 A ← A AND H ANA L AND L A5 A ← A AND L ANA M AND (HL) A6 A ← A AND (HL) --- AND (IX+index) DDA6index A ← A AND (IX+index) --- AND (IY+index) FDA6index A ← A AND (IY+index) ANI byte AND byte E6byte A ← A AND byte XRA A XOR A AF A ← A XOR A XRA B XOR B A8 A ← A XOR B XRA C XOR C A9 A ← A XOR C XRA D XOR D AA A ← A XOR D XRA E XOR E AB A ← A XOR E XRA H XOR H AC A ← A XOR H XRA L XOR L AD A ← A XOR L XRA M XOR (HL) AE A ← A XOR (HL) --- XOR (IX+index) DDAEindex A ← A XOR (IX+index) --- XOR (IY+index) FDAEindex A ← A XOR (IY+index) XRI byte XOR byte EEbyte A ← A XOR byte ORA A OR A B7 A ← A OR A ORA B OR B B0 A ← A OR B ORA C OR C B1 A ← A OR C ORA D OR D B2 A ← A OR D ORA E OR E B3 A ← A OR E ORA H OR H B4 A ← A OR H ORA L OR L B5 A ← A OR L ORA M OR (HL) B6 A ← A OR (HL) --- OR (IX+index) DDB6index A ← A OR (IX+index) --- OR (IY+index) FDB6index A ← A OR (IY+index) ORI byte OR byte F6byte A ← A OR byte CMP A CP A BF A - A CMP B CP B B8 A - B CMP C CP C B9 A - C CMP D CP D BA A - D CMP E CP E BB A - E CMP H CP H BC A - H CMP L CP L BD A - L CMP M CP (HL) BE A - (HL) --- CP (IX+index) DDBEindex A - (IX+index) --- CP (IY+index) FDBEindex A - (IY+index) CPI byte CP byte FEbyte A - byte --- CPI EDA1 A - (HL);HL ← HL+1;BC ← BC-1 --- CPIR EDB1 A - (HL);HL ← HL+1;BC ← BC-1 --- CPD EDA9 A - (HL);HL ← HL -1;BC ← BC-1

Page 82: Curs Asm 2Curs-ASM014

5-37

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- CPDR EDB9 A - (HL);HL ← HL-1;BC ← BC-1 Branch Control/Program Counter Load Instructions JMP address JP address C3address PC ← address JNZ address JP NZ,address C2address If NZ, PC ← address JZ address JP Z,address CAaddress If Z, PC ← address JNC address JP NC,address D2address If NC, PC ← address JC address JP C,address DAaddress If C, PC ← address JPO address JP PO,address E2address If PO, PC ← address JPE address JP PE,address EAaddress If PE, PC ← address JP address JP P,address F2address If P, PC ← address JM address JM M,address FAaddress If M, PC ← address PCHL JP (HL) E9 PC ← HL --- JP (IX) DDE9 PC ← IX --- JP (IY) FDE9 PC ← IY --- JR index 18index PC ← PC + index --- JR NZ,index 20index If NZ, PC ← PC + index --- JR Z,index 28index If Z, PC ← PC + index --- JR NC,index 30index If NC, PC ← PC + index --- JR C,index 38index If C, PC ← PC + index --- DJNZ index 10index B <- B - 1; while B > 0, PC ←

PC + index CALL address CALL address CDaddress (SP-1) ← PCh;(SP-2) ← PCl;

SP ← SP - 2;PC ← address CNZ address CALL NZ,address C4address If NZ, CALL address CZ address CALL Z,address CCaddress If Z, CALL address CNC address CALL NC,address D4address If NC, CALL address CC address CALL C,address DCaddress If C, CALL address CPO address CALL PO,address E4address If PO, CALL address CPE address CALL PE,address ECaddress If PE, CALL address CP address CALL P,address F4address If P, CALL address CM address CALL M,address FCaddress If M, CALL address RET RET C9 PCl ← (SP);PCh ← (SP+1);

SP ← (SP+2) RNZ RET NZ C0 If NZ, RET RZ RET Z C8 If Z, RET RNC RET NC D0 If NC, RET RC RET C D8 If C, RET RPO RET PO E0 If PO, RET RPE RET PE E8 If PE, RET RP RET P F0 If P, RET RM RET M F8 If M, RET --- RETI ED4D Return from Interrupt

Page 83: Curs Asm 2Curs-ASM014

5-38

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- RETN ED45 IFF1 ← IFF2;RETI RST 0 RST 0 C7 CALL 0 RST 1 RST 8 CF CALL 8 RST 2 RST 10H D7 CALL 10H RST 3 RST 18H DF CALL 18H RST 4 RST 20H E7 CALL 20H RST 5 RST 28H EF CALL 28H RST 6 RST 30H F7 CALL 30H RST 7 RST 38H FF CALL 38H Stack Operation Instructions PUSH B PUSH BC C5 (SP-2) ← C; (SP-1) ← B;

SP ← SP - 2 PUSH D PUSH DE D5 (SP-2) ← E; (SP-1) ← D;

SP ← SP - 2 PUSH H PUSH HL E5 (SP-2) ← L; (SP-1) ← H;

SP ← SP - 2 PUSH PSW PUSH AF F5 (SP-2) ← Flags; (SP-1) ← A;

SP ← SP - 2 --- PUSH IX DDE5 (SP-2) ← IXl; (SP-1) ← IXh;

SP ← SP - 2 --- PUSH IY FDE5 (SP-2) ← IYl; (SP-1) ← IYh;

SP ← SP - 2 POP B POP BC C1 B ← (SP+1); C ← (SP);

SP ← SP + 2 POP D POP DE D1 D ← (SP+1); E ← (SP);

SP ← SP + 2 POP H POP HL E1 H ← (SP+1); L ← (SP);

SP ← SP + 2 POP PSW POP AF F1 A ← (SP+1); Flags ← (SP);

SP ← SP + 2 --- POP IX DDE1 IXh ← (SP+1); IXl ← (SP);

SP ← (SP+2) --- POP IY FDE1 IYh ← (SP+1); IYl ← (SP);

SP ← (SP+2) Input/Output Instructions IN byte IN A,(byte) DBbyte A ← [byte] --- IN A,(C) ED78 A ← [C] --- IN B,(C) ED40 B ← [C] --- IN C,(C) ED48 C ← [C] --- IN D,(C) ED50 D ← [C] --- IN E,(C) ED58 E ← [C] --- IN H,(C) ED60 H ← [C]

Page 84: Curs Asm 2Curs-ASM014

5-39

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- IN L,(C) ED68 L ← [C] --- INI EDA2 (HL) ← [C];B ← B-1;HL ← HL+1 --- INIR EDB2 (HL) ← [C];B ← B-1;HL ←

HL+1; Repeat while B>0 --- IND EDAA (HL) ← [C];B ← B-1;HL ← HL-1 --- INDR EDBA (HL) ← [C];B ← B-1;HL ← HL-1;

Repeat while B>0 OUT byte OUT (byte),A D320 [byte] ← A --- OUT (C),A ED79 [C] ← A --- OUT (C),B ED41 [C] ← B --- OUT (C),C ED49 [C] ← C --- OUT (C),D ED51 [C] ← D --- OUT (C),E ED59 [C] ← E --- OUT (C),H ED61 [C] ← H --- OUT (C),L ED69 [C] ← L --- OUTI EDA3 [C] ← (HL);B ← B-1;HL ← HL+1 --- OTIR EDB3 [C] ← (HL);B ← B-1;HL ←

HL+1; Repeat while B>0 --- OUTD EDAB [C] ← (HL);B ← B-1;HL ← HL-1 --- OTDR EDBB [C] ← (HL);B ← B-1;HL ← HL-1;

Repeat while B>0 Data Transfer Instructions (Z80 Only) --- LDI EDA0 (DE) ← (HL);HL ← HL+1;

DE ← DE+1; BC ← BC-1 --- LDIR EDB0 (DE) ← (HL);HL ← HL+1;

DE ← DE+1; BC ← BC-1; repeat while BC<>-1

--- LDD EDA8 (DE) ← (HL);HL ← HL-1; DE ← DE-1; BC ← BC-1

--- LDDR EDB8 (DE) ← (HL);HL ← HL-1; DE ← DE-1; BC ← BC-1; repeat while BC<>-1

Bit Manipulation Instructions (Z80 Only) --- BIT 0,A CB47 Z flag ← NOT Bit 0 --- BIT 0,B CB40 Z flag ← NOT Bit 0 --- BIT 0,C CB41 Z flag ← NOT Bit 0 --- BIT 0,D CB42 Z flag ← NOT Bit 0 --- BIT 0,E CB43 Z flag ← NOT Bit 0 --- BIT 0,H CB44 Z flag ← NOT Bit 0 --- BIT 0,L CB45 Z flag ← NOT Bit 0 --- BIT 0,(HL) CB46 Z flag ← NOT Bit 0 --- BIT 0,(IX+index) DDCBindex46 Z flag ← NOT Bit 0

Page 85: Curs Asm 2Curs-ASM014

5-40

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- BIT 0,(IY+index) FDCBindex46 Z flag ← NOT Bit 0 --- BIT 1,A CB4F Z flag ← NOT Bit 1 --- BIT 1,B CB48 Z flag ← NOT Bit 1 --- BIT 1,C CB49 Z flag ← NOT Bit 1 --- BIT 1,D CB4A Z flag ← NOT Bit 1 --- BIT 1,E CB4B Z flag ← NOT Bit 1 --- BIT 1,H CB4C Z flag ← NOT Bit 1 --- BIT 1,L CB4D Z flag ← NOT Bit 1 --- BIT 1,(HL) CB4E Z flag ← NOT Bit 1 --- BIT 1,(IX+index) DDCBindex4E Z flag ← NOT Bit 1 --- BIT 1,(IY+index) FDCBindex4E Z flag ← NOT Bit 1 --- BIT 2,A CB57 Z flag ← NOT Bit 2 --- BIT 2,B CB50 Z flag ← NOT Bit 2 --- BIT 2,C CB51 Z flag ← NOT Bit 2 --- BIT 2,D CB52 Z flag ← NOT Bit 2 --- BIT 2,E CB53 Z flag ← NOT Bit 2 --- BIT 2,H CB54 Z flag ← NOT Bit 2 --- BIT 2,L CB55 Z flag ← NOT Bit 2 --- BIT 2,(HL) CB56 Z flag ← NOT Bit 2 --- BIT 2,(IX+index) DDCBindex56 Z flag ← NOT Bit 2 --- BIT 2,(IY+index) FDCBindex56 Z flag ← NOT Bit 2 --- BIT 3,A CB5F Z flag ← NOT Bit 3 --- BIT 3,B CB58 Z flag ← NOT Bit 3 --- BIT 3,C CB59 Z flag ← NOT Bit 3 --- BIT 3,D CB5A Z flag ← NOT Bit 3 --- BIT 3,E CB5B Z flag ← NOT Bit 3 --- BIT 3,H CB5C Z flag ← NOT Bit 3 --- BIT 3,L CB5D Z flag ← NOT Bit 3 --- BIT 3,(HL) CB5E Z flag ← NOT Bit 3 --- BIT 3,(IX+index) DDCBindex5E Z flag ← NOT Bit 3 --- BIT 3,(IY+index) FDCBindex5E Z flag ← NOT Bit 3 --- BIT 4,A CB67 Z flag ← NOT Bit 4 --- BIT 4,B CB60 Z flag ← NOT Bit 4 --- BIT 4,C CB61 Z flag ← NOT Bit 4 --- BIT 4,D CB62 Z flag ← NOT Bit 4 --- BIT 4,E CB63 Z flag ← NOT Bit 4 --- BIT 4,H CB64 Z flag ← NOT Bit 4 --- BIT 4,L CB65 Z flag ← NOT Bit 4 --- BIT 4,(HL) CB66 Z flag ← NOT Bit 4 --- BIT 4,(IX+index) DDCBindex66 Z flag ← NOT Bit 4 --- BIT 4,(IY+index) FDCBindex66 Z flag ← NOT Bit 4 --- BIT 5,A CB6F Z flag ← NOT Bit 5 --- BIT 5,B CB68 Z flag ← NOT Bit 5

Page 86: Curs Asm 2Curs-ASM014

5-41

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- BIT 5,C CB69 Z flag ← NOT Bit 5 --- BIT 5,D CB6A Z flag ← NOT Bit 5 --- BIT 5,E CB6B Z flag ← NOT Bit 5 --- BIT 5,H CB6C Z flag ← NOT Bit 5 --- BIT 5,L CB6D Z flag ← NOT Bit 5 --- BIT 5,(HL) CB6E Z flag ← NOT Bit 5 --- BIT 5,(IX+index) DDCBindex6E Z flag ← NOT Bit 5 --- BIT 5,(IY+index) FDCBindex6E Z flag ← NOT Bit 5 --- BIT 6,A CB77 Z flag ← NOT Bit 6 --- BIT 6,B CB70 Z flag ← NOT Bit 6 --- BIT 6,C CB71 Z flag ← NOT Bit 6 --- BIT 6,D CB72 Z flag ← NOT Bit 6 --- BIT 6,E CB73 Z flag ← NOT Bit 6 --- BIT 6,H CB74 Z flag ← NOT Bit 6 --- BIT 6,L CB75 Z flag ← NOT Bit 6 --- BIT 6,(HL) CB76 Z flag ← NOT Bit 6 --- BIT 6,(IX+index) DDCBindex76 Z flag ← NOT Bit 6 --- BIT 6,(IY+index) FDCBindex76 Z flag ← NOT Bit 6 --- BIT 7,A CB7F Z flag ← NOT Bit 7 --- BIT 7,B CB78 Z flag ← NOT Bit 7 --- BIT 7,C CB79 Z flag ← NOT Bit 7 --- BIT 7,D CB7A Z flag ← NOT Bit 7 --- BIT 7,E CB7B Z flag ← NOT Bit 7 --- BIT 7,H CB7C Z flag ← NOT Bit 7 --- BIT 7,L CB7D Z flag ← NOT Bit 7 --- BIT 7,(HL) CB7E Z flag ← NOT Bit 7 --- BIT 7,(IX+index) DDCBindex7E Z flag ← NOT Bit 7 --- BIT 7,(IY+index) FDCBindex7E Z flag ← NOT Bit 7 --- RES 0,A CB87 Bit 0 ← 0 --- RES 0,B CB80 Bit 0 ← 0 --- RES 0,C CB81 Bit 0 ← 0 --- RES 0,D CB82 Bit 0 ← 0 --- RES 0,E CB83 Bit 0 ← 0 --- RES 0,H CB84 Bit 0 ← 0 --- RES 0,L CB85 Bit 0 ← 0 --- RES 0,(HL) CB86 Bit 0 ← 0 --- RES 0,(IX+index) DDCBindex86 Bit 0 ← 0 --- RES 0,(IY+index) FDCBindex86 Bit 0 ← 0 --- RES 1,A CB8F Bit 1 ← 0 --- RES 1,B CB88 Bit 1 ← 0 --- RES 1,C CB89 Bit 1 ← 0 --- RES 1,D CB8A Bit 1 ← 0 --- RES 1,E CB8B Bit 1 ← 0

Page 87: Curs Asm 2Curs-ASM014

5-42

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- RES 1,H CB8C Bit 1 ← 0 --- RES 1,L CB8D Bit 1 ← 0 --- RES 1,(HL) CB8E Bit 1 ← 0 --- RES 1,(IX+index) DDCBindex8E Bit 1 ← 0 --- RES 1,(IY+index) FDCBindex8E Bit 1 ← 0 --- RES 2,A CB97 Bit 2 ← 0 --- RES 2,B CB90 Bit 2 ← 0 --- RES 2,C CB91 Bit 2 ← 0 --- RES 2,D CB92 Bit 2 ← 0 --- RES 2,E CB93 Bit 2 ← 0 --- RES 2,H CB94 Bit 2 ← 0 --- RES 2,L CB95 Bit 2 ← 0 --- RES 2,(HL) CB96 Bit 2 ← 0 --- RES 2,(IX+index) DDCBindex96 Bit 2 ← 0 --- RES 2,(IY+index) FDCBindex96 Bit 2 ← 0 --- RES 3,A CB9F Bit 3 ← 0 --- RES 3,B CB98 Bit 3 ← 0 --- RES 3,C CB99 Bit 3 ← 0 --- RES 3,D CB9A Bit 3 ← 0 --- RES 3,E CB9B Bit 3 ← 0 --- RES 3,H CB9C Bit 3 ← 0 --- RES 3,L CB9D Bit 3 ← 0 --- RES 3,(HL) CB9E Bit 3 ← 0 --- RES 3,(IX+index) DDCBindex9E Bit 3 ← 0 --- RES 3,(IY+index) FDCBindex9E Bit 3 ← 0 --- RES 4,A CBA7 Bit 4 ← 0 --- RES 4,B CBA0 Bit 4 ← 0 --- RES 4,C CBA1 Bit 4 ← 0 --- RES 4,D CBA2 Bit 4 ← 0 --- RES 4,E CBA3 Bit 4 ← 0 --- RES 4,H CBA4 Bit 4 ← 0 --- RES 4,L CBA5 Bit 4 ← 0 --- RES 4,(HL) CBA6 Bit 4 ← 0 --- RES 4,(IX+index) DDCBindexA6 Bit 4 ← 0 --- RES 4,(IY+index) FDCBindexA6 Bit 4 ← 0 --- RES 5,A CBAF Bit 5 ← 0 --- RES 5,B CBA8 Bit 5 ← 0 --- RES 5,C CBA9 Bit 5 ← 0 --- RES 5,D CBAA Bit 5 ← 0 --- RES 5,E CBAB Bit 5 ← 0 --- RES 5,H CBAC Bit 5 ← 0 --- RES 5,L CBAD Bit 5 ← 0 --- RES 5,(HL) CBAE Bit 5 ← 0

Page 88: Curs Asm 2Curs-ASM014

5-43

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- RES 5,(IX+index) DDCBindexAE Bit 5 ← 0 --- RES 5,(IY+index) FDCBindexAE Bit 5 ← 0 --- RES 6,A CBB7 Bit 6 ← 0 --- RES 6,B CBB0 Bit 6 ← 0 --- RES 6,C CBB1 Bit 6 ← 0 --- RES 6,D CBB2 Bit 6 ← 0 --- RES 6,E CBB3 Bit 6 ← 0 --- RES 6,H CBB4 Bit 6 ← 0 --- RES 6,L CBB5 Bit 6 ← 0 --- RES 6,(HL) CBB6 Bit 6 ← 0 --- RES 6,(IX+index) DDCBindexB6 Bit 6 ← 0 --- RES 6,(IY+index) FDCBindexB6 Bit 6 ← 0 --- RES 7,A CBBF Bit 7 ← 0 --- RES 7,B CBB8 Bit 7 ← 0 --- RES 7,C CBB9 Bit 7 ← 0 --- RES 7,D CBBA Bit 7 ← 0 --- RES 7,E CBBB Bit 7 ← 0 --- RES 7,H CBBC Bit 7 ← 0 --- RES 7,L CBBD Bit 7 ← 0 --- RES 7,(HL) CBBE Bit 7 ← 0 --- RES 7,(IX+index) DDCBindexBE Bit 7 ← 0 --- RES 7,(IY+index) FDCBindexBE Bit 7 ← 0 --- SET 0,A CBC7 Bit 0 ← 1 --- SET 0,B CBC0 Bit 0 ← 1 --- SET 0,C CBC1 Bit 0 ← 1 --- SET 0,D CBC2 Bit 0 ← 1 --- SET 0,E CBC3 Bit 0 ← 1 --- SET 0,H CBC4 Bit 0 ← 1 --- SET 0,L CBC5 Bit 0 ← 1 --- SET 0,(HL) CBC6 Bit 0 ← 1 --- SET 0,(IX+index) DDCBindexC6 Bit 0 ← 1 --- SET 0,(IY+index) FDCBindexC6 Bit 0 ← 1 --- SET 1,A CBCF Bit 1 ← 1 --- SET 1,B CBC8 Bit 1 ← 1 --- SET 1,C CBC9 Bit 1 ← 1 --- SET 1,D CBCA Bit 1 ← 1 --- SET 1,E CBCB Bit 1 ← 1 --- SET 1,H CBCC Bit 1 ← 1 --- SET 1,L CBCD Bit 1 ← 1 --- SET 1,(HL) CBCE Bit 1 ← 1 --- SET 1,(IX+index) DDCBindexCE Bit 1 ← 1 --- SET 1,(IY+index) FDCBindexCE Bit 1 ← 1 --- SET 2,A CBD7 Bit 2 ← 1

Page 89: Curs Asm 2Curs-ASM014

5-44

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- SET 2,B CBD0 Bit 2 ← 1 --- SET 2,C CBD1 Bit 2 ← 1 --- SET 2,D CBD2 Bit 2 ← 1 --- SET 2,E CBD3 Bit 2 ← 1 --- SET 2,H CBD4 Bit 2 ← 1 --- SET 2,L CBD5 Bit 2 ← 1 --- SET 2,(HL) CBD6 Bit 2 ← 1 --- SET 2,(IX+index) DDCBindexD6 Bit 2 ← 1 --- SET 2,(IY+index) FDCBindexD6 Bit 2 ← 1 --- SET 3,A CBDF Bit 3 ← 1 --- SET 3,B CBD8 Bit 3 ← 1 --- SET 3,C CBD9 Bit 3 ← 1 --- SET 3,D CBDA Bit 3 ← 1 --- SET 3,E CBDB Bit 3 ← 1 --- SET 3,H CBDC Bit 3 ← 1 --- SET 3,L CBDD Bit 3 ← 1 --- SET 3,(HL) CBDE Bit 3 ← 1 --- SET 3,(IX+index) DDCBindexDE Bit 3 ← 1 --- SET 3,(IY+index) FDCBindexDE Bit 3 ← 1 --- SET 4,A CBE7 Bit 4 ← 1 --- SET 4,B CBE0 Bit 4 ← 1 --- SET 4,C CBE1 Bit 4 ← 1 --- SET 4,D CBE2 Bit 4 ← 1 --- SET 4,E CBE3 Bit 4 ← 1 --- SET 4,H CBE4 Bit 4 ← 1 --- SET 4,L CBE5 Bit 4 ← 1 --- SET 4,(HL) CBE6 Bit 4 ← 1 --- SET 4,(IX+index) DDCBindexE6 Bit 4 ← 1 --- SET 4,(IY+index) FDCBindexE6 Bit 4 ← 1 --- SET 5,A CBEF Bit 5 ← 1 --- SET 5,B CBE8 Bit 5 ← 1 --- SET 5,C CBE9 Bit 5 ← 1 --- SET 5,D CBEA Bit 5 ← 1 --- SET 5,E CBEB Bit 5 ← 1 --- SET 5,H CBEC Bit 5 ← 1 --- SET 5,L CBED Bit 5 ← 1 --- SET 5,(HL) CBEE Bit 5 ← 1 --- SET 5,(IX+index) DDCBindexEE Bit 5 ← 1 --- SET 5,(IY+index) FDCBindexEE Bit 5 ← 1 --- SET 6,A CBF7 Bit 6 ← 1 --- SET 6,B CBF0 Bit 6 ← 1 --- SET 6,C CBF1 Bit 6 ← 1 --- SET 6,D CBF2 Bit 6 ← 1

Page 90: Curs Asm 2Curs-ASM014

5-45

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- SET 6,E CBF3 Bit 6 ← 1 --- SET 6,H CBF4 Bit 6 ← 1 --- SET 6,L CBF5 Bit 6 ← 1 --- SET 6,(HL) CBF6 Bit 6 ← 1 --- SET 6,(IX+index) DDCBindexF6 Bit 6 ← 1 --- SET 6,(IY+index) FDCBindexF6 Bit 6 ← 1 --- SET 7,A CBFF Bit 7 ← 1 --- SET 7,B CBF8 Bit 7 ← 1 --- SET 7,C CBF9 Bit 7 ← 1 --- SET 7,D CBFA Bit 7 ← 1 --- SET 7,E CBFB Bit 7 ← 1 --- SET 7,H CBFC Bit 7 ← 1 --- SET 7,L CBFD Bit 7 ← 1 --- SET 7,(HL) CBFE Bit 7 ← 1 --- SET 7,(IX+index) DDCBindexFE Bit 7 ← 1 --- SET 7,(IY+index) FDCBindexFE Bit 7 ← 1 Bit Shift Instructions (Z80 Only) --- SLA A CB27 --- --- SLA B CB20 --- --- SLA C CB21 --- --- SLA D CB22 --- --- SLA E CB23 --- --- SLA H CB24 --- --- SLA L CB25 --- --- SLA (HL) CB26 --- --- SLA (IX+index) DDCBindex26 --- --- SLA (IY+index) FDCBindex26 --- --- SRA A CB2F --- --- SRA B CB28 --- --- SRA C CB29 --- --- SRA D CB2A --- --- SRA E CB2B --- --- SRA H CB2C --- --- SRA L CB2D --- --- SRA (HL) CB2E --- --- SRA (IX+index) DDCBindex2E --- --- SRA (IY+index) FDCBindex2E --- --- SRL A CB3F --- --- SRL B CB38 --- --- SRL C CB39 --- --- SRL D CB3A --- --- SRL E CB3B ---

Page 91: Curs Asm 2Curs-ASM014

5-46

Intel 8080 Mnemonic

Zilog Z80 Mnemonic

Codification (H)

Operation

--- SRL H CB3C --- --- SRL L CB3D --- --- SRL (HL) CB3E --- --- SRL (IX+index) DDCBindex3E --- --- SRL (IY+index) FDCBindex3E ---

Page 92: Curs Asm 2Curs-ASM014

6-1

6. COMPONENTE DE SUPORT Componentele electronice absolut necesare funcţionării unui microprocesor se

numesc componente de suport. Microprocesorul Intel 8080 necesită următoarele componente de suport: generatorul de tact Intel 8224, circuitul de control şi amplificare a magistralei de date Intel 8228 şi registrul de memorie tampon Intel 8212.

6.1. MEMORIA TAMPON Intel 8212 Acest circuit are rolul de amplificator de magistrală şi de memorie tampon de 8 biţi,

arhitectura sa internă fiind prezentată în fig.6.1.

Fig.6.1 Arhitectura internă a circuitului Intel 8212 Circuitul cuprinde un registru de 8 biţi prevăzut pe ieşiri cu tampoane cu trei stări şi

un bloc logic de comandă şi selecţie ale cărui semnale au următoarele semnificaţii: - 1DS , 2DS = semnale prin care circuitul este selectat de către microprocesor; - STB = semnal de eşantionare, generat de către periferic; - MD = semnal pentru comanda modului de intrare sau de ieşire al transferului; - CLR = semnal pentru iniţializarea circuitului prin setarea bistabilului de

întrerupere SR şi resetarea registrului pe 8 biţi; - INT = semnalul de cerere de întrerupere, generat către microprocesor prin

bistabilul de întrerupere notat SR; - CLK, SRCLK (=Clock) = semnale interne de tact pentru bistabilele interne; - EN (= Enable) = semnal intern de validare a tampoanelor de peieşirile de date. Tamponul de date este un registru pe 8 biţi format din 8 bistabile D având intrările

DI0 .. DI7 şi ieşirile DO0 .. DO7, ieşirile fiind prevăzute cu tampoane cu trei stări, validate prin semnalul intern EN = 1 şi trecând în starea de înaltă impedenţă „Z” când EN = 0.

Blocul logic de comandă al circuitului Intel 8212 generează următoarele funcţii logice: CLK = STB·MD + MD·( 1DS · 2DS )

1 2EN = MD + DS DS⋅

1 2 1 2 SR 1 2INT = DS DS +Q = DS DS CLK = DS DS STB⋅ ⋅ ⋅ ⋅ ⋅ ⋅

1 2S = CLR + DS DS⋅ Circuitul Intel 8212 poate funcţiona în următoarele 8 moduri.

INT

EN

DI0 ............... DI7

CLK R

DO0 ........... DO7

QS

D

1DS

CLR

Q

SRCLK Q

D SR QQ R

D

CLK

Q

MD

STB

2DS

Page 93: Curs Asm 2Curs-ASM014

6-2

Tampon unidirecţional Modul de conectare a circuitului Intel 8212 ca tampon unidirecţional este prezentat în

fig.6.2, funcţionarea în acest mod fiind stabilită prin comanda circuitului cu semnalele logice MD = 0 şi STB = 1. Registrul intern de 8 biţi fiind permanent comandat cu semnalul:

CLK = STB·MD + MD·( 1DS · 2DS ) = 0 ·1 + MD·( 1DS · 2DS ) = 1 , va prelua datele aplicate la intrările DI0 .. DI7, pe care, la selecţia circuitului prin:

1DS · 2DS = 0 ·1 = 1 , le va transfera pe ieşirile DO0 .. DO7 prin validarea tampoanelor de ieşire cu semnalul

EN = MD + ( 1DS · 2DS ) = 0 + ( 0 ·1) = 1 .

Fig.6.2 Tampon unidirecţional

Tampon bidirecţional Utilizarea circuitului Intel 8212 ca tampon bidirecţional este prezentată în fig.6.3.

Fig.6.3 Tampon bidirecţional

DO0 .. DO7

DI0 .. DI7

MD

2DS 1DS

STB

Intel 8212

+5V

+5V CLR

DO0 .. DO7

DI0 .. DI7

MD

2DS

1DS

STB

Intel 8212

+5V

+5V CLR

DO0 .. DO7

DI0 .. DI7

MD

2DS

1DS

STB

Intel 8212

+5V

+5V CLR

sens

+5V

Page 94: Curs Asm 2Curs-ASM014

6-3

Ca tampon bidirecţional, două circuite Intel 8212, montate antiparalel ca tampoane unidirecţionale, nu vor funcţiona simultan, selecţia circuitului pentru sensul de transfer dorit făcându-se cu un semnal de comandă a sensului de transfer la care un circuit este conectat cu terminalul 1DS , iar celălalt cu terminalul 2DS .

Port de ieşire Conectarea circuitului Intel 8212 ca port de ieşire este prezentată în fig.6.4.

Fig.6.4 Port de ieşire

Funcţionarea circuitului Intel 8212 ca port de ieşire este stabilită prin semnalele MD =

= STB = 1 (= +5V), data de emis aplicată la intrările DI0 .. DI7 fiind memorată în registrul tampon , pe durata selecţiei circuitului, prin semnalul

CLK = STB·MD + MD·( 1DS · 2DS ) = STB·MD + 1·(0 ·1) = 1 şi accesibilă perifericului deservit la ieşirile DO0 .. DO7 prin tampoanele de ieşire permanent validate cu semnalul intern

EN = MD + ( 1DS · 2DS ) = 1 + ( 1DS · 2DS ) = 1 . Port de intrare Funcţionarea circuitului Intel 8212 ca port de intrare este realizată prin schema de

conectare prezentată în fig.6.5.

Fig.6.5 Port de intrare

La funcţionarea ca port de intrare, stabilită prin semnalul MD = 0, prin comanda STB= = 1 generată de perifericul deservit, data de recepţionat, aplicată la intrările DI0 .. DI7, este memorată în registrul circuitului Intel 8212, căruia i se aplică semnalul de tact

DI0 .. DI7

MD

2DS 1DS

STB

la periferic (data bus) Intel 8212

DO0 .. DO7

de la sistem

+5V

+5V

CLR

+5V

1DS

Intel 8212

DI0 .. DI7

MD

2DS

STB DO0 .. DO7

(data bus)

la sistem

de la periferic

+5V CLR

Page 95: Curs Asm 2Curs-ASM014

6-4

CLK = STB·MD + MD·( 1DS · 2DS ) = STB·0 + 0·( 1DS · 2DS ) = STB = 1, ieşirile DO0 .. DO7 ale circuitului neselectat fiind în înaltă impedanţă prin comanda tampoanelor cu trei stări cu semnalul intern

EN = MD + ( 1DS · 2DS ) = 0. Pe durata selecţiei circuitului Intel 8212, când

1DS · 2DS = 0 ·1 = 1 , prin tampoanele validate cu semnalul intern

EN = MD + ( 1DS · 2DS ) = 0 + (0 ·1) = 1, data memorată în registrul tampon apare pe ieşirile DO0 .. DO7 conectate la magistrala de date, fiind preluată în sistem.

Port de intrare cu forţarea instrucţiunii RST p Conectarea circuitului Intel 8212 ca port de intrare cu forţarea instrucţiunii RST p

este prezentată în fig.6.6. În acest mod de utilizare, stabilit prin semnalele MD = 0 şi STB = 1, circuitul Intel

8212 are pe intrările DI0 .. DI7 codul unei instrucţiuni de apel RST p, memorată în registrul tampon permanent comandat cu semnalul

CLK = STB·MD + MD·( 1DS · 2DS ) = 1·0 + 0·( 1DS · 2DS ) = 1 , ieşirile DO0 .. DO7 ale circuitului neselectat fiind în înaltă impedanţă prin comanda tampoanelor de ieşire cu semnalul intern

EN = MD + ( 1DS · 2DS ) = 0 + (1·0) = 0 . La acceptarea cererii de întrerupere solicitate microprocesorului, pe durata selecţiei

circuitului, realizată cu semnalul de acceptare a întreruperii INTA (=Interrupt Acknowledge), prin

1DS · 2DS = INTA · 2DS = 0 ·1 = 1 , codul instrucţiunii RST p este accesibil, prin tampoanele validate cu semnalul intern

EN = MD + ( 1DS · 2DS ) = 0 + (0 ·1) = 1 , la ieşirile DO0 .. DO7 conectate la magistrala de date, fiind preluat de microprocesor, care prin efectuarea instrucţiunii RST p, determină adresa programului de întrerupere în a cărui execuţie intră.

Fig.6.6 Port de intrare cu forţarea instrucţiunii RST p

Port de intrare cu dialog Modul de conectare a circuitului Intel 8212 ca port de intrare cu dialog este prezentat

în fig.6.7.

Intel 8212

1DS

DI0 .. DI7

MD

2DS

STB DO0 .. DO7

+5V

(data bus)

de la INTA Cod: RST p

+5V CLR

Page 96: Curs Asm 2Curs-ASM014

6-5

Această conexiune este similară conexiunii de port de intrare, prezentată în fig.6.5, de care se deosebeşte prin aceea că este folosit semnalul de cerere de întrerupere INT .

Astfel, semnalul STB = 1, prin care perifericul comandă înscrierea datei de recepţie în portul de intrare, determină şi trecerea bistabilului de întrerupere SR, la a cărui terminal de tact CLK se aplică, în starea Q = 0, circuitul neselectat Intel 8212, generând semnalul de cerere de întrerupere

INT = 1 2DS DS Q⋅ ⋅ = 1 2DS DS STB⋅ ⋅ = 1 2DS DS⋅ ·0 = 0 . La acceptarea cererii de întrerupere, prin selecţia circuitului cu semnalul

1DS · 2DS = 0 ·1 = 1 , data de recepţie este transferată la ieşirile DO0 .. DO7, conectate la magistrala de date, prin tampoanele de ieşire validate cu semnalul intern

EN = MD + 1DS · 2DS = 0 + 0 ·1 = 1 , iar bistabilul de întrerupere SR este trecut în starea Q = 1 prin terminalul său de setare

1 2S DS DS CLR 0 1 CLR 0= ⋅ ⋅ = ⋅ ⋅ = , anulându-se astfel cererea de întrerupere aflată în curs de rezolvare.

Fig.6.7 Port de intrare cu dialog

Port de ieşire cu dialog Conectarea circuitului Intel 8212 ca port de ieşire cu dialog este prezentată în fig.6.8.

Fig.6.8 Port de ieşire cu dialog

În această conexiune, perifericul deservit, după ce a citit data emisă, de la

terminalele de ieşire DO0 .. DO7, permanent validate cu semnalul intern

DI0 .. DI7

MD

2DS 1DS

STB

Intel 8212

DO0 .. DO7

+5V

(data bus)

la sistem

de la periferic

INT +5V CLR

DI0 .. DI7

MD

2DS 1DS

STB

la periferic

(data bus) Intel 8212 DO0 .. DO7

de la sistem

+5V

INT +5V

CLR

Page 97: Curs Asm 2Curs-ASM014

6-6

EN = MD + 1DS · 2DS = 1 + 1DS · 2DS = 1 , generează semnalul STB = 1, ce determină circuitul neselectat Intel 8212 să emită, prin bascularea bistabilului de întrerupere SR în starea Q = 0, semnalul de cerere întrerupere

INT = 1 2DS DS Q⋅ ⋅ = 1 2DS DS STB⋅ ⋅ = 1 0 1⋅ ⋅ = 0 . La acceptarea cererii de întrerupere prin semnalul de selecţie

1DS · 2DS = 1 se generează atât semnalul de tact

CLK = MD· 1DS · 2DS = 1·0 ·1 = 1 pentru înscrierea în registrul tampon a datei aplicată la terminalele DI0 .. DI7 prin magistrala de date, cât şi semnalul

1 2S DS DS CLR 0 1 CLR 0= ⋅ ⋅ = ⋅ ⋅ = de setare a bistabilului de cerere de întrerupere, notat SR, prin care, la anularea selecţiei, se anulează cererea de întrerupere în curs de achitare

INT = 1 2DS DS Q⋅ ⋅ = 1 2DS DS STB 0 0 0 1⋅ ⋅ = ⋅ ⋅ = . Registru de stări În funcţionarea ca registru de stări (= Status Latch) circuitul realizează memorarea

semnalelor de comandă emise de microprocesorul Intel 8080 pe magistrala de date, la începutul fiecărui ciclu de maşină. Conectarea circuitului Intel 8212 pentru acest mod de funcţionare este prezentată în fig.6.9.

Acum, la selecţia circuitului prin

1 2DS DS STSTB SYNC 1⋅ = ⋅ =

semnalele aplicate prin magistrala de date la intrările circuitului DI0 .. DI7 sunt memorate în registrul circuitului comandat cu semnalul

CLK = STB·MD + MD·( 1DS · 2DS ) = STB·1 + 1·(0 ·1) = 1 şi transferate la ieşirile DO0 .. D=7, permanent validate cu semnalul intern

EN = MD + ( 1DS · 2DS ) = 1 + ( 1DS · 2DS ) =1 .

Fig.6.9 Conectarea circuitului Intel 8212 ca registru de stări

D0 .. D7

DI0 .. DI7

DO0 .. DO7

DO0 DO1 DO2 DO3 DO4 DO5 DO6 DO7 INTA WO STACK HALTA OUT 1M INP MEMR

+5V

STB

MD

CLR +5V

+5V

2DS

1DS

De la Intel 8080

STSTB de la Intel 8224

SYNC

Intel 8212

Page 98: Curs Asm 2Curs-ASM014

6-7

6.2. CIRCUITUL Intel 8228 Acest circuit îndeplineşte funcţiile de amplicator al magistralei de date şi de generare

a semnalelor necesare conectării la sistem a circuitelor de memorie ROM (= Read Only Memory) şi RAM (= Random Access Memory) precum şi a circuitelor de interfaţă cu perifericele. Arhitectura internă a circuitului Intel 8228 este prezentată în fig.6.10.

Fig.6.10 Arhitectura internă a circuitului Intel 8228

Amplificarea în putere a magistralei de date a microprocesorului este realizată prin tamponul de date bidirecţional (= Bidirectional Bus Driver) care se conectează la terminalele de date ale microprocesorului cu terminalele notate D0 .. D7, iar prin terminalele notate DB0 .. DB7 crează magistrala de date pentru sistem.

La începutul fiecărui ciclu de maşină, semnalele de comandă transmise de microprocesorul Intel 8080 prin magistrala de date sunt memorate în registrul temporar (= Status Latch) sub acţiunea semnalului de eşantionare STSTB (= Status Strobe) generat de circuitul generator de tact Intel 8224.

Aria de porţi logice (= Gatting Array), sub acţiunea semnalelor de comandă memorate de la terminalele de date ale microprocesorului Intel 8080, în registrul temporar şi a semnalelor DBIN (= Data Bus Input), HLDA (= Hold Acknowledge), WR (= Write) emise la terminale distincte ale microprocesorului Intel 8080, generează semnalele INTA (= Interrupt Acknowledge), IOR (= Input/Output Read), IOW (= Input/Output Write) pentru circuitele de interfaţă şi semnalele MEMR (= Memory Read), MEMW (= Memory Write) pentru circuitele memoriei sistemului, iar sub acţiunea semnalului extern BUSEN (= Bus Enable), de validare a magistralei de date, generează semnalul intern CONTROL DRIVER prin care tamponul bidirecţional de date este comandat să funcţioneze în transfer de date bidirecţional când BUSEN = 0, ori să-şi treacă liniile de date DB0 .. DB7, ce crează magistrala de date a sistemului, în starea de înaltă impedanţă când BUSEN = 1.

Semnalul BUSEN este generat de circuitul de interfaţă care solicită un acces direct la memorie, notat DMA (= Direct Memory Access), iar prin semnalul INTA , emis la acceptarea de către microprocesorul Intel 8080 a unei cereri de întrerupere solicitate prin

WR

GATING ARRAY

STATUS LATCH

BIDIRECTIONAL BUS DRIVER

BUSEN

STSTB

DB0 .. DB7 (System Data Bus)

D0 .. D7 (Microprocessor Data Bus)

MEMR

MEMW IOR

IOW

INTA

DBIN

HLDA

DRIVER CONTROL

Page 99: Curs Asm 2Curs-ASM014

6-8

semnalul INT, se comandă circuitul ce a solicitat întreruperea să depună pe magistrala de date codul unei instrucţiuni de apel RST p. Dacă terminalul de emitere a semnalului INTA este conectat la tensiunea de +12V, printr-un rezistor de 1 kΩ, circuitul Intel 8228 va forţa automat pe magistrala de date codul instrucţiunii RST 7, în sistem existând astfel o singură sursă de cerere de întrerupere.

Page 100: Curs Asm 2Curs-ASM014

6-9

6.9. CIRCUITUL Intel 8224

Fig.6.11 Arhitectura internă şi semnalele circuitului Intel 8224

READY

XTAL2

SCHMITT INPUT

RDYIN

XTAL1

RESET

RESIN

TANK

SYNC

Ø1

CLOCK GENETATOR

9 ׃

OSCILLATOR 18MHz

Ø2

Ø2 (TTL)

STSTB

Q

D

D Q

CLK

CLK

OSC (TTL) 18MHz

Ø2D Ø1A

Qua

rtz

C1

14

13

L

C2

15

5

12

11

10

6

1

7

4

2

3

Intel 8224

to

Inte

l 808

0

to

Inte

l 822

8 to

In

tel 8

080

from

In

tel 8

080

assi

ncro

nous

inpu

ts

Ø1

Ø2

Ø1A

Ø2D

t 1 2

1 2 3 4 5

R

+5V

C

B

RESIN

RESET

RDYIN

READY

GND

8

+5V Vcc

16

SYNC

STSTB

Page 101: Curs Asm 2Curs-ASM014

6-10

Arhitectura internă a circuitului Intel 8228 este prezentată în fig.6.11. Acest circuit îndeplineşte funcţiile de generator al semnalelor de tact Ø1 şi Ø2, de

generator al semnalului de strobare STSTB (=Status Strobe), ce comandă memorarea în circuitul Intel 8228 a semnalelor de comandă emise de microprocesor pe magistrala de date, şi de sincronizare cu tactul sistemului a comenzilor externe asincrone RESIN şi RDYIN.

Circuitul conţine un generator de tact de 18MHz prin a cărui divizare cu 9 se obţin tactele Ø1 şi Ø2 cu frecvenţa de 2 MHz necesare microprocesorului şi tactele interne Ø1A, în avans de fază faţă de tactul Ø1, şi Ø2D, în devans de fază faţă de tactul Ø2. Tactul Ø1A este utilizat în generarea comenzii STSTB , iar tactul Ø2D în sincronizarea comenzilor externe RESIN şi RDYIN.

Corectarea frecvenţei cristalului de cuarţ, conectat la terminalele XTAL1 şi XTAL2, se face prin grupul extern L-C1-C2 conectat la terminalul TANK al circuitului.

În vederea sincronizării cu tactul sistemului, semnalul extern de comandă RESIN , lent variabil, este trecut printr-un circuit Triger Schmitt pentru scurtarea fronturilor.

Resetarea microprocesorului are loc atât la conectarea alimentării, cât şi la o comandă de resetare introdusă cu push-buton-ul B.

Diagrama semnalelor pentru circuitul Intel 8224 este dată în fig.6.11.

Page 102: Curs Asm 2Curs-ASM014

7-1

7. CIRCUITE DE INTERFAŢĂ 7.1. GENERALITĂŢI Pe parcursul efectuării unui program, într-un sistem cu microprocesor au loc multiple

transferuri de date, atât de la microprocesor către circuitele sistemului, cât şi în sens invers. Într-un transfer de date sunt implicate două circuite, dintre care circuitul ce furnizează datele este numit emiţător, iar cel ce primeşte datele este numit receptor.

Introducerea şi extragerea datelor dintr-un sistem cu microprocesor se realizează prin conectarea la sistem a unor echipamente periferice, aceste operaţii implicând transferuri de date dintre microprocesor şi echipamentele periferice. Echipamentele periferice se caracterizează printr-o viteză de lucru cu mult mai mică decât viteza de operare a microprocesorului.

Un transfer de date dintre microprocesor şi un periferic lent cuplat direct la magistralele sistemului, determină o scădere substanţială a vitezei de operare a microprocesorului care, pe intervalul mare de timp în care perifericul ar prelua, ori ar furniza data implicată în transfer, trebuie să treacă într-o stare de inactivitate numită stare de aşteptare, în care nu poate efectua alte sarcini. Aceste stări de inactivitate determină o viteză aparentă redusă a microprocesorului, deşi viteza reală de operare a microprocesorului este foarte mare. În vederea eliminării acestor stări de inactivitate ale microprocesorului, conectarea echipamentelor periferice la magistralele sistemului nu se face direct, ci prin intermediul unor circuite specializate numite circuite de interfaţă, al căror rol este de a prelua de la microprocesor sarcina comunicării cu echipamentul periferic, încât, pe durata transferului dintre echipamentul periferic şi circuitul de interfaţă microprocesorul să poată efectua numeroase alte sarcini.

Prin intermediul unui circuit de interfaţă, transferul datelor dintre microprocesor şi un echipament periferic lent, din care unul este emiţător , iar celălalt este receptor, are loc in două etape, în prima etapă realizându-se transferul datei implicate de la emiţător în circuitul de interfaţă, iar în a doua etapă efectuându-se transferul datei din circuitul de interfaţă la receptor. Rezultă că circuitul de interfaţă îndeplineşte în prima etapă rolul de receptor intermediar, iar în a doua etapă rolul de emiţător intermediar. În fiecare din cele două etape viteza de transfer a datei implicate este impusă de circuitul cu care interfaţa comunică. Astfel, transferul unei date dintre microprocesor şi circuitul de interfaţă este realizat la viteza mare de operare a microprocesorului, în timp ce transferul unei date între circuitul de interfaţă şi perifericul lent implicat se face la viteza redusă a perifericului.

Rezultă că transferul unei date între un circuit de interfaţă şi un alt circuit, fiind un transfer între două circuite cu viteze de transfer diferite, trebuie sincronizat prin introducerea unor semnale de comandă şi control transferate numai între aceste circuite. Astfel, transferul unei date între un circuit de interfaţă şi microprocesor va fi sincronizat prin semnalele de comandă şi control transferate pe magistrala de comandă şi control a sistemului cu microprocesor, în timp ce transferul unei date între un periferic şi un circuit de interfaţă va fi sincronizat prin alte semnale de comandă şi control transferate doar între aceste circuite.

Definiţie Între două circuite, un transfer de date sincronizat prin semnale de comandă şi

control se numeşte transfer handshaking. Fiecare din circuitele implicate într-un transfer handshaking, în vederea sincronizării

funcţionării lor, va comunica celuilalt circuit, prin semnale distincte dacă este pregătit să efectueze următoarea etapă a transferului, emisia şi recepţia fiind controlate fiecare prin câte un număr de semnale distincte. Deci, între circuitele implicate într-un transfer handshaking, pe lângă traseele prin care se face transferul de date, vor exista şi trasee

Page 103: Curs Asm 2Curs-ASM014

7-2

pentru transferul semnalelor de comandă şi control, dintre care unele sunt alocate emisiei de date, iar altele sunt destinate recepţiei de date.

Între două circuite, transferul unei date se poate realiza, fie printr-o transmitere bit cu bit, numit trasfer serial, fie printr-o transmitere simultană a tuturor biţilor, numit transfer paralel. Un transfer paralel de date este mai rapid decât un transfer serial, dar necesită câte un traseu distinct pentru fiecare bit din componenţa cuvântului transferat.

Transferul de date între un circuit de interfaţă şi microprocesor este întotdeauna un transfer paralel, realizat prin magistrala de date a sistemului şi sincronizat prin semnale ale magistralei de comandă şi control a sistemului.

După modul de comunicare a datelor cu un periferic, circuitele de interfaţă se împart în circuite cu transfer paralel, notate PIO (=Paralel Input-Output) şi circuite cu transfer serial, notate SIO (=Serial Inpul-Output). Denumirile circuitelor de interfaţă nu sunt standardizate, aceste circuite primind diferite notaţii, după complexitatea lor şi după funcţiile ce li s-au implementat.

Circuitele de interfaţă sunt circuite programabile complexe, în care se pot adresa un număr de locaţii pentru transfer de date şi un registru de comandă prin a cărui înscriere se programează unul din modurile în care poate funcţiona interfaţa.

7.2. INTERFAŢA CU TRANSFER PARALEL DE DATE PPI 8255

Fig.7.1 Arhitectura internă a interfeţei PPI 8255

Acest circuit de interfaţă este numit Interfaţă Periferică Programabilă notată PPI

Group A Port A

Group A Control

Group A Port C (Upper)

Group B Port C (Lower)

Group B Port B

Group B Control

Read Write Control Logic

Data Bus Buffer

PA0 .. PA7

PC4 .. PC7

PC0 .. PC4

D0 .. D7

PB0 .. PB7

Internal Data Bus

RD

WR

A0

A1

RESET

CS

PPI 8255

Page 104: Curs Asm 2Curs-ASM014

7-3

(=Programmable Peripheral Interface), fiind conceput pentru a fi utilizat cu microprocesorul Intel 8080. Este un circuit complex ce poate fi utilizat şi cu alte microprocesoare pe opt biţi, arhitectura sa internă fiind prezentată în fig.7.1.

PPI 8255, ca orice alt circuit de interfaţă, va fi conectat atât la microprocesor, prin magistralele sistemului, cât şi la perifericul deservit, cu fiecare din aceste circuite realizând transferuri handshaking. În vederea realizării de transferuri cu microprocesorul, PPI 8255 se conectează la magistrala de date, prin terminalele D0 .. D7 ale unui registru tampon de date, iar printr-un circuit de control logic scriere / citire se conectează atât la magistrala de adrese, prin terminalele A0, A1, CS (= Chip Select), cât şi la magistrala de comandă şi control, prin terminalele RESET, RD (= Read), WR (= Write) .

Conectarea interfeţei PPI 8255 cu perifericul deservit, pentru realizarea de transferuri handshaking, se face prin trei circuite numite PORTURI, notate PA, PB, PC, fiecare port fiind prevăzut cu opt terminale de conectare la periferic, notate PA0 .. PA7, PB0 .. PB7 şi respectiv PC0 .. PC7. Un port reprezintă un canal de comunicaţie cu echipamentul periferic deservit, conectarea fiecărui canal la magistrala de date a sistemului facându-se prin multiplexare. Existenţa mai multor canale de comunicaţie a fost impusă de faptul că în multe aplicaţii existenţa unui singur canal de comunicaţie nu este suficientă.

Spre deosebire de porturile PA şi PB, portul PC este împărţit în două subporturi, fiecare din câte patru linii de comunicaţie, unul, notat PC4-7, corespunzător celor patru biţi de pondere maximă PC4 .. PC7 şi celălalt, notat PC0-3, corespunzător celor patru biţi de pondere minimă PC0 .. PC3.

Prin porturile sale PA, PB, PC, interfaţa PPI 8255 poate comunica cu perifericul deservit în trei moduri diferite, numite Mod 0, Mod 1, Mod 2. Programarea modului de comunicare cu perifericul deservit al fiecărui canal de comunicaţie al interfeţei se face printr-un cuvânt de comandă care se înscrie în registrul de comandă al interfeţei.

Cuvântul de comandă o dată înscris în registrul de comandă al interfeţei , determină prin circuitul interfeţei numit Grup A de control (= Group A Control) funcţionarea porturilor PA şi PC4-7, iar prin circuitul de interfaţă notat Grup B de control (= Group B Control) determină funcţionarea porturilor PB şi PC 0-3.

Transferul datelor în interiorul interfeţei PPI 8255 se face prin liniile unei magistrale interne de date (=Internal Data Bus) la care sunt conectate registrul tampon de date, grupurile A şi B de control şi porturile PA, PB, PC = PC0-3 + PC4-7.

În interfaţa PPI 8255, microprocesorul va trebui sa selecteze porturile PA, PB, PC pentru transfer de date şi registrul de comandă pentru programarea modului de funcţionare al fiecărui canal de comunicaţie. Prin blocul de control logic scriere / citire, microprocesorul poate comanda scrierea sau citirea unui octet cu porturile PA, PB, PC sau doar scrierea unor octeţi în registrul de comandă al interfeţei. Citirea conţinutului registrului de comandă al interfeţei nu a fost implementată deoarece conţinutul acestui registru nu poate fi modificat decât de microprocesor printr-o instrucţiune gestionată de programator. Selectarea celor patru locaţii PA, PB, PC şi registrul de comandă este realizată de microprocesor prin terminalele de adresare ale interfeţei notate A0, A1, care, obişnuit, se conectează la liniile cu aceleaşi notaţii ale magistralei de adrese a sistemului, iar scrierea sau citirea locaţiei selectate din interfaţă este comandată de microprocesor prin terminalele WR şi respectiv RD , conectate la magistrala de comandă şi control pe liniile notate IOW (= Input / Output Write) şi respectiv IOR (= Input / Output Read) dacă PPI 8255 este tratată ca circuit de interfaţă, ori pe liniile notate MEMW (= Memory Write) şi respectiv MEMR (= Memory Read) dacă PPI 8255 este tratat ca circuit de memorie.

În tabelul 7.1 sunt date stările logice pentru semnalele de la terminalele RD , WR , A0 şi A1 ale interfeţei, prin care se realizează scrierea şi citirea fiecăreia din cele patru locaţii ale interfeţei PPI 8255.

În vederea efectuării unui transfer cu oricare din cele patru locaţii ale interfeţei PPI

Page 105: Curs Asm 2Curs-ASM014

7-4

8255, trebuie selectată interfaţa prin starea logică 0 aplicată terminalului CS , în lipsa selecţiei (CS = 1) terminalele de date D0 .. D7 ale interfeţei trecând în înaltă impedanţă.

Într-un sistem cu microprocesor Intel 8080 sau Zilog Z80 adresarea locaţiilor de intrare / ieşire făcându-se prin numere de adrese din 8 biţi, transferate pe liniile A0 .. A7 ale magistralei de adrese a sistemului, rezultă că pot fi adresate un număr de maxim 256 locaţii de intrare / ieşire dispuse în diferite circuite de interfaţă.

Tabelul 7.1 Semnal citire

Semnal scriere

Semnale adresare

RD WR A1 A0

Port adresat

Operaţie efectuată în portul adresat

1 0 Scriere în PA 0 1

0 0 PA Citire din PA

1 0 Scriere în PB 0 1

0 1 PB Citire din PB

1 0 Scriere în PC 0 1

1 0 PC Citire din PC

1 0 1 1 Scriere în Registrul de comandă 0 1 1 1

Registru de comandă Combinaţie neoperaţională

Conectarea circuitului PPI 8255 ca interfaţă de intrare / ieşire într-un sistem cu

microprocesor Intel 8080 este exemplificată în fig.7.2.

Fig.7.2 Conectarea Interfeţei PPI 8255 într-un sistem cu microprocesor Intel 8080 Printr-un canal de comunicaţie creat cu interfaţa PPI 8255 trebuie însă să se

transfere simultan atât cei opt biţi ai datei, cât şi semnalele de sincronizare necesare într-un transfer handshaking, un canal de comunicaţie fiind format dintr-un port pentru transferul datei şi din biţi ai altui port pentru transferul semnalelor de sincronizare. Prin interfaţa PPI 8255, ale cărei porturi PA şi PB nu pot fi folosite decât în transferul de date , se pot crea două canale de comunicaţie pentru transferuri handshaking, un canal de comunicaţie fiind format din portul PA pentru date şi portul PC4-7 pentru semnale de sincronizare, iar alt canal de comunicaţie fiind format din portul PB pentru date şi portul

D0 .. D7

IOR

IOW RESET

A1

A0

A2, A3 CS

D0 ..D7

A0

A1 RESET

PA

PB

PC

PPI 8255

PA0 .. PA7

PB0 .. PB7

PC0 .. PC7

RD

WR

Page 106: Curs Asm 2Curs-ASM014

7-5

PC0-3 pentru semnale de sincronizare. În cazurile în care transferul de date cu perifericul deservit nu necesită semnale de

sincronizare, toate cele trei porturi ale interfeţei paralele PPI 8255 (PA, PB, PC = PC0-3 + PC4-7) pot fi utilizate în transferuri de date, prin porturile PA şi PB realizându-se câte un canal de opt biţi, în timp ce prin portul PC putându-se realiza fie un canal de opt biţi, fie două canale din câte patru biţi prin subporturile PC0-3, PC4-7.

D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 = octet de comandă de prescriere

D7 = 0 = starea logică 0 semnifică un octett de comandă de prescriere D6 / D5 / D4 = 0 / 0 / 0 = biţi nefolosiţi D0 = conţine starea logică a bitului de înscris D3 / D2 / D1 = indică în cod binar natural rangul bitului de înscris din portul PC:

D3 D2 D1 Bitul de înscris

0 0 0 PC0 0 0 1 PC1 0 1 0 PC2 0 1 1 PC3 1 0 0 PC4 1 0 1 PC5 1 1 0 PC6 1 1 1 PC7

Fig.7.3 Structura unui octet de comandă de prescriere

D7 D6 D5 D4 D3 D2 D1 D0 1 = octet de comandă de mod

D7 = 1 = starea logică 1 semnifică un octet de comandă de mod Comandă Group A Control D6 / D5 = codifică modul de lucru pentru porturile PA şi PC4-7:

D6 D5 Modul de lucru

0 0 Mod 0 0 1 Mod 1 1 ∅ Mod 2

D4 = codifică sensul de transfer al portului PA: 1 = port de intrare, 0 = port de ieşire D3 = codifică sensul de transfer al portului PC4-7: 1 = port de intrare, 0 = port de ieşire Comandă Group B Control D2 = codifică modul de lucru pentru porturile PB şi PC0-3: 0 = Mod 0, 1 = Mod 1 D1 = codifică sensul de transfer al portului PB: 1 = port de intrare, 0 = port de ieşire D0 = codifică sensul de transfer al portului PC0-3: 1 = port de intrare, 0 = port de ieşire

Fig.7.4 Structura unui octet de comandă de mod

Pentru interfaţa PPI 8255, funcţionarea unui port folosit în transferul de date unidirecţional (fie doar pe intrare de date, fie doar pe ieşire de date) fără semnale de

Page 107: Curs Asm 2Curs-ASM014

7-6

sincronizare este definită ca MOD 0, funcţionarea unui port într-un canal de comunicaţie unidirecţional (fie doar pe intrare de date, fie doar pe ieşire de date) cu semnale de sincronizare este definită ca Mod 1, iar funcţionarea unui port într-un canal de comunicaţie bidirecţional (când pe intrare, când pe ieşire, în funcţie de necesitatea aplicaţiei) cu semnale de sincronizare este definit ca Mod 2. În Mod 0 pot funcţiona toate porturile PA, PB, PC = PC0-3 + PC4-7, în Mod 1 pot funcţiona doar porturile PA şi PB, iar în Mod 2 poate funcţiona doar portul PA.

Cu portul PA funcţionând în Mod 2, când întreg portul PC este utilizat pentru transferul de semnale de sincronizare doar pentru acest canal de comunicaţie, ce necesită semnale de sincronizare atât pentru emisie, cât şi pentru recepţie, portul PB poate fi programat doar în Mod 0.

Înaintea efectuării unui transfer de date dintre interfaţa PPI 8255 şi perifericul deservit, trebuie programate grupurile de control A şi B în vederea stabilirii modului de lucru, cât şi a funcţiei de emiţător sau receptor pentru fiecare din porturile PA, PB, PC0-3, PC4-7, porturile PA şi PC4-7 fiind pilotate de Grupul A de control, iar porturile PB şi PC0-3 fiind pilotate de Grupul B de control. Programarea funcţionării grupurilor de control A şi B se realizează prin scrierea în registrul de comandă al a unui cuvânt de comandă pentru definirea modului de funcţionare, numit cuvânt de mod.

În transferurile în care portul PC este destinat transferului semnalelor de sincronizare, numărul semnalelor de sincronizare fiind mai mic decât numărul de linii ale portului, liniile rămase disponibile sunt utilizate în transferul stărilor logice a unor biţi, prevăzându-se în acest scop posibilitatea înscrierii separate a fiecărui bit din portul PC prin folosirea unui cuvânt de comandă numit cuvânt de prescriere.

Cele două cuvinte de comandă, de mod şi de prescriere, sunt deosebite în interfaţă prin bitul de rang 7, ce este 0 logic într-un cuvânt de prescriere şi 1 logic într-un cuvânt de mod. Semnificaţiile biţilor celor două tipuri de cuvinte de comandă, de prescriere şi de mod, sunt prezentate în fig.7.3 şi respectiv fig.7.4.

La efectuarea cu un periferic de transferuri handshaking prin cel puţin un canal de comunicaţie, semnalele de sincronizare fiind transferate printr-o parte din biţii portului PC, fiecare din porturile PC0-3 şi PC4-7 va fi programat pe ieşire de date (= emiţător), sau pe intrare de date (= receptor) după sensul de transfer al biţilor rămaşi disponibili.

În Mod 0, numit şi mod de bază intrare / ieşire, nefiind necesare semnale de

sincronizare toate porturile interfeţei PPI 8255 pot fi folosite în transferul de date cu perifericul deservit, fiecare din porturile PA, PB, PC0-3, PC4-7 fiind programat după necesitate fie pe ieşire de date, fie pe intrare de date. Dacă toate porturile interfeţei (PA, PB, PC0-3, PC4-7) ar fi programate în mod 0, ar exista 16 configuraţii posibile de comunicare cu perifericul deservit, pentru fiecare din cele patru porturi fiind posibile două sensuri de transfer (de intrare şi de ieşire), una din aceste configuraţii fiind prezentată în fig.7.5, însoţită de octetul de mod prin care se programează.

În fig.7.6 s-au reprezentat diagramele de semnale pentru operaţiile de citire (= intrare) şi scriere (= ieşire) a unei date cu un port al interfeţei programat în mod 0, la trasarea cărora s-a avut în vedere că o dată de emis este memorată în port, în timp ce o dată de recepţionat de la perifericul deservit neputând fi memorată pentru că nu există semnale de comandă handshaking, va trebui menţinută la intrarea portului până la citirea sa de către microprocesor.

În Mod 1, pot funcţiona porturile PA şi PB ale interfeţei PPI 8255, transferul datelor

prin fiecare din aceste porturi necesitând câte trei semnale de sincronizare transferate pentru portul PA prin trei biţi ai portului PC4-7, iar pentru portul PB prin trei biţi ai portului PC0-3. Cei doi biţi ai portului PC neimplicaţi în transferul de semnale de sincronizare pot fi utilizaţi în transferuri de intrare sau de ieşire pe bit. Un canal de comunicaţie folosind un

Page 108: Curs Asm 2Curs-ASM014

7-7

port programat în mod 1 va conţine 11 linii (trasee), dintre care 8 pentru transferul de date, iar 3 pentru transferul semnalelor de sincronizare asociate.

Fig.7.5 Configuraţie pentru PPI 8255 cu porturi în Mod 0

Fig.7.6 – Diagrame de semnale la funcţionare în Mod 0 a interfeţei PPI 8255

Dacă doar unul din porturile PA, PB este utilizat în mod 1 pentru un canal de

comunicaţie din 11 linii, restul de 13 linii rămase din celelalte porturi pot fi configurate în mod 0, iar dacă ambele porturi PA şi PB sunt utilizate în mod 1 pentru două canale de comunicare, fiecare din câte 11 linii, cei doi biţi ai portului PC, rămaşi disponibili pot fi utilizaţi în transferuri pe bit, în transferul de ieşire pe bit folosindu-se cuvinte de prescriere.

Semnalele de sincronizare folosite de porturile PA şi PB la funcţionarea în mod 1 sunt reprezentate în tabelul 7.2 unde biţii rămaşi disponibili pentru transferuri pe bit sunt notaţi prin I / O (= Input / Output).

Semnalele de sincronizare dintr-un canal de comunicare realizat cu un port funcţionând în mod 1 pe intrare de date (ca receptor), au următoarele semnificaţii:

Address Bus

Control Bus

Data Bus

RESET,RD , WR D0 .. D7 CS ,A0,A1 PPI 8255

PA PC PB

PA0 .. PA7 PC4-7 PC0-3 PB0 .. PB7

Octetul de mod : 1 / 0 / 0 / 0 / 0 / 0 / 0 / 1

A1, A0,CS

Dată de recepţionat

RD

D0 .. D7 (Data Bus)

D0 .. D7 (Data Bus)

WR

Dată în port emisie

A) Receţia în Mod 0 B) Emisia în Mod 0

Page 109: Curs Asm 2Curs-ASM014

7-8

- ASTB , BSTB (STB = Strobe) = semnale emise de periferic prin care se comandă memorarea în portul de recepţie (= de intrare) a datei aplicate la intrarea sa de către periferic;

- AIBF , BIBF (IBF = Input Buffer) = semnale emise de interfaţă către perifericul deservit ce semnifică faptul că portul de recepţie conţine o dată de intrare nepreluată încă de către microprocesor;

- AINTR , BINTR (INTR = Interrupt) = semnale emise de interfaţă către microprocesor când o nouă dată de recepţionat a fost înscrisă în portul de intrare printr-o comandă STB =0, prin care se solicită o întrerupere microprocesorului pentru citirea datei din portul de recepţie.

Semnalele de sincronizare dintr-un canal de comunicare realizat cu un port

funcţionând în mod 1 pe ieşire de date (ca emiţător) , au următoarele semnificaţii: - AOBF , BOBF (OBF = Output Buffer) = semnale emise de interfaţă către periferic

ce semnifică faptul că în portul de ieşire s-a înscris o dată de emis; - AACK , BACK (ACK = Acknowledge) = semnalul emis de periferic către interfaţă,

semnificând că portul de emisie a fost eliberat prin citirea sa de către periferic; - AINTR , BINTR (INTR = Interrupt) = semnale emise de interfaţă către

microprocesor, sub acţiunea semnalului ACK = 0 primit de la perifericul deservit, solicitându-se o întrerupere microprocesorului pentru scrierea în portul de emisie a următoarei date de emis.

Tabelul 7.2 Port de date

Semnale la recepţie

Semnale la emisie

Bit pentru transmitere

BINTR BINTR PC0

BIBF BOBF PC1 PB

BSTB BACK PC2

AINTR AINTR PC3

ASTB I / O PC4

AIBF I / O PC5

I / O AACK PC6

PA

I / O AOBF PC7

O configuraţie de conectare la periferice prin două canale de comunicare, implicând

porturile PA şi PB în mod 1, este reprezentată în fig.7.7, însoţită de octetul de mod prin care se programează, iar diagramele semnalelor de sincronizare la recepţia şi emisia de date printr-un port funcţionând în mod 1 sunt date în fig.7.8.

La recepţia de date, data de recepţionat este înscrisă în portul de recepţie prin

comanda STB = 0 aplicată de periferic interfeţei. Sub acţiunea frontului căzător al comenzii STB = 0, interfaţa emite perifericului semnalul IBF = 1 până la citirea datei recepţionate, iar prin frontul crescător al comenzii STB = 0 interfaţa emite către microprocesor semnalul INTR = 1 de cerere a unei întreruperi în vederea preluării datei recepţionate. La acceptarea întreruperii solicitate de interfaţă prin comanda INTR = 1, microprocesorul trece în subprogramul de întrerupere prin care, pe durata selecţiei

Page 110: Curs Asm 2Curs-ASM014

7-9

interfeţei cu semnalul CS = 1, se citeşte data recepţionată prin comanda RD = 0 al cărei front crescător determină INTR = 0 , pentru anularea cererii de întrerupere deja deservite, iar prin frontul crescător determinând IBF = 0, pentru a permite perifericului să înscrie în portul de recepţie următoarea dată de recepţionat .

Fig.7.7 Configuraţie cu două porturi în Mod 1

Fig.7.8 Diagrame de semnale la funcţionarea în Mod 1 a interfeţei PPI 8255

La emisia de date, acceptând cererea de întrerupere INTR = 1 solicitată de interfaţă,

microprocesorul trece în subprogramul de întrerupere prin care, pe durata selecţiei interfeţei cu semnalul CS = 1, se înscrie în portul de ieşire data de emis prin comanda WR = 0 al cărei front căzător determină INTR = 0, pentru anularea cererii de întrerupere

Address Bus

Control Bus

Data Bus

RESET,RD , WR D0 .. D7 CS ,A0,A1 PPI 8255

PA PC7 ................................................. PC0 PB

PA0 .. PA7

I/O I/O AIBF AINTR BOBF

ASTB BACK BINTR PB0 .. PB7

Octetul de mod : 1 / 0 / 1 / 1 / 0 / 1 / 0 / ∅∅∅∅

Dată în port emisie

A) Receţia în Mod 1 B) Emisia în Mod 1

Dată de recepţionat

RD

D0 .. D7 (Data Bus)

INTR

IBF

STB

Dată de emis D0 .. D7 (Data Bus)

INTR

WR

OBF

ACK

Page 111: Curs Asm 2Curs-ASM014

7-10

deja deservite, iar prin frontul crescător determinând interfaţa să emită perifericului semnalul OBF = 0 ce informează perifericul că în portul de ieşire se află data emisă ce trebuie preluată. Perifericul, după citirea datei din portul de ieşire, aplică interfeţei semnalul ACK = 1 al cărui front crescător determină interfaţa să emită OBF = 1, pentru a indica faptul că portul de ieşire este gol, iar frontul crescător determinând prin INTR = 1 o nouă cerere de întrerupere solicitată microprocesorului pentru a înscrie în portul de ieşire următoarea dată de emis către perifericul deservit.

În Mod 2, poate funcţiona numai portul PA asigurând o comunicare bidirecţională a

datelor cu un periferic, portul PA funcţionând ca emiţător sau ca receptor după necesitatea aplicaţiei. La funcţionarea în mod 2, portului PA i se asociază 5 biţi ai portului PC pentru transferul semnalelor handshaking de sincronizare atât pentru emisie, cât şi pentru recepţie, semnale ce au aceleaşi semnificaţii ca la mod 1, dar emise pe biţii portului PC indicaţi în tabelul 7.3, în care biţii portului PC rămaşi disponibili pentru transferuri pe bit, sunt notaţi prin I / O (= Input / Output).

Tabelul 7.3

Port Semnale în Mod 2

Bit pentru transmitere

I / O PC0, PC1, PC2

AINTR PC3

ASTB PC4

AIBF PC5

AACK PC6

PA

AOBF PC7

O configuraţie de funcţionare a interfeţei PPI 8255 cu portul PA programat în mod 2

este prezentată în fig.7.9, în care se indică şi octetul de mod corespunzător.

Fig.7.9 Configuraţie de funcţionare a interfeţei PPI 8255 cu portul PA în Mod 2

Address Bus

Control Bus

Data Bus

RESET,RD , WR D0 .. D7 CS ,A0,A1 PPI 8255

PA PC0................................................. PC7 PB

PA0 .. PA7

I/O I/O I/O ASTB AACK

AINTR AIBF AOBF

PB0 .. PB7

Octetul de mod : 1 / 1 / ∅∅∅∅ / ∅∅∅∅ / ∅∅∅∅ / 0 / 0 / 1

Page 112: Curs Asm 2Curs-ASM014

7-11

7.3. CIRCUITE DE TEMPORIZARE PROGRAMABILE 7.3.1. GENERALITĂŢI În numeroase aplicaţii cu un sistem cu microprocesor se comandă un element de

execuţie lent, cum sunt de exemplu motoarele electrice. Pentru comanda acestor elemente de acţionare, este necesară aplicarea unor comenzi la intervale de timp bine determinate, apărând necesitatea măsurării precise a unor intervale de timp. Măsurarea precisă a intervalelor de timp poate fi realizată şi prin program, metodă ce nu este însă eficientă deoarece, pe durata măsurării intervalelor de timp, microprocesorul nu poate efectua alte sarcini, viteza sa de operare fiind astfel cu mult redusă.

Aceste considerente au determinat realizarea unor circuite de interfaţă specializate ce să preia sarcina de măsurare a intervalelor de timp, numite generic interfeţe programabile de temporizare. Denumirea acestor circuite de interfaţă nu este standardizată şi depinde de funcţiile complexe de temporizare implementate.

7.3.2. INTERFAŢA PROGRAMABILĂ DE TEMPORIZARE PIT 8253 Cicuitul de interfaţă PIT 8253 (PIT = Programmable Interval Timer) , a cărui

arhitectură internă este prezentată în fig.7.10, este organizat sub forma a trei numărătoare independente din câte 16 biţi, fiecare din ele fiind prevazut cu registre şi o logică de comandă necesare în vederea comunicării cu microprocesorul şi cu perifericul (= aplicaţia) deservit. Fiecare numărător este conectat la aplicaţie printr-un terminal de tact notat CLK (=Clock) , un terminal de comandă notat G (= Gate) şi unul de ieşire notat OUT.

Fig.7.10 Arhitectura internă a interfeţei PIT 8253

Un numărător va număra descrescător, pornind de la numărul din 16 biţi în care a

fost iniţializat, fronturile căzătoare ale impulsurilor ce i se aplică la terminalul CLK,

Data Bus

Buffer

Read Write Logic

Control Word

Register and

Mode Selection

Counter 0

Counter 1

Counter 2

D0 .. D7

Internal Data Bus

RD

CS

WR

A0

A1

CLK0

CLK1

CLK2

G0

G1

G2

OUT0

OUT1

OUT2 PIT 8253

Page 113: Curs Asm 2Curs-ASM014

7-12

numărarea putând fi programată să se efectueze în cod binar, sau în cod BCD. Valoarea

maximă de numărare este de 162 în cod binar şi de 410 în cod BCD. Pentru cele trei numărătoare ale circuitului PIT 8253 s-au prevăzut 6 moduri de lucru, prin fiecare din aceste moduri de lucru asigurându-se la terminalul de ieşire OUT al fiecărui numărător forma de undă corespunzătoare modului în care a fost programat.

Înscrierea şi citirea numărătoarelor, sau doar înscrierea registrelor de comandă, sunt comandate de microprocesor prin intermediul blocului logic de citire - scriere (Read – Write Logic) conectat prin terminalele RD (=Read) şi WR (= Write) la magistrala de comandă şi control (= Control Bus) , iar prin terminalele A0, A1, CS (= Chip Select) la magistrala de adrese (= Address Bus). PIT 8253 se conectează la magistrala de date (= =Data Bus) prin terminalele D0 ... D7 ale tamponului de date (= Data Bus Buffer) şi conţine o magistrală internă de date (= Internal Data Bus) la care se conectează toate blocurile din componenţa sa a căror funcţionare presupune un transfer de date.

Programarea funcţionării fiecărui numărător se face separat prin înscrierea în registrul cuvântului de control (=Control Word Register) a câte unui octet de comandă, prin care se specifică numărătorul ce se programează, modul de funcţionare, cât şi codul, binar sau BCD, în care se va face numărarea.

Din exterior se poate interveni în funcţionarea unui numărător prin terminalul său de comandă G (= GATE). Încărcarea unui numărător are loc sub acţiunea primului impuls complet CLK ce urmează unei comenzi de sriere WR sau uneia de iniţializare G.

În vederea efectuării unui transfer de date cu un numărător sau cu registrul de comandă, întâi se va adresa locaţia implicată-n transfer prin terminalele A1 şi A0, după care, pe durata comenzii RD sau WR ce urmează, se va selecta interfaţa PIT 8253 prin terminalul său CS .

Modul de conectare, ca circuit de intrare / ieşire, a interfeţei PIT 8253 într-un sistem cu microprocesor Intel 8080, este exemplificat în fig.7.11, interfaţa fiind selectată liniar prin bitul A2 = 1.

Operaţiile ce se pot efectua cu locaţiile din circuitul PIT 8253 sunt prezentate în Tabelul 7.4.

Tabelul 7.4

RD WR A1 A0 Operaţie Circuitul selectat 1 0 Scriere 0 1

0 0 Citire

Numărător 0 (Counter 0)

1 0 Scriere 0 1

0 1 Citire

Numărător 1 (Counter 1)

1 0 Scriere 0 1

1 0 Citire

Numărător 2 (Counter 2)

1 0 1 1 Scriere Regitrul de comandă 0 1 1 1 Combinaţie neoperaţională

Deoarece conţinutul registrului de comandă al interfeţei PIT8253 nu poate fi modificat

de aplicaţie, ci numai prin program, nu s-a prevăzut posibilitatea citirii sale. Fiecare din numărătoarele interfeţei PIT 8253, în vederea funcţionării trebuie

programat prin câte un octet de comandă preluat prin intermediul registrului de comandă al interfeţei. Funcţionarea unui numărător o dată programată, va fi menţinută până la o nouă reprogramare cu alt octet de comandă. Printr-un octet de comandă se va specifica numărătorul de programat, unul din cele 6 moduri de funcţionare prevăzute pentru un numărător, codul binar sau BCD în care se va efectua numărarea, precum şi tehnica de citire şi scriere a numărătorului programat.

Page 114: Curs Asm 2Curs-ASM014

7-13

Fig.7.11 Conectarea interfeţei Intel 8253 într-un sistem cu microprocesor Intel 8080 Interfaţa PIT 8253 are posibilitatea scrierii şi citirii dintr-un numărător cu funcţionarea

întreruptă, atât a ambilor octeţi, cât şi doar a unuia din octeţi (fie cel de pondere maximă, fie cel de pondere minimă), precum şi posibilitatea salvării conţinutului unui numărător în funcţiune într-un registru temporar (=Latch), special destinat acestui scop, de unde ulterior se va face citirea folosind un octet de comandă specific. Fiecare din cele două metode de citire a conţinutului unui numărător, prin blocarea numărării sau prin salvare în registrul latch, are avantajele şi dezavantajele sale, rămânând la aprecierea programatorului care dintre metode este mai adecvată unei aplicaţii concrete. Prin utilizarea registrului latch citirea reprezintă o stare deja trecută a numărătorului, iar la citirea prin blocarea funcţionării numărătorului se afectează aplicaţia controlată.

Octetul de comandă prin care se programează funcţionarea unui numărător are următoarea structură:

D7 D6 D5 D4 D3 D2 D1 D0 = structura octetului de comandă

- D7 / D6 = biţi de codificare a numărătorului de programat :

D7 D6 Numărător selectat 0 0 Numărător 0 0 1 Numărător 1 1 0 Numărător 2 1 1 Combinaţie neoperaţională

- D5 / D4 = biţi de codificare a modului de scriere sau citie a numărătorului specificat

prin biţii D7 / D6:

D0.. D7

D0.. D7

DB0.. DB7

D0.. D7

Intel 8080 Intel 8228 PIT 8253

CLK0 G0 OUT0

CLK1 G1 OUT1

CLK2 G2 OUT2

RD WR

IOR IOW

CS A2 A0 A1

A0 A1

DBIN HLDA WR

STSTB

DBIN HLDA WR

Page 115: Curs Asm 2Curs-ASM014

7-14

D5 D4 Modul de scriere şi de citire a numărătorului specificat prin biţii D7 / D6 0 0 Salvare numărător în registrul Latch pentru citire ulterioară 0 1 Se citeşte sau se scrie doar octetul minim , cel maxim fiind nul 1 0 Se citeşte sau se scrie doar octetul maxim , cel minim fiind nul 1 1 Se citeşte sau se scrie întâi octetul minim şi apoi cel maxim

- D3 / D2 / D1 = biţi de codificare a celor 6 moduri de funcţionare ale unui

numărător:

D3 D2 D1 Denumire mod

Descriere mod

0 0 0 Mod 0 Întrerupere la sfârşitul numărării 0 0 1 Mod 1 Monostabil programabil ∅ 1 0 Mod 2 Generator de impulsuri ∅ 1 1 Mod 3 Generator de semnal rectangular 1 0 0 Mod 4 Eşantionare declanşată soft 1 0 1 Mod 5 Eşantionare declanşată hard

- D0 = bit de codificare a codului de numărare: 1 = cod BCD, 0 = cod BINAR Mod 0 Modul 0 este numit întrerupere la sfârşitul numărării (= Interrupt on Terminal Count). Un numărător încărcat cu numărul N, din momentul iniţializării în mod 0, îşi trece

ieşirea OUT în starea logică 0, decrementându-se la fiecare front căzător al tactului aplicat la terminalul CLK, iar la anularea conţinutului trecându-şi ieşirea OUT în starea logică 1 şi continuând numărarea. O nouă declanşare a unui numărător în mod 0 are loc prin reîncărcarea numărătorului sau prin reprogramarea sa în mod 0.

Pentru un numărător încărcat nu numărul N şi primind pe terminalul CLK impulsuri de perioadă 0T , durata temporizării este dată de relaţia:

T = N ⋅ 0T . Un numărător programat în mod 0 este blocat cât timp GATE = 0 şi pe durata unei

noi înscrieri, după care numărarea se declanşează pentru noua valoare înscrisă. Formele de undă corespunzătoare unui numărător funcţionând în mod 0 sunt date în

fig.7.12.

Fig.7.12 – Forme de undă la funcţionarea în mod 0

CLK = Clock

WR

OUT (mod 0 şi Write N=4)

GATE

OUT (N=5 şi Write mod 0) 5 4 3 2 1 0

T = N ⋅ 0T

4 3 2 1 0

0T

Page 116: Curs Asm 2Curs-ASM014

7-15

Mod 1 Modul 1 este numit monostabil programabil (= Programmable One-Short). Funcţionarea unui numărător programat în mod 1, se declanşează cu iniţializarea sa

în ultima valoare programată, prin aplicarea unui front crescător pe terminalul de comandă GATE, urmat de două fronturi ale tactului aplicat la terminalul CLK, dintre care primul crescător, iar al doilea căzător, după care numărătorul este decrementat la fiecare front căzător al semnalului CLK până la anularea sa, pe o durată

T = N ⋅ 0T ,

(N fiind numărul încărcat în numărător, iar 0T fiind perioada impulsurilor aplicate la terminalul CLK al numărătorului) în care emite semnalul OUT = 0.

Pe durata funcţionării unui numărător în mod 1, un front crescător pe terminalul de comandă GATE determină relansarea numărării de la ultima valoare N înscrisă, indiferent dacă numărarea s-a terminat sau nu, iar o nouă valoare N înscrisă în numărător pe timpul funcţionării sale, nu va afecta durata monoimpulsului în curs, fiind luată în consideraţie la următoarea declanşare pe terminalul GATE.

Formele de undă pentru un numărător funcţionând în mod 1 sunt date în fig.7.13.

Fig.7.13 Formele de undă la funcţionarea unui numărător în mod 1 Mod 2 Modul 2 este definit ca generator de impulsuri (= Rate Generator) formele de undă

aferente funcţionării unui numărător programat în mod 2 fiind prezentate în fig.7.14.

Fig.7.14 Formele de undă la funcţionarea unui numărător în mod 2

4 3 2 1 0 3 2 1 4 3 2 1 0

CLK = Clock

WR ( n = 4 )

OUT

OUT

GATE

4 3 2 1 0 3 2 1 0

( n = 3 )

0T

T = N ⋅ 0T

CLK = Clock

WR N=4 N=2

GATE

OUT 3 2 3 2 1 0 2 1 0

0T

T=N ⋅ 0T

Page 117: Curs Asm 2Curs-ASM014

7-16

După iniţializarea în mod 2 cu numărul N, un numărător, căruia i se aplică la terminalul CLK un semnal de perioadă 0T , emite la ieşirea sa OUT un semnal cu perioada

T = N ⋅ 0T ,

care se încheie cu un impuls în 0 logic de durată 0T , funcţionarea fiind validată prin comanda GATE = 1 şi inhibată prin comanda GATE = 0 când OUT=1.

Frontul crescător al unui impuls aplicat pe terminalul de comandă GATE determină reiniţializarea numărătorului cu ultima valoare N programată, ce va fi luată în consideraţie în perioada următoare celei în curs. Astfel, semnalul GATE fiind un semnal de sincronizare.

Reînscrierea unui numărător pe durata funcţionării sale va fi luată în consideraţie în următoarea perioadă.

Mod 3 Modul 3 este definit ca generator de semnal rectangular (= Square Wave Rate

Generator), formele de undă aferente fiind date în fig.7.15.

Fig.7.15 – Formele de undă la funcţionarea în mod 3 a unui numărător

Modul 3 este similar cu modul 2, de care se deosebeşte însă prin aceea că forma de undă generată la ieşirea OUT a unui numărător, programat în mod 3 şi având pe terminalul CLK un semnal de perioadă 0T , are factor de umplere de 1/2 la încărcarea numărătorului cu un număr N par, când:

T = iT + pT

iT = pT = 0T2N

,

în timp ce în cazul unui număr N impar, factorul de umplere al formei de undă generată respectă relaţiile:

T = iT + pT

iT = 0N 1

T2−

pT = 0N 1

T2+

.

Mod 4 Modul 4 este definit ca eşantionare declanşată soft (= Software Triggered Strobe). Un numărător, decrementat la fiecare front căzător al impulsurilor de perioadă 0T

OUT (N = 4)

CLK = Clock

OUT (N = 5) 4 3 2 1 0 4 3 2

4 3 2 1 0

5 4 3 2 1 0 5 5 4 3 2 1 0

iT pT 0T

T

Page 118: Curs Asm 2Curs-ASM014

7-17

aplicate pe intrarea de tact CLK, o dată iniţializat cu un număr N, în mod 4, va genera un singur impuls în starea logică 0 şi de durată 0T , după un interval

T = N ⋅ 0T , la anularea conţinutului său, dacă funcţionarea sa este validată prin semnalul GATE=1. Pe durata comenzii GATE=0 numărarea se inhibă. Generarea unui nou impuls de eşantionare se face printr-o nouă reînscriere a numărătorului folosit, adică prin soft.

În fig.7.16 se prezintă formele de undă corespunzătoare funcţionării unui numărător programat în mod 4.

Fig.7.16 Formele de undă pentru un numărător funcţionând în mod 4 Mod 5 Modul 5 este definit ca eşantionare declanşată hard (= Hardware Triggered Strobe) ,

formele de undă aferente fiind prezentate în fig.7.17.

Fig.7.17 Formele de undă aferente unui numărător programat în mod 5 Funcţionarea mod 5 unui numărător încărcat cu un număr N, este declanşată de

frontul crescător al semnalului GATE, numărătorul fiind decrementat la fiecare front căzător al impulsurilor de perioadă 0T aplicate pe intrarea de tact CLK şi după intervalul

T = N ⋅ 0T , la anularea conţinutului său, generând pe ieşirea OUT un singur impuls în starea logică 0 şi de durată 0T ,

CLK = Clock

WR 0T

GATE

(N=4)

4 3 2 1 0 OUT

T=N⋅ 0T

GATE

4 3 2 4 3 2 1 0

OUT

T=N⋅ 0T

2 1 0 3 2 1 0

CLK = Clock

WR

OUT

GATE

(N=3) 0T(N=2)

T=N⋅ 0T

Page 119: Curs Asm 2Curs-ASM014

7-18

Influenţa semnalului de comandă GATE în cele şase moduri de funcţionare ale unui numărător sunt prezentate sintetic în Tabelul 7.5.

Tabelul 7.5

Stare semnal GATE Mod

GATE = 0 GATE = 0ր1 (= front crescător) GATE = 1 Mod 0 Inhibare numărare - Validare numărare

Mod 1 - 1) Iniţializare numărător 2) OUT = 0 după următorul tact -

Mod 2 1) Inhibare numărare 2) OUT = 1

Iniţializare numărător Validare numărare

Mod 3 1) Inhibare numărare 2) OUT = 1

Iniţializare numărător Validare numărare

Mod 4 Inhibarere numărare - Validare numărare Mod 5 - Iniţializare numărător -

Page 120: Curs Asm 2Curs-ASM014

8-1

8. MEMORIA UNUI SISTEM 8.1. GENERALITĂŢI Un sistem cu microprocesor, numit şi sistem cu procesarea (=prelucrarea)

informaţiei, conţine un bloc de memorie cu rolul de păstrare a informaţiei codificate prin cuvintele binare cu care se operează în sistem, blocul de memorie fiind dat de ansamblul circuitelor de memorie prevăzute sistemului.

Un circuit de memorie conţine un număr de locaţii dispuse la intersecţiile dintre liniile şi coloanele unei matrice, fiecare locaţie fiind identificată şi adresată prin numărul său de ordine numit adresă, număr format în binar prin reunirea biţilor de codificare a numărului liniei, cu biţii de codificare a numărului coloanei locaţiei. Un circuit de memorie este caracterizat prin numărul maxim de biţi pe care-i poate memora, număr exprimat sub forma produsului dintre numărul de locaţii pe care le conţine şi numărul de biţi din care este formată o locaţie. Astfel, un circuit de memorie având capacitatea de

1024 × 4 biţi , conţine 1024 locaţii, fiecare locaţie având mărimea a 4 biţi.

Numărul de locaţii dintr-un circuit de memorie se exprimă şi în kilolocaţii, o kilolocaţie fiind definită şi notată astfel :

1 kilolocaţie def= 102 locaţii = 1024 locaţii

not= 1K.

Astfel, un circuit de memorie având capacitatea de 16K × 1 biţi,

conţine 16384 (=16 × 1024 = 16K) locaţii, fiecare locaţie fiind formată din câte 1(unu) bit, iar un circuit având capacitatea de

4K × 8 biţi, conţine 4096 (= 4 × 1024 = 4K) locaţii, fiecare locaţie fiind formată din câte 8(opt) biţi.

Memoria unui sistem cu microprocesor este organizată pe locaţii de 8(opt) biţi, ansamblul celor 8(opt) biţi memoraţi într-o locaţie, numit octet, fiind definit şi notat prin

1 octet def= 1 Byte

not= 1B.

Astfel, capacitatea memoriei unui sistem cu microprocesor este exprimată prin kiloocteţi :

1 kilooctet def=

102 octeţi = 1024 octeţi not= 1KB,

capacitatea maximă a memoriei unui sistem cu microprocresor operând pe cuvinte din 8(opt) biţi şi având 16 biţi de adresare fiind de

162 octeţi = 62 ⋅102 octeţi = 62 kiloocteţi = 64 kiloocteţi

not= 64KB.

Adresarea unei locaţii dintr-un circuit de memorie se face prin numărul său de ordine, aplicat, prin magistrala de adrese a sistemului, terminalelor de adresare ale circuitului. Capacitatea maximă în locaţii a unui circuit de memorie având n biţi de adresă, este de

n2 locaţii = numărul combinaţiilor posibile cu cei n biţi de adresare ai circuitului. Astfel, adresarea locaţiilor dintr-un circuit de memorie având capacitatea de

2048 × 4 biţi = 112 × 4 biţi (= 2⋅102 × 4 biţi = 2K × 4 biţi),

necesită 11 biţi de adresare, în timp ce un circuit de memorie având capacitatea de

16384 × 8 biţi = 142 × 8 biţi (= 42 ⋅102 × 8 biţi = 16K ×8 biţi = 16KB),

necesită 14 biţi pentru adresarea locaţiilor sale. Adresarea unei locaţii prin numărul său de adresă aplicat circuitului de memorie ce o

conţine, implică validarea liniei şi a coloanei la a căror intersecţie se află, prin decodarea numerelor de linie şi de coloană din componenţa adresei locaţiei, un circuit de memorie având un decodor de linie şi unul de coloană. O locaţie adresată se conectează cu toţi biţii la terminalele de date ale circuitului de memorie, în vederea efectuării unui transfer de tip

Page 121: Curs Asm 2Curs-ASM014

8-2

paralel, numărul de terminale de date prevăzute unui circuit de memorie fiind egal cu numărul de biţi din componenţa unei locaţii.

Un circuit de memorie dispune şi de un terminal de selecţie notat CS (= Chip Select) sau CE (= Chip Enable), pe durata selecţiei locaţia adresată fiind conectată la terminalele de date, iar în lipsa selecţiei terminalele de date fiind ţinute în starea de înaltă impedanţă, notată „Z”. Spre deosebire de circuitele de memorie ROM (=Read Only Memory) care pe durata selecţiei permit doar citirea locaţiei adresate, circuitele de memorie RAM (=Random Access Memory), ce permit atât scrierea, cât şi citirea locaţiei adresate, sunt prevăzute cu încă un terminal, notat WE (=Write Enable), prin care se comandă sensul de scriere ( WE =0) sau de citire ( WE =1 ) al transferului.

Pentru efectuarea unui transfer cu o locaţie dintr-un circuit al sistemului, adresa locaţiei se va aplica prin magistrala de adrese tuturor circuitelor din sistem, fiecare circuit validîndu-şi câte o locaţie, dar se va conecta la magistrala de date doar locaţia din circuitul selectat prin terminalul său de selecţie, selecţia fiind validată de semnalul de comandă a sensului de scriere sau de citire al transferului cu memoria.

Fig.8.1 Arhitectura internă a unui circuit de memorie ROM

Fig.8.2 Formarea unei zone de memorie ROM de 1K × 8 biţi

Arhitectura internă a unui circuit de memorie ROM cu o capacitatea de 1K × 4 biţi,

D0 .. D3

1k×4 Bits

CE A0 .. A10

D0 .. D3

1k×4 Bits

CE A0 .. A10

A0 .. A10 (=ADDRESS BUS)

D0 .. D7 (=DATA BUS)

D4 .. D7 D0 .. D3

1k×8 bits ROM

CHIP ENABLE

1K×4 bits Cell matrix

Data Bus

Buffer

. . .

.

.

.

Row Decoder

.

.

.

D2 . . .

.

.

.

Column Decoder

1

0

31

0

1

31

D0

D1

A9

A6

A5

A4

A1

A0

CS

D3

Page 122: Curs Asm 2Curs-ASM014

8-3

este prezentat în fig.8.1. Când memoria unui sistem cu microprocesor este constituită din circuite de memorie

cu locaţii din mai puţini biţi decât ai cuvintelor pe care se operează în sistem, fiecare locaţie a memoriei sistemului va fi formată din mai multe locaţii de circuit a căror adresare simultană cu acelaşi număr de adresă impune să fie situate în circuite de memorie diferite, conectate în paralel cu terminalele de adresare şi de selecţie, dar având terminalele de date conectate la biţi diferiţi ai magistralei de date a sistemului, situaţie exemplificată în fig.8.2.

Circuitele de memorie se împart în: memorii ROM (= Read Only Memory) şi memorii RAM (= Random Access Memory).

Memoriile ROM se mai numesc şi memorii moarte, rolul lor fiind de a memora programe datorită proprietăţii de a păstra nealterată informaţia conţinută la suprimarea tensiunilor de alimentare. O memorie ROM o dată înscrisă, ulterior nu poate fi decât citită. S-au realizat următoarele tipuri de memorii moarte: ROM (= Read Only Memory), PROM (= Programmable ROM), EPROM sau REPROM (= Reprogrammable ROM), EAROM (= Electrically Alterable ROM).

8.2. MEMORII ROM (Intel 8316A), PROM Într-o memorie ROM informaţia de înscris se programează prin mască, înaintea

ultimei operaţii prin care se metalizează interconexiunile dintre liniile şi coloanele matricei de memorie în funcţie de informaţia furnizată de beneficiar. Pentru o tehnologie MOS, în ultima etapă de realizare a memoriei ROM, interconexiunile corespunzătoare stărilor logice „1” se vor metaliza, în timp ce interconexiunile corespunzătoare stărilor logice „0” vor rămâne nemetalizate. Acest tip de memorie este cel mai productiv pentru producţia de serie mare.

Un exemplu de memorie ROM este circuitul Intel 8316A, având o capacitate de 2KB (= 16384 biţi) şi a cărui arhitectură internă este prezentată în fig.8.3.

Fig.8.3 Arhitectura internă a circuitului de memorie ROM, Intel 8316A

Address Buffers

Chip Select Decode

Output Buffers

X Decoder Y Decoder

16384 bits Cell matrix

Chip Select Input Buffers

Chip Select Prog

A0 A1 ………. . A6 A7 A8 A9 A10

D0 D1 …….. D7

0 1 ………….. . 127 0 1 ………….. . 15

A0 A1 ……………………… A10

CS0 CS2 CS1

CS

Page 123: Curs Asm 2Curs-ASM014

8-4

Circuitul Intel 8316A are locaţiile dispuse într-o matrice cu X = 128 linii şi Y = 16 coloane, adresa unei locaţii fiind aplicată circuitului cu numărul liniei pe terminalele de adresă notate A0, A1, .. , A6, iar cu numărul de coloană pe terminalele de adresă notate A7, A8, A9, A10.

Octetul din locaţia cu adresa aplicată la terminalele A0, A1, .. , A10 poate fi citit prin terminalele tamponului de ieşire (= Output Buffer) al circuitului, notate D0, D1, .. , D7, la care locaţia e conectată pe durata adresării, dar numai dacă circuitul de memorie este selectat.

Selecţia circuitului Intel 8316A se face prin validarea tamponului său de ieşire cu semnalul intern CS generat pe durata în care codul binar aplicat terminalelor de selecţie CS0, CS1, CS2 prevăzute circuitului, coincide cu cel programat în blocul circuitului notat CHIP SELECT PROG. În lipsa selecţiei, când codul de selecţie aplicat circuitului nu coincide cu cel programat în circuit, terminalele de date D0, D1, .. , D7 sunt trecute în starea de înaltă impedanţă, notată „Z”.

Citirea conţinutului unei locaţii adresate dintr-o memorie moartă, este realizată de microprocesor în următoarele etape :

- microprocesorul aplică adresa locaţiei de citit tuturor circuitelor din sistem, prin magistrala de adrese a sistemului;

- microprocesorul trece într-o stare de inactivitate, numită stare de aşteptare, timp de 100 .. 300 nsec, pentru a permite fiecărui circuit din sistem să-şi valideze prin decodificare locaţia ce corespunde adresei existentă la terminalele de adresă ale circuitului;

- pe durata selectării circuitului de memorie ce conţine locaţia adresată, data din locaţia adresată în circuit este copiată în locaţia de destinaţie, printr-un transfer de citire realizat prin magistrala de date a sistemului la care circuitul de memorie este conectat cu terminalele sale de date; semnalul de selecţie a unui circuit de memorie ROM este validat de comanda de citire a memoriei (MEMR la Intel 8080, sau MREQ la Zilog Z80);

- transferul se termină prin anularea comenzii de selecţie a circuitului de memorie, care astfel se deconectează de la magistrala de date prin trecerea în înaltă impedanţă a terminalelor sale de date.

Diagrama de semnale la citirea unei locaţii adresate din orice tip de memorie moartă este prezentată în fig.8.4.

Fig.8.4 Diagramă de semnale la citirea unei memorii moarte ROM Memoriile PROM (=Programmable ROM) sunt memorii ROM ce pot fi programate la

utilizator, fiind fabricate în două variante: cu fuzibil şi cu distrugerea joncţiunii. La memoriile PROM cu fuzibil, fiecare celulă de memorie este prevăzută cu un fuzibil

a cărui ardere se poate face la utilizator prin trenuri de impulsuri de curent de 0,1 .. 1A printr-o tehnică indicată de fabricant, fuzibilul ars trecând celula de memorie în starea logică complementară celei asigurată de starea intactă a fuzibilului.

La memoriile PROM cu distrugerea joncţiunii, fiecare celulă de memorie este conectată la reţeaua internă printr-o joncţiune suplimentară a cărei distrugere se face la

adresă locaţie A0 .. A15 (ADDRESS BUS)

CS (=0 când Intel8080 ZilogZ80MEMR = MREQ =0)

D0 .. D7 (DATA BUS)

citire dată citită

timp de acces (pentru decodare adresă)

Page 124: Curs Asm 2Curs-ASM014

8-5

utilizator prin impulsuri de curent ce declanşează regimul de avalanşă printr-o tehnică indicată de fabricant, o joncţiune trecută în conducţie prin distrugere stabilind celula de memorie în starea logică complementară celei asigurată prin starea intactă a joncţiunii ce introduce o întrerupere în circuit.

Memoriile ROM şi PROM au dezavantajul că informaţia memorată nu mai poate fi modificată ulterior.

8.3. MEMORII EPROM (Intel 2716), EAROM Memoria EPROM (=Reprogrammable ROM) permite ştergerea locaţiilor sale şi

înscrierea unei noi informaţii, ştergerea făcându-se prin expunerea circuitului de memorie, prevăzut cu o fereastră din cuarţ, la radiaţii ultraviolete timp de circa 15 minute, prin ştergere toate celulele de memorie fiind trecute în starea logică „1”. Înscrierea unei memorii EPROM se face cu o interfaţă numită „Programator de memorii EPROM”, iar o informaţie înscrisă se păstrează timp de circa 10 .. 15 ani.

O memorie EPROM are dezavantajul că permite doar aproximativ zece programări. Memoriile EPROM au la bază principiul porţii flotante, electrodul poartă al

tranzistorului MOS fiind practic izolat de substrat fiindcă nu are realizate contactele electrice. Pentru a reda conductibilitatea porţii, se injectează electroni, printr-un proces de avalanşă controlată, a căror sarcină restabilesc funcţionarea tranzistorului pe o durată de 10 .. 15 ani, datorită izolaţiei porţii.

Arhitectura internă a circuitului de memorie EPROM Intel 2716 este prezentată în fig.8.5, circuitul având o capacitate de 2KB (= 2K × 8 biţi).

Fig.8.5 Arhitectura internă a circuitului de memorie EPROM Intel 2716

Circuitul Intel 2716 are locaţiile dispuse într-o matrice cu 256 linii şi 8 coloane, adresa

unei locaţii fiind aplicată circuitului cu numărul coloanei pe terminalele de adresă notate A0, A1, A2, iar cu numărul de linie pe terminalele de adresă notate A3, A4, .. , A10.

Octetul din locaţia cu adresa aplicată la terminalele A0, A1, .. , A10 poate fi citit prin terminalele tamponului de ieşire (= Output Buffer) al circuitului, notate D0, D1, .. , D7, la

Address Buffers

Output Buffers

X Decoder Y Decoder

16384 bits Cell matrix

A10 …….. A4 A3 A2 A1 A0

D0 D1 …….. D7

0 1 ………….. . 255 0 1 ………….. . 7

Enable Logic OE

CE

Symbol Description A0 .. A10 Address Inputs

OE Output Enable

CE Chip Enable

D0 .. D7 Data Outputs

ppV Programming Voltage

ppV

A10 ………………………... A1 A0

Page 125: Curs Asm 2Curs-ASM014

8-6

care locaţia e conectată pe durata adresării, dar numai dacă circuitul de memorie este selectat prin :

CE ⋅OE = 1.

În lipsa selectării, când : CE ⋅OE = 0,

terminalele de date sunt trecute în starea de înaltă impedanţă, notată „Z”. Înscrierea unei locaţii dintr-un circuit de memorie Intel 2716 şters, necesită aplicarea

datei de înscris la terminalele D0, D1, .. , D7 , aplicarea adresei locaţiei de înscris la terminalele de adresă A0, A1, .., A10 şi selectarea circuitului prin OE = 1, CE =0 pe o durată de maxim 5 msec, când se aplică circuitului tensiunea de programare ppV = +12V.

Această procedură se repetă la înscrierea fiecărei locaţii a circuitului. Selectarea decodificată sau liniară a circuitului de memorie se face la pinul CE ,

printr-o funcţie logică între semnale ale magistralei de adrese, iar la pinul OE se aplică semnalul de validare a selecţiei, Intel8080MEMR sau Z80MREQ .

Memoriile EAROM (=Electrically Alterable ROM) constituie o soluţie intermediară între memoriile ROM şi memoriile RAM, deoarece permit înscrierea şi citirea locaţiilor conţinute prin procedee electrice, citirea unei locaţii făcându-se într-un interval de timp de ordinul microsecunndelor, dar având însă dezavantajul că operaţia de înscriere a unei locaţii se face într-un timp de câteva milisecunde, ceea ce nu permite realizarea memoriei RAM a unui sistem cu circuite de memorie EAROM. Informaţia o dată înscrisă într-o memorie EAROM se păstrează şi la suprimarea tensiunii de alimentare pe o durată de timp cuprinsă între 10 şi 15 ani.

Page 126: Curs Asm 2Curs-ASM014

8-7

8.4. MEMORII RAM Memoria unui sistem cu microprocesor ce permite atât scrierea, cât şi citirea locaţiilor

sale se numeşte memorie cu acces aleator, fiind notată RAM (=Random Access Memory), existând memorii RAM statice şi memorii RAM dinamice.

8.4.1. MEMORII RAM STATICE Într-un circuit de memorie RAM statică memorarea fiecărui bit de informaţie se face

în câte o celulă de memorie realizată printr-un circuit basculant bistabil. Structura complexă a unei celule de memorie determină o capacitate redusă pentru circuitele de memorie RAM statice.

Un circuit de memorie RAM statică cu o capacitate de i2 j× biţi, formată din j2

locaţii, fiecare locaţie având mărimea a i biţi, este prevăzut cu un număr i de terminale pentru date, notate D0 .. Di, un număr j de terminale pentru adrese, notate A0 .. Aj, un terminal pentru selecţia circuitului, notat CS (=Chip Select) ori CE (=Chip Enable) şi un terminal de comandă a citirii şi scrierii, notat W/R (=Read / Write) ori WE (=Write Enable), activ în 1 logic pentru citire şi în 0 logic pentru scriere. La terminalele de date D0 .. Di este conectat atît un tampon de ieşire de date selectat în operaţiile de citire, cât şi un tampon de intrare de date selectat în operaţiile de scriere, selectarea tampoanelor de intrare şi de ieşire fiind succesivă şi nu simultană. În lipsa selecţiei circuitului de memorie, terminalele de date sunt trecute în starea de înaltă impedanţă.

Diagrama de semnale pentru citirea unei locaţii de memorie RAM statică, reprezentată în fig.8.6a, evidenţiază parcurgerea următoarelor etape :

- adresa locaţiei de memorie este aplicată prin magistrala de adrese (= Address Bus) tuturor circuitelor sistemului ;

- într-un interval de timp de 100...300 nsec, numit timp de acces (=Access Time), adresa de pe magistrala de adrese este decodificată în toate circuitele sistemului, fiecare circuit validându-şi locaţia cu adresa aplicată pe terminalele sale de adrese ;

- se comandă sensul de citire al transferului, prin semnalul W/R = 1 ; - pe durata comenzii de citire se face selecţia circuitului ce conţine locaţia necesară

prin comanda de selecţie condiţionată CS ⋅ Intel8080MEMR (=CS ⋅ 80ZMREQ ) = 1,

pe durata selecţiei condiţionate, locaţia adresată din circuitul selectat fiind conectată la magistrala de date (= Data Bus) prin tampoanele de ieşire de date (= Output Buffers) ale circuitului, notate OUTD .

Fig.8.6 Diagramele de citire şi scriere: memoria MMN 2114A

W/R

A0 .. A15 access time

data

address

80ZMREQCS ⋅

W/R =1

D0..Di= IND

access time

data

address

D0..Di= OUTD

a) Read b) Write

Writing for MMN 2114

MMN 2114: Data

Page 127: Curs Asm 2Curs-ASM014

8-8

Diagrama de semnale pentru scrierea unei locaţii de memorie RAM statică, reprezentată în fig.8.6b, evidenţiază parcurgerea următoarelor etape :

- adresa locaţiei de memorie este aplicată prin magistrala de adrese (= Address Bus) tuturor circuitelor sistemului ;

- data de înscris se aplică pe magistrala de date (=Data Bus) ; - într-un interval de timp de 100...300 nsec, numit timp de acces (=Access Time),

adresa de pe magistrala de adrese este decodificată în toate circuitele sistemului, fiecare circuit validându-şi locaţia cu adresa aplicată pe terminalele sale de adrese ;

- se comandă sensul de scriere al transferului, prin semnalul W/R = 0 ; - pe durata comenzii de scriere, se face selecţia circuitului ce conţine locaţia

necesară prin semnalul de selecţie condiţionată CS ⋅ Intel8080MEMW (=CS ⋅ 80ZMREQ ) = 1,

pe durata selecţiei condiţionate, locaţia adresată din circuitul selectat fiind înscrisă cu data preluată de pe magistrala de date a sistemului (= Data Bus), prin tampoanele de intrare de date (= Input Buffers) ale circuitului, notate IND .

Circuitul MMN 2114A este o memorie RAM statică cu o capacitate de 1K×4biţi,

arhitectura sa internă fiind prezentată în fig.8.7.

Fig.8.7 Arhitectura internă a circuitului de memorie MMN 2114A

În circuitul MMN 2114A, locaţiile de memorie, fiecare din câte 4 biţi, sunt dispuse într-o matrice din 8 coloane, adresate prin terminalele de adresă A0, A1, A2 şi 64 linii, adresate prin terminalele de adresă A3, A4, .. , A8. Transferul, de citire sau de scriere, cu o locaţie adresată din circuit, se face prin terminalele de date D0, .. D3, la care locaţia adresată este conectată. Selecţia circuitului este comandată cu semnalul CS (= Chip Select), în timp ce sensul de citire sau de scriere a transferului cu o locaţie adresată este controlat prin semnalul de validare a scrierii, notat WE (= Write Enable), validarea scrierii făcându-se prin WE = 0, iar validarea citirii prin WE =1. Transferul de citire se realizează

1K×4 bits Cell Matrix

Column Decoder

Column Input/Output

Circuits

Input Data

Control

Input Buffers

Output Buffers

CS

WE

D0 .. D3

A0, A1, A2

A3, A4, .. ,A9

. . .

.

.

.

Address Buffers

Address Buffers

Row Decoder

Page 128: Curs Asm 2Curs-ASM014

8-9

prin tampoanele de ieşire de date (= Output Buffers), în timp ce transferul de scriere se face prin tampoanele de intrare de date (= Inputs Buffers).

Înscrierea unei locaţii din circuitul de memorie MMN 2114 impune ca data de înscris să fie stabilă pe un interval de timp de circa 100 nsec notat în fig.8.6b prin scriere pentru MMN2114 (=Writing for MMN 2114), interval ce impune o dată stabilă (= MMN 2114 Stable Data).

8.4.2. MEMORII RAM DINAMICE În memoriile RAM dinamice un bit de informaţie este memorat sub forma unei sarcini

încărcată într-un condensator realizat sub forma unei capacităţi poartă-substrat a unui tranzistor MOS. Avantajul unei memorii RAM dinamice, comparativ cu o memorie RAM statică, constă în dimensiunea redusă a unei celule de memorie, ceea ce permite o densitate de implementare cu mult mai mare. De asemenea, structura mai simplă a unei celule de memorie RAM dinamică permite o viteză de operare mult mai ridicată.

Dezavantajul esenţial al unei memorii RAM dinamice este dat de descărcarea în timp a capacităţilor poartă-substrat, prin curenţi de fugă. Existenţa curenţilor de fugă impune refacerea periodică a conţinutului întregii memorii RAM dinamice a unui sistem cu microprocesor la fiecare cel mult 2 msec, în vederea păstrării nealterate a informaţiei.

Refacerea informaţiei înscrisă într-o memorie RAM dinamică se face prin citirea informaţiei încă nealterate şi reînscrierea ei la parametrii iniţiali, refacerea făcându-se simultan cu efectuarea unui program pentru toate locaţiile dintr-o linie, sau o coloană, a matricei memoriei RAM dinamice a sistemului. Necesitatea refacerii periodice a întregului conţinut al memoriei RAM dinamice a unui sistem cu microprocesor, impune existenţa unui bloc logic de refacere a conţinutului memoriei RAM dinamice, ce să evite conflictul apelării simultane a memoriei RAM dinamice pentru refacere şi pentru transferul de date la efectuarea unui program, prioritate având operaţia de refacere a memoriei. Evitarea conflictelor prin introducerea unor întreruperi în efectuarea programelor, determină o reducere aparentă a vitezei de operare a microprocesorului de circa 5%.

Spre deosebire de microprocesorul Intel 8080, ce necesită o logică suplimentară de refacere a memoriei RAM dinamice, microprocesorul Zilog Z80 realizează operaţia de refacere a memoriei RAM dinamice din sistemul controlat, simultan cu efectuarea unui program.

Dintre circuitele de memorie RAM dinamică, circuitul MK 4116 are o capacitate de

16K×1 biţi, fiind format din 16K = 142 = 16384 locaţii, fiecare locaţie având mărimea unui bit, adresarea locaţiilor necesitând numere de adresă din câte 14 biţi. Locaţiile sunt dispuse matriceal pe 128 linii şi 128 coloane, validarea liniei şi coloanei unei locaţii adresate făcându-se prin câte 7 biţi ai numărului de adresă al locaţiei, numărul liniei fiind codificat prin cei 7 biţi de pondere minimă ai adresei, iar numărul coloanei prin cei 7 biţi de pondere maximă de adresă.

Un circuit MK 4116 este prevăzut cu patru terminale de alimentare ( DDV =+12V,

CCV =+5V, BBV =-5V, SSV =0V), un terminal pentru ieşire de date ( OUTD = Data Output),

un terminal pentru intrare de date ( IND =Data Input), un terminal pentru semnalul de

comandă al tipului de citire sau de scriere al unui transfer ( WE = Write Enable) şi 7 terminale, notate A0 .. A6, prin care numerele de adresă din 14 biţi sunt preluate în circuit prin multiplexare, cei mai puţin semnificativi 7 biţi de adresă, reprezentînd numărul liniei matricei de memorie unde se află locaţia adresată, fiind preluaţi sub comanda semnalului aplicat pe terminalul de strobare a adresei de linie (RAS = Row Address Strobe), iar cei 7 biţi de adresă de pondere maximă, reprezentând numărul coloanei locaţiei adresate, fiind preluaţi în circuit sub comanda semnalului aplicat pe terminalul de strobare a adresei de coloană (CAS = Column Address Strobe). Folosind tehnica multiplexării în preluarea

Page 129: Curs Asm 2Curs-ASM014

8-10

numerelor de adresă, numărul de terminale pentru un circuit de memorie MK 4116 a fost redus de la 23, la 16.

Astfel, adresarea unei locaţii dintr-un circuit MK 4116 prin terminalele de adresare A0 .. A6 necesită două etape în preluarea unui număr de adresă din 14 biţi, întâi aplicându-se pe terminalele de adresă cei 7 biţi de pondere minimă ai numărului de linie, urmaţi de o comandă RAS =0, apoi aplicându-se terminalelor de adresă cei 7 biţi de pondere maximă ai numărului de coloană, urmaţi de o comandă CAS =0. Această tehnică impune existenţa unui multiplexor ca tampon între magistrala de adrese a sistemului şi terminalele de adresare ale circuitelor MK 4116 din zona de memorie RAM dinamică, comandat pe terminalul său notat MUX, cu starea logică 1 pentru transferul celor 7 biţi ai numărului de linie şi cu starea logică 0 pentru transferul celor 7 biţi ai numărului de coloană.

Structura logicii de control necesară adresării circuitelor RAM dinamice MK 4116 şi diagrama semnalelor generate sunt prezentate în fig.8.8.

Fig.8.8 Adresarea circuitelor de memorie RAM dinamică MK 4116

Deoarece o locaţie dintr-un circuit de memorie MK 4116 are mărimea unui bit, rezultă

că realizarea unei zone de memorie RAM dinamică cu o capacitate de 16KB necesită 8 circuite MK 4116, situaţie prezentată în fig.8.9 pentru o memorie RAM dinamică situată în spaţiul de adrese C000 ... FFFF h.

O memorie RAM dinamică se conectează la magistrala de date a sistemului cu ieşirile de date DO0 .. DO7 printr-un tampon de ieşire de date (=Output Data Buffers) selectat doar pe durata operaţiilor de citire şi cu intrările de date DI0 .. DI7 printr-un tampon de intrare de date (=Input Data Buffers) permanent selectat. Tampoanelor de date au rolul de amplificatoare separatoare, asigurând atât protecţia memoriei RAM dinamice impotriva semnalelor perturbatoare de pe magistrala de date, cât şi funcţionarea sistemului la defectarea zonei de memorie RAM dinamică. În lipsa selecţiei, tamponul de ieşire de date trebuie să-şi treacă în înaltă impedanţă terminalele de conectare la magistrala de date.

Definiţie Intervalul de timp, în care sub acţiunea sincronizată a semnalelor de adrese, de date

şi de comandă se realizează citirea sau scrierea unei locaţii, se numeşte ciclu. Diagrama de semnale dintr-un ciclu de citire a unei locaţii de memorie RAM dinamice

MK 4116 este prezentată în fig.8.10. Într-o operaţie de citire, conţinutul unei locaţii RAM

A0 .. A6

A0 .. A15

RAS

CAS

MUX

ROW

MUX

COL

50 nsec

150 nsec

Linie de întârziere

MEMR

MEMW

RFSH

MUX CAS RAS

Page 130: Curs Asm 2Curs-ASM014

8-11

dinamice va fi accesibil la terminalele de ieşire de date DO0 .. DO7 doar pe durata comenzii CAS =0, ieşirile de date DO0 .. DO7 fiind în înaltă impedanţă cât timp CAS =1.

Fig.8.9 Memorie RAM dinamică din 16KB, cu circuite MK 4116

Fig.8.10 – Ciclu de citire a unei locaţii RAM dinamice cu circuite MK 4116

Înscrierea unei locaţii de memorie RAM dinamică cu MK 4116 se face prin

terminalele de intrare de date DI0 .. DI7. Într-un ciclu de scriere după comanda RAS =0, data de înscris în locaţia RAM dinamică MK 4116 adresată, va fi preluată într-un registru intern prevăzut circuitelor MK 4116 sub comanda tranziţiei negative a ultimului dintre semnalele WE şi CAS aplicate circuitelor de memorie. În funcţie de ordinea în care sunt aplicate semnalele WE şi CAS , se deosebesc două tipuri de cicluri de scriere. Într-un

RAS

CAS

A0..A6 (ADDRESS)

WE

DO0..DO7

ROW COL

valid data

OPEN (=”Z” state) read

0

MUX

Multiplexer

D0 .. D7 (Data Bus)

A0 .. A15 (Address Bus)

Output Data Buffers

Inpu

t Dat

a B

uffe

rs

CAS

RAS

WE

A0..A6

DO0..DO7

DI0

..DI7

MEMR

RAS

CAS

MEMW

A14 A15

8× MK4116 (16KB)

CE

CE

CS

Page 131: Curs Asm 2Curs-ASM014

8-12

ciclu de scriere normal, întâi se va aplica comanda WE =0 şi apoi comanda CAS =0, un astfel de ciclu de scriere fiind numit ciclu de scriere timpurie (= Early Write Cycle)

Diagrama de semnale dintr-un ciclu de scriere timpurie este prezentată în fig.8.11 într-un astfel de ciclu de scriere ieşirile de date DO0 .. DO7 fiind permanent trecute în înaltă impedanţă.

Fig.8.11 Ciclu de scriere timpurie (Early Write Cycle): memoria MK 4116

Ciclurile de scriere în care întâi se aplică comanda CAS =0 şi apoi comanda WE =0

se numesc cicluri de scriere întârziată (=Delayed Write Cycle) şi sunt cicluri combinate de citire-scriere (=Read-Write / Read Modify-Write Cycle), diagramele de semnale într-un astfel de ciclu fiind prezentate în fig.8.12.

Fig.8.12 Ciclu de scriere întârziată (Delayed Write Cycle): memoria MK 4116

Într-un ciclu de scriere întîrziată sunt validate atât intrările de date DI0 .. DI7, la care

se aplică data de înscris ce este memorată pe frontului căzător al semnalului WE =0, cât şi ieşirile de date DO0 .. DO7, validate doar cât timp CAS =0 şi pe care apare vechiul conţinut al locaţiei de înscris în intervalul când WE =1 şi CAS =0, iar pe intervalul în care RW =0 şi CAS =0 apare noul conţinut înscris prin terminalele de intrare de date DI0 .. DI7.

RAS

CAS

A0..A6 (ADDRESS)

WE

DI0..DI7

DO0..DO7

ROW COL

old data

valid data

OPEN (=”Z” state) read write

RAS

CAS

WE

DI0..DI7

DO0..DO7 (= “Z” state)

ROW COL

valid data

writed data

0

1

OPEN (=”Z” state)

A0..A6 (ADDRESS)

Page 132: Curs Asm 2Curs-ASM014

8-13

Memoriile RAM dinamice MK 4116 prezintă modul de operare pe pagină (= Page Mode Operation), prin care pot fi înscrise sau citite succesiv până la 128 locaţii de memorie situate pe aceeaşi linie a matricei de memorie, adresele celor 128 locaţii având acelaşi număr de linie şi diferind doar prin numărul de coloană. Mărimea unei pagini dintr-un circuit MK 4116 este limitată la 128 locaţii deoarece prin cel 7 biţi ai numărului de coloană se pot obţine doar 128 combinaţii distincte.

În sistemele ce conţin o memorie mai mare de 16KB, mărimea unei pagini poate fi extinsă pe mai multe circuite, dar pentru fiecare circuit condiţionând comanda CAS prin semnalul de selecţie a circuitului, avâns în vedere că vor fi validate doar circuitele ce primesc ambele comenzi CAS =0 şi RAS =0. Astfel în timp ce comanda RAS =0 se aplică tuturor circuitelor de memorie în care se preia adresa de linie, comanda CAS =0 se aplică doar circuitului selectat.

Pe întreaga durată a unui ciclu de operare pe pagină va trebui menţinută comanda RAS =0. Într-un ciclu de scriere pe pagină, fiecare comandă CAS =0 este precedată de o comandă WE =0, un ciclu de scriere pe pagină fiind o succesiune de cicluri de scriere timpurie.

Diagramele de semnale pentru un ciclu de citire pe pagină (=Page Mode Read Cycle) sunt prezentate în fig.8.13, iar diagramele de semnale pentru un ciclu de scriere pe pagină (=Page Mode Write Cycle) sunt date în fig.8.14.

Fig.8.13 Ciclu de citire pe pagină (Page Mode Read Cycle): memoria MK 4116

Fig.8.14 Ciclu de scriere pe pagină (Page Mode Write Cycle): memoria MK 4116

RAS

CAS

A0..A6

WE

ROW COL 0

data 0

COL 1 COL k

data 1 data k DI0..DI7

RAS

CAS

A0..A6 (Address)

WE

DO0..DO7

ROW COL 0

data 0

OPEN (=”Z” state)

COL 1 COL k

data 1 data k

Page 133: Curs Asm 2Curs-ASM014

8-14

O memorie dinamică păstrându-şi conţinutul cel mult 2 msec, datorită curenţilor de fugă din capacităţile MOS poartă-substrat, se impune să se refacă conţinutul întregii memorii RAM dinamice la intervale de cel mult 2 msec. Pentru fiecare locaţie refacerea conţinutului se face prin citire şi reânscriere, refacerea fiind făcută simultan pentru toate locaţiile dintr-o linie a matricii memoriei RAM dinamice. Operaţia de refacere se efectuează pe durata în care microprocesorul decodifică octetul instrucţiune, când, pe magistrala de adrese rămasă liberă, se aplică adresa liniei ale cărei locaţii vor fi reînprospătate simultan. Această tehnică de efectruare în paralel a unui program şi a reînprospătării memoriei RAM dinamice se numeşte furt de ciclu.

Diagrama de semnale dintr-un ciclu de refacere (= Refresh Cycle) a locaţiilor dintr-o linie a matricei de memorie RAM dinamică cu circuite MK 4116 este prezentată în fig.8.15.

Fig.8.15 Ciclu de refacere (Refresh Cycle / RAS Only): memoria MK 4116

OPEN (=”Z” state) 0

1 DO0..DO7

ROW

A0..A6 (Address)

RAS

Page 134: Curs Asm 2Curs-ASM014

9-1

9. ADRESAREA ŞI SELECŢIA Funcţia principală a magistralei de adrese a sistemului o constituie adresarea unei

locaţii a sistemului (de memorie sau de interfaţă), sarcină ce impune atât adresarea locaţiei, cât şi selecţia circuitului căruia aparţine locaţia.

Într-un sistem operând pe date din 8 biţi, din cei16 biţi de adresă, o parte sunt utilizaţi pentru adresarea locaţiilor de memorie, iar o parte pentru selecţia circuitelor ce conţin locaţiile de memorie adresate.

Modul în care biţii de adresă sunt distribuiţi între adresarea unei locaţii şi selecţia circuitelor este stabilit de proiectantul microsistemului de calcul.

Selecţia circuitelor dintr-un sistem se realizează folosind tehnica selecţiei liniare, tehnica selecţiei decodificate, sau o combinaţie între tehnica selecţiei liniare şi tehnica selecţiei decodificate.

În tehnica selecţiei liniare, un circuit al sistemului este selectat printr-un bit distinct al magistralei de adrese, în timp ce într-o selecţie decodificată, prin q biţi ai magistralei de

adrese, se face selecţia a q2 circuite din sistem, folosind un decodor 1 din q2 .

Astfel, o memorie formată din circuite de memorie fiecare din câte n2 locaţii şi conectată la n+q biţi ai magistralei de adrese, q biţi fiind utilizaţi pentru selecţie, iar n biţi

pentru adresarea locaţiilor dintr-un circuit selectat, va avea o capacitate de q· n2 locaţii în

cazul selecţiei liniare a circuitelor de memorie şi o capacitate de q2 · n2 locaţii în cazul

selecţiei decodificate a circuitelor de memorie prin cele q2 ieşiri ale unui decodor având ca intrări cei q biţi de selecţie. Rezultă că selecţia liniară se recomandă doar pentru sistemele de capacitate redusă, prin utilizarea biţilor disponibili ai magistralei de adrese.

Dezavantajul principal al selecţiei liniare îl constituie fragmentarea spaţiului de adresare, ceea ce duce la dificultăţi în programare datorită atenţiei ce trebuie acordată la specificarea unei adrese. De asemenea, un sistem folosind o adresare liniară este rigid, neavând posibilitatea de a fi dezvoltat.

Un decodor des utilizat în selecţia decodificată a circuitelor unui sistem operând pe cuvinte din 8 biţi este decodorul MMN 8205, a cărui arhitectură internă este prezentată în fig.9.1.

Fig.9.1 Arhitectura internă a decodorului MMN 8205

Pe durata validării prin CS = 0E · 1E · 2E = 1,

funcţionarea decodorului MMN 8205 este descrisă prin relaţiile :

0Q 1Q

7Q

0A

1A

2A

Decoder

0E

1E

2E

CS= 0E · 1E · 2E

.

.

.

Enable Gate

Page 135: Curs Asm 2Curs-ASM014

9-2

iQ = 0, pentru 2A 1A 0A = i

jQ = 1, pentru 2A · 1A · 0A ≠ j ,

iar la invalidarea funcţionării prin CS = 0E · 1E · 2E = 1,

decodorul îşi trece toate ieşirile în starea logică :

jQ = 1, unde j =0,1, .. , 7.

Selecţia cu decodoare MMN 8205 a 24 circuite de memorie RAM, fiecare cu o capacitate de 1KB, este exemplificată în fig.9.2, selecţia fiind condiţionată de semnalul de acces la memorie MREQ (=Memory Request).

Fig.9.2 Adresarea şi selecţia unei memorii de 24KB cu 3 circuite MMN 8205

0Q

1Q

7Q 2E

1E

0E

2A

1A

0A

0CS

1CS

7CS

. . .

0Q

1Q

7Q 2E

1E

0E

2A

1A

0A

8CS

9CS

15CS

. . .

0Q

1Q

7Q 2E

1E

0E

2A

1A

0A

16CS

17CS

23CS

. . .

0A .. 9A

10A

11A

12A

13A

14A

+5V

0A .. 9A

Address Bus

la memoria de 24KB din 24 circuite

MMN 8205

MMN 8205

MMN 8205

MREQ

Page 136: Curs Asm 2Curs-ASM014

9-3

Page 137: Curs Asm 2Curs-ASM014

10-1

BIBLIOGRAFIE

Ioan DANCEA: MICROPROCESOARE. ARHITECTURĂ INTERNĂ. PROGRAMARE. APLICAŢII. Editura DACIA, Cluj-Napoca, 1979.

GRANINO A. KORN: “Microprocesoare, minicalculatoare, microcalculatoare”. Editura TEHNICĂ, Bucureşti, 1981.

T. MUREŞAN: MICROPROCESORUL 8080 ÎN APLICAŢII. Editura FACLA, Timişoara, 1981.

MULTITECH INDUSTRIAL CORP.: “MPF-1. EXPERIMENT MANUAL (SOFTWARE / HARDWARE)”. TAIPEI, 1981.

MULTITECH INDUSTRIAL CORP.: “MPF-1. MONITOR PROGRAM, SOURCE LISTING.”, TAIPEI, 1981.

MULTITECH INDUSTRIAL CORP.: “MPF-1. USER’S MANUAL.”, TAIPEI, 1981.

A. PETRESCU : “MICROCALCULATOARELE FELIX M18, M18B, M118”. Editura TEHNICĂ, Bucureşti, 1984.

Gheorghe TOACŞE: “INTRODUCERE ÎN MICROPROCESOARE”. Editura ŞTIINŢIFICĂ ŞI ENCICLOPEDICĂ, Bucureşti, 1985.

Horia DUMITRAŞCU: “SĂ ÎNVĂŢĂM BASIC”, Editura ALBATROS, Bucureşti, 1987.

INSTITUTUL DE CERCETARE ŞTIINŢIFICĂ ŞI INGINERIE TEHNOLOGICĂ PENTRU TEHNICĂ DE CALCUL ŞI INFORMATICĂ. SECTOR TEHNICĂ DE CALCUL: “COBRA BASIC. MANUAL DE UTILIZARE”, Braşov, 1988.

A. PATRUBANY: “TOTUL DESPRE MICROPROCESORUL Z80”. Editura TEHNICĂ, Bucureşti, 1989.

Florian MORARU, Mihai ATODIROAEI: “PROGRAMAREA MICROCALCULATOARELOR ÎN SISTEMUL DE OPERARE CP/M”. Editura ŞTIINŢIFICĂ IENCICLOPEDICĂ, Bucureşti, 1989.

R. FONTENAY: “NUMERIQUE-ANALOGIQUE.CONVERTISSEURS.ANALOGIQUE- NUMERIQUE. LES MEILLEURS SCHEMAS D’APPLICATIONS”. Editions RADIO, Paris.

Irina ATHANASIU: “MICROPROCESOARELE 8086, 286, 386”. Editura TEHNICĂ, Bucureşti, 1992.

James HOLLIDGE: „Introduction to Z80 Assembler”, MHTML Document.

Mostek: „Z80 PROCESSOR” (z80-mostek.pdf)

Zilog : „Z80 DATA BOOK” (Z80_DataBook.pdf)

Page 138: Curs Asm 2Curs-ASM014

10-2

Cuprins 1. Introducere……………………………………………………………………… 1-1 1.1 Generalităţi……………………………………………………………… 1-1 1.2. Modul de operare al unui microprocesor……………………………. 1-7

2. Microprocesor Intel 8080……………………………………………………… 2-1 2.1. Arhitectură internă………………………………………………………. 2-1 2.1.1. Unitatea aritmetică şi logică……………………………… 2-1 2.1.2. Circuitele basculante bistabile de condiţie……………… 2-1 2.1.3. Registre interne de date …………………….................... 2-4 2.1.4. Registrele de adrese……………………………………… 2-5 2.1.5. Magistrala de comandă şi control……………………….. 2-7 2.2. Cicluri şi stări în funcţionarea unui microprocesor…………………. 2-9 2.3. Particularităţi în funcţionarea unui microprocesor………………….. 2-11 2.3.1. Folosirea registrelor de date ale microprocesorului……. 2-11 2.3.2. Tehnica suprapunerii instrucţiunilor succesive…………. 2-12 2.3.3. Folosirea registrului M=(HL)………………………………. 2-13 2.3.4. Utilizarea registrelor de date W şi Z……………………… 2-14

3. Microprocesorul Zilog Z80. Arhitectură internă ………………................... 3-1

4. Sistemul de întreruperi: Zilog Z80, Intel 8080………………………………. 4-1 4.1. Întreruperi nemascabile……………………………………………….. 4-1 4.2. Întreruperi mascabile………………………………………………….. 4-2 4.2.1. MOD 1 mascabil………………………………………….. 4-3 4.2.2. MOD 0 mascabil………………………………………….. 4-3 4.2.3. MOD 2 mascabil…………………………………………… 4-5 4.3. Cereri multiple de întrerupere………………………………………… 4-6

5. Programarea microprocesoarelor: Intel 8080, Zilog Z80…………………. 5-1 5.1. Tehnici de adresare……………………………………………………. 5-1 5.2. Setul de instrucţiuni: Intel 8080, Zilog Z80………………………….. 5-2 5.2.1. Clasificarea şi formatul instrucţiunilor……………………. 5-2 5.2.2. Instrucţiuni de transfer, schimb şi căutare………………. 5-3 5.2.3. Instrucţiuni de ramificare………………………………….. 5-5 5.2.4. Instrucţiuni de intrare-ieşire………………………………. 5-9 5.2.5. Instrucţiuni de prelucrare pe bit (Zilog Z80)…………….. 5-11 5.2.6. Instrucţiuni de rotire şi deplasare………………………… 5-12 5.2.7. Instrucţiuni aritmetice generale şi de comandă………… 5-13 5.2.8. Instrucţiunile aritmetice şi logice pe 8 biţi……………….. 5-14 5.2.9. Instrucţiuni aritmetice pe 16 biţi………………………….. 5-16 5.3. Tabele instrucţiuni: Intel 8080, Zilog Z80……………………………. 5-17 5.4. Compendiu instrucţiuni: Intel 8080, Zilog Z80………………………. 5-28

6. Componente de suport………………………………………………………… 6-1 6.1. Memoria tampon Intel 8212………………………………………….. 6-1

6.2. Circuitul Intel 8228…………………………………………………….. 6-7 6.3. Circuitul Intel 8224…………………………………………………….. 6-9

7. Circuite de interfaţă pentru transferul programat al datelor……………….. 7-1 7.1. Generalităţi……………………………………………………………… 7-1 7.2. Interfaţa cu transfer paralel de date PPI 8255……………………… 7-2

7.3. Circuite de temporizare programabile……………………………….. 7-11 7.3.1. Generalităţi………………………………………………….. 7-11

Page 139: Curs Asm 2Curs-ASM014

10-3

7.3.2. Interfaţa programabilă de temporizare PIT8253………... 7-11

8. Memoria unui sistem………………………………………………………….. 8-1 8.1. Generalităţi……………………………………………………………… 8-1 8.2. Memorii: ROM, PROM Intel 8316A………………………………….. 8-3 8.3. Memorii EPROM: Intel 2716………………………………………….. 8-5

8.4. Memorii RAM…………………………………………………………… 8-1 8.4.1. Memorii RAM statice: MMN 2114A……………………… 8-1 8.4.2. Memorii RAM dinamice: MMN 4116…………………….. 8-2

9. Adresarea şi selecţia. Circuitul MMN 8205………………………………… 9-1 10. Bibliografie……………………………………………………………………..10-1