Šios potemės tikslas - susipažinti su aštuonių skilčių mikroprocesoriumi I8080. Tik perpratus konkretaus mikroprocesoriaus vidinę organizaciją, jo programinį modelį, galimas tolimesnis žingsnis - programavimo įvaldymas. Procesoriaus I8080 pasirinkimas nėra atsitiktinis, nes išmokę jį, būsite tarsi įvaldę pagrindinę Intel procesorių abėcėlę. Nagrinėjant sudėtingesnius procesorius, bereiks tik perprasti kai kuriuos juose įgyvendintus naujus sprendimus. Be to tai bus svarus pagrindas mikrovaldiklių ir programuojamųjų loginių valdiklių dalykams, kuriuose būtent 8-ių skilčių procesorių programavimas bus plačiai nagrinėjamas. Pagrindiniai Jūsų uždaviniai, studijuojant šią temą - MP struktūros ir funkcionavimo įsisavinimas.
Susipažinkite - mikroprocesorius I8080
Prisiminkite, bendrus principus mes jau aptarėme. Tad perdaug sudėtinga neturėtų būti. Vidinėje mikroprocesoriaus struktūroje išskiriamos 3 pagrindinės sudėtines dalys:
Ø aritmetinis - loginis įtaisas,
Ø valdymo įtaisas,
Ø bendrųjų ir specialiųjų registrų blokas.
Operacinis įtaisas sudarytas iš šių pagrindinių dalių:
Ø aritmetinio loginio įtaiso (ALU), skirto betarpiškai apdoroti informaciją,
Ø kaupiklio, skirto atliekamų operacijų rezultatui saugoti,
Ø žymių registro F (flags),
Ø pagalbinių schemų.
Kaupiklis (akumuliatorius) irgi būna beveik visuose procesoriuose. Paprastai jame turi būti iš ankso įrašomas vienas dvinarės operacijos (sudėties, atimties ir pan.) narių. Antrasis narys gali būti bendrosios paskirties registre arba ir atmintinėje už procesoriaus ribų. Operacijos rezultatas irgi patalpinamas akumuliatoriuje ir gali būti iš ten perkeltas į reikiamą vietą vėlesnėmis komandomis.
Žymių registras
Šis registras saugo keletą bitų, kurių reikšmės automatiškai nustatomos po kai kurių aritmetinių bei loginių operacijų ir gali būti naudojamos kitoms aritmetinėms operacijos arba sąlyginio nukreipimo komandoms. Pavyzdžiui, sudedant du ašuonženklius (dvejetainėje sistemoje) skaičius, gali būti gautas ir devynženklis dvejetainis skaičius. Perteklinis tokio skaičiaus bitas bus išsaugotas žymių registro F (flags) "carry" (angl. perpildymas) skiltyje.
Visos žymių (flags) registro reikšmės gali būti perkeliamos į dėklą bei vėliau iš ten atkuriamos.
Žymių (veiksmaženklių) registre F, įvykdžius aritmetinę - loginę operaciją, fiksuojamos to rezultato žymės:
Z (ZERO) - į šiai žymei skirtą skiltį įrašomas 1, kai įvykdžius komandą gaunamas rezultatas lygus nuliui.
S (SIGN) - ši žymė suformuojama tada, kai gaunamas neigiamas aritmetinės komandos vykdymo rezultatas.
C (CARRY) - kėlimo vienetas, suformuojamas tada, kai įvykdžius aritmetinę operaciją, gaunama pernaša iš vyriausios skilties.
AC (accumulator) - perneša iš jaunesnės tetrados į vyresnę.
P (parrity) - lygiškumo žymė - šioje skiltyje gaunamas 1, jeigu vienetukų skaičius kaupiklyje lyginis.
Pagal atskiras žymių registro F skiltis vykdomos sąlyginės nukreipimo, kreipimosi į paprogramę bei grįžimo iš paprogramės komandos.
Komandos vykdymo fazėje į operacinį įtaisą išduodami valdymo signalai priklauso ne tik nuo operacijos kodo, bet ir adresavimo režimo.
Pvz., vykdant tipinę aritmetinės sudėties operaciją (prie kaupiklio turinio sumuojant atmintinės ląstelės turinį, būtinas dar vienas kreipties į atmintinę ciklas ir duomens iš išrinktos ląstelės perdavimas į procesorių. Operaciniame įtaise tas duomuo bus susumuojamas su kaupiklio A turiniu. Rezultatas išsaugomas kaupiklyje. Svarbu tai, kad žymių registre suformuojamos ir išsaugomos žymės, apibūdinančios gautąjį rezultatą.
Kai kurie šio bloko registrai specializuoti, o kai kurių paskirtis neapibrėžta, jie vadinami bendros paskirties arba tiesiog bendraisiais registrais.
Bendrosios paskirties registrai. Įvykdžius komandą, rezultatas dažnai nesiunčiamas į pagrindinę atmintį, o laikinai saugomas viename iš bendrųjų registrų. Vėliau jį galima panaudoti vykdant kitą komandą.
Vienas ar keli bendrosios paskirties registrai yra labai nedidelė greitai pasiekiama procesoriaus vidinė atmintinė duomenims saugoti. Priklausomai nuo procesoriaus tipo, kai kurie aritmetiniai veiksmai gali būti įmanomi tik tarp tokio registro ir kaupiklio. Kad būtų galima bendruosius registrus skirti vieną nuo kito, jiems suteikiami unikalūs vardai arba numeriai, kurie ir naudojami programoje. Intel 8080 procesoriaus bendrosios paskirties registrų bloke yra šeši aštuonių skilčių bendrosios paskirties registrai: B, C, D, E ir F. Jie gali būti naudojami ir kaip registrų poros, turinčios po šešiolika skilčių. Galimos tik tokios registrų poros:BC, DE, HL, kurios žymimos atitinkamas B, D ir H raidėmis. Operaciniame bloke esantys A ir F registrai sudaro procesoriaus būsenos žodį PSW (processor status word).
Bendruosius registrus programuotojas savo programoje gali naudoti taip, kaip jam reikia.
Kiekvienas iš bendrųjų registrų ir kaupiklis A žymimi ne tik raidėmis, bet ir triženkliu dvejetainiu kodu, kuriuo registras nurodomas mašinos komandose, žiūrėkite lentele:
4.1 lentelė. Registrų vadrai ir dvejetainiai kodai
Registro
vardas
|
Dvejetainis
kodas
|
Registro
vardas
|
Dvejetainis
kodas
|
B
C
D
E
|
000
001
010
011
|
H
L
M
A
|
100
101
110
111
|
Čia raidė M žymi ne registrą, o pagrindinės atminties ląstelę (baitą), kurios adresas saugomas registrų poroje HL. Todėl kreipiantis į atminties ląstelę, komandoje naudojamas operandas M.
Kad būtų galima skirti registrus sudarančius bitus, šie yra numeruojami iš dešinės į kairę nuo 0 iki 7. Bitas 0 vadinamas žemesniuoju (jauniausiuoju), o bitas 7 – aukštesniuoju (vyriausiuoju) registro bitu.
Programuotojas savo programose negali pakeisti kai kurių specializuotų registrų paskirties arba sužinoti jų turinio, t. y. sakoma, kad šie registrai programai yra neprieinami. Bet yra registrų, kuriuos programuotojai gali naudoti savo programoje. Tokie mikroprocesoriaus registrai vadinami programoje naudojamais (programai prieinamais) registrais.
Kai kurių mikroprocesorių tam tikrus registrus galima naudoti specialiems tikslams, pavyzdžiui,: kaupiklis, programos skaitiklis, komandų registras, atminties adreso registras ir kt. Kaupiklis yra vienas iš ALU registrų ir skirtas operandui (prieš atliekant operaciją) arba operacijos rezultatui laikinai saugoti.
Svarbiausi procesoriaus registrai:
Ø Atminties adreso registras. Jis sisteminėje magistralėje prijungtas prie adresų linijų ir nurodo vykdomos skaitymo arba rašymo operacijos adresą atmintyje.
Ø Duomenų buferio registras. Jis prijungtas sisteminėje magistralėje prie duomenų linijų ir jame yra patalpinami saugojimui į atmintį paruošti arba paskutinieji nuskaityti iš atminties duomenys.
Ø Programos skaitiklis PC. Jame yra sekančios išrenkamos instrukcijos adresas.
Ø Instrukcijų registras. Jame patalpinama paskutinė išrinkta instrukcija.
Programos skaitiklis PC (komandų skaitiklis, komandos adreso registras), vėlesniuose procesoriuose IP – (komandos rodiklis) naudojamas tuomet, kai reikia formuoti ir saugoti vykdomos komandos adresą. Įvykdžius komandą, programos skaitiklyje bus saugomas naujo komandos adresas, t. y. adresas, kuriuo ši komanda saugoma mikrokompiuterio atmintyje.
Adreso registras naudojamos komandos, operando arba operacijos rezultato adresui įsiminti tuomet, kai reikia komandą arba operandą skaityti iš atminties arba operacijos rezultatą įrašyti į atmintį. Adreso registras gali būti ne mikroprocesoriuje, o mikrokompiuterio pagrindinėje atmintyje.
Dėklo viršūnės registras Kaip jau minėta 1.1 skyriuje, tam tikra atmintinės dalis paprastai naudojama, kaip dėklas. Tam, kad būtų galima kreiptis į ją, reikalingas specialios paskirties dėklo viršūnės registras. Įrašant informaciją į dėklą, kiekvieno sekančio žodžio adresas didinamas, atitinkamai pakeičiant dėklo viršūnės adresą. Nuskaitant informaciją, dėklo viršūnės adresas mažinamas.
Grįžtant prie nutrauktos programos tęsimo, ši informacija iš dėklo atstatoma. Kompiuteryje gali atsitikti taip, kad viena programa nutraukia kitą, šią - dar viena. Sugrįžtama prie nutrauktųjų programų - priešinga tvarka. Todėl informacija, įrašyta į dėklą pirmoji, nuskaitoma iš jo paskutinė.
Kviečiant įvairių programos vietų bendrai naudojamą paskirties kodo fragmentą (pavyzdžiui, simbolio išvedimo į ekraną paprogramę), taip pat aptarnaujant pertraukimus, svarbu neužmiršti šiuo metu vykdomos komandų sekos adreso, kad užbaigus pertraukiančiąją programą būtų galima grįžti atgal.Grįžimo adresas beveik visada išsaugomas dėkle. Baigiant pertraukiančiąją programą, dėklo viršūnėje visada bus reikalingas grįžimo adresas, nes jis buvo įkeltas paskutinis.
Dėkle gali būti išsaugomas ne tik ankstesnis vykdymo adresas, bet ir įvairi kita su ankstesniu vykdymu susijusi informacija (registrų bei žymių reikšmės, kai kada ir informacija apie įvedimo ar išvedimo įrenginių būseną).
Procesoriaus būsenos žodžio (PSW) registre saugomas procesoriaus būsenos žodis PSW (Processor Status Word), t. y. Informacija apie MP būseną ir vykdomą programą kiekvienu laiko momentu. Pavyzdžiui, PSW registre paprastai saugomi įvykdytos komandos rezultato požymiai (neigiamas rezultatas, nulinis rezultatas, perpildymas ir kt. Nors PSW registras skirtas ypatingoms funkcijoms atlikti, bet jį savo programose gali naudoti ir programuotojas, t. y. Tam tikromis komandomis galima skaityti ir net pakeisti šio registro turinį. Dažnai PSW sudaro kaupiklio ir žymių registro pora, pvz., I 8080 procesoriuje A ir F registrai sudaro porą PSW.
Komandos vykdymo algoritmas
Taigi buvo sukurtas toks procesoriaus funkcionavimo algoritmas:
Pirmuoju komandos išrinkimo žingsniu iš specialaus Programos komandų skaitiklio arba Komandos rodyklės registro išrenkama komanda, kuri išsaugoma komandos registre.
Antrajame žingsnyje dešifruojamas komandos operacijos kodas ir išduodama valdymo signalų seka būtina tai komandai įvykdyti.
Trečiuoju žingsniu išsaugomas operacijos rezultatas.
Prieš pradedant vykdyti kitą ciklą, komandų skaitiklio turinys padidinamas ir procesorius analogiškai kitame cikle vykdo antrą, vėlesniame trečiąją ir kitas komandas.
Įprastinę nuoseklią komandų vykdymo tvarką keičia nukreipimo komandos, kurios į komandų skaitiklį įrašo kitą adresą , todėl atsiranda galimybė „peršokti“ į kitą programos vietą.
Komandų registras skirtas vykdomos komandos kodui saugoti. Kaip buvo minėta, operacijos kodas, komandos kodo dalis, naudojamas formuojant VĮ valdymo signalų seką, nes ji priklauso nuo konkretaus operacijos kodo. Likusioje komandos kodo dalyje turi būti nurodyta informacija apie operandų, su kuriais atliekama operacija, adresus.
Komandų dešifravimo įtaise operacijos kodas dešifruojamas ir keičiamas į valdymo signalą, kuris sužadina atitinkamas valdymo įtaiso grandines, o šis savo ruožtu formuoja valdymo signalus būtinus tai komandai įvykdyti.
Tam, kad programa galėtų būti vykdoma, pirmiausiai į procesoriuje esantį programos komandų skaitiklį PC (IP) įvedamas pirmosios komandos adresas.
Pradėjus dirbti mikroprocesorinei sistemai, šis adresas per adreso registrą perduodamas į adresų magistralę ir iš to adreso operatyviosios atmintinės ląstelės (ląstelių) išrenkama pirmoji komanda. Ji per duomenų buferius įrašoma į procesoriaus komandų registrą. Komandų operacijos kodo dešifratoriuje dešifruojamas operacijos kodas. Dešifratorius viena iš išėjimo linijų išduoda signalą valdymo įtaisui, o šis savo ruožtu išduoda sinchronizuotus komandai vykdyti reikalingus signalus į kitus procesoriaus įtaisus bei signalus, reikalingus magistralei valdyti.
Po to komandų skaitiklio turinys padidinamas ir analogiškai išrenkama bei vykdoma kita programos komanda.
Įvesties – išvesties komandomis duomenys įvedami į procesorių iš išorinio įrenginio arba atvirkščiai. Nukreipimo komandos gali pakeisti komandų skaitiklio turinį ir tuo pačiu įprastinę komandų vykdymo tvarką. Sąlyginės nukreipimo komandos suteikia procesoriui ypatingą galią. Tai leidžia organizuoti ciklinį duomenų apdorojimą, išsišakojančius programų algoritmus.
Komentarų nėra:
Rašyti komentarą