Intel 80x86 kompiuterių funkcionavimo pagrindai

36
Kompiuterių funkcionavimo pagrindai asist. S. Ramanauskaitė [email protected]

description

Kompiuterių funkcionavimo pagrindai

Transcript of Intel 80x86 kompiuterių funkcionavimo pagrindai

Page 1: Intel 80x86 kompiuterių funkcionavimo pagrindai

Kompiuterių funkcionavimo

pagrindai

asist. S. Ramanauskaitė[email protected]

Page 2: Intel 80x86 kompiuterių funkcionavimo pagrindai

Kokį procesorių studijuoti?

• Virtualų

• Modernų (naujausią)

• Itin paprastą, vieną pirmųjų

• Paprasčiausią iš dabar egzistuojančių šeimos

Page 3: Intel 80x86 kompiuterių funkcionavimo pagrindai

Intel 80x86 procesorių šeima

ProcesoriusDuomenų

magistralės plotis

Adresų magistralės

plotis

Adresų erdvės dydis

80186 16 20 220 = 1 M

80286 16 24 224 = 16 M

80386SX 16 24 224 = 16 M

80386DX 32 32 232 = 4 G

80486 32 32 232 = 4 G

80586 „Pentium“ 64 32 232 = 4 G

Page 4: Intel 80x86 kompiuterių funkcionavimo pagrindai

80186 procesorius

• 80186 turi 16 duomenų linijų, leidţiančių atlikti operacijas su teigiamais sveikaisiais skaičiais nuo 0 iki 216 – 1 = 65535 ar sveikuosius skaičius su ţenklu nuo -32768 iki 32767.

• Jis turi 20 adresų linijų, kurios suteikia 1 M adresų erdvę.

Page 5: Intel 80x86 kompiuterių funkcionavimo pagrindai

Valdymo įrenginys

Page 6: Intel 80x86 kompiuterių funkcionavimo pagrindai

Registrai

• 80x86 procesoriaus registrai yra sugrupuoti į dvi kategorijas:

▫ bendros paskirties;

▫ adresų.

• Bendros paskirties pagrindinis tikslas yra duomenų manipuliacija ir perdavimas;

• Adresų registrai saugo atminties adresus ir yra naudojami nurodyti į atminties vietas, kur duomenys bus saugomi ar iš kur bus nuskaitomi.

Page 7: Intel 80x86 kompiuterių funkcionavimo pagrindai

Bendros paskirties registrai

• Yra 8 bendros paskirties registrai:

▫ AH;

▫ AL;

▫ BH;

▫ BL;

▫ CH;

▫ CL;

▫ DH;

▫ DL.

• Kiekvienas iš šių registrų yra 8 bitų.

Page 8: Intel 80x86 kompiuterių funkcionavimo pagrindai

Bendros paskirties registrai

• Anksčiau mineta, kad 80186 procesorius yra 16 bitų procesorius. Tai kaip šie registrai gali būti tik 8 bitų?

• 80186 procesorius sukuria 16 bitų registrą sujungdamas du 8 bitų registrus.

• Pavyzdţiui AH ir AL registrai gali funkcionuoti kaip pora.

• Šis didesnis registras mums ţinomas kaip AX. • Šie du registrai sujungiami taip, kad 8 AH bitai būtų

aukščiausi reikšminiai, o 8 AL bitai – maţiausi reikšminiai AX registro bitai.

• Pavyzdţiui jei registras AH lygus 101100002 = B016, o AL lygus 010111112 = 5F16, tai virtualusis registras AX bus lygus 10110000010111112 = B05F16.

Page 9: Intel 80x86 kompiuterių funkcionavimo pagrindai

• AX yra vadinamas akomuliatoriaus (accumulator) registras, kuris daţniausiai yra naudojamas aritmetinių, loginių ir bendirms duomenų perdavimams.

• Daugelyje asemblerio kalbų aukštesnio lygio matematinės operacijos, tokios kaip daugyba ar dalyba, net neleidţiamos programuotojui nurodyti kitokiame nei AX registre.

Page 10: Intel 80x86 kompiuterių funkcionavimo pagrindai

• BX yra vadinamas pagrindo (base) registru, ir naudojamas kaip pagrindo adresas ar rodyklė į tokius duomenis kaip masyvas.

• Vėliau suţinosime, kad yra daugiau registrų, kurie naudojami kaip rodyklės, tačiau šie yra tam tikros paskirties rodyklės.

• BX yra labiau bendros paskirties rodyklės.

Page 11: Intel 80x86 kompiuterių funkcionavimo pagrindai

• CX vadinamas skaitliuko (counter) registru. Kuomet programa naudoja ciklą, ciklo indeksas daţniausiai yra saugomas šiame registre.

• Intel sukūrė nemaţai specialios paskirties registrų, kurie naudoja CX norint geriau valdyti „išėjimą“ iš ciklų.

Page 12: Intel 80x86 kompiuterių funkcionavimo pagrindai

• DX vadinamas duomenų (data) registru.

• Šis registras naudojamas su AX specialioms aritmetinėms funkcijoms, leidţiant išsaugoti tokius dalykus kaip labiausiai reikšminių bitų saugojimui sudauginus 16 bitų skaičius ir gavus 32 bitų skaičių, ar saugojant liekaną, padalinus skaičių.

Page 13: Intel 80x86 kompiuterių funkcionavimo pagrindai

Adresų registrai

• Ţemiau bendros paskirties registrų yra adresų registrai:

▫ SP;

▫ BP;

▫ DI;

▫ SI;

▫ IP.

• Jie yra 16 bitų registrai, skirti saugoti adresus, pagal kuriuos kreipiamasi į atminties vietas.

Page 14: Intel 80x86 kompiuterių funkcionavimo pagrindai

Adresų registrai

• Šie adresų registrai yra skirstomi į dvi grupes:

▫ Rodyklių registrai SP, BP ir IP;

▫ Indeksų registrai DI ir SI.

• Jie visi veikia tokia pačia maniera, t.y. nurodo į adresą atmintyje, o kiekvienas iš registrų turi specialią paskirtį.

Page 15: Intel 80x86 kompiuterių funkcionavimo pagrindai

• SP yra steko rodyklė (stack pointer) ir ji rodo į paskutinių saugomų steke duomenų adresą.

• Ką nors išsaugojus į steką, steko rokylė yra sumaţinama saugomos reikšmės dydţiu, t.y. SP yra sumaţinama 2 jei rašomas ţodis arba 4, jei rašomas dvigubas ţodis.

• Jei duomenys nuo steko nuskaitomi, tai ši rodyklė analogiškai sumaţinama.

Page 16: Intel 80x86 kompiuterių funkcionavimo pagrindai

• BP yra pagrindo rodyklė ir jis pagrinde naudojamas nurodyti į parametrus, kurie perduodami funkcijai ją iškviečiant.

• Pavyzdţiui jei funkcija myfunc(var1, var2) iškviečiama, tai var1 ir var2 yra talpinami steko laikinojoje atmintyje.

• BP nurodytas adresas į steką, kur kintamieji prasideda.

Page 17: Intel 80x86 kompiuterių funkcionavimo pagrindai

• IP yra instrukcijų registras. • Kaip jau minėjome prieš tai, centrinis procesorius

keliauja ţingsnis po ţingsnio per atmintį įkeliant, interpretuojant ir tuomet vykdant mechaninį kodą.

• Jis naudoja atminties adresus, laikomus IP registre kaip paţymėtą nurodymą kur gauti sekančią instrukciją.

• Kiekvieną kartą gavus instrukciją, IP reikšmė padidinama tiek, kad vėl rodytų į sekančią instrukciją, kurią reikės vykdyti.

• Kaikuriais atvejais instrukcijų dekoderiui reikia IP reikšmę padidinti keletą kartų, kad praleisti duomenis ar operandus, kurie seka po instrukcijos mašininiame kode, iki kol sutiks sekančią instrukciją.

Page 18: Intel 80x86 kompiuterių funkcionavimo pagrindai

• SI yra šaltinio indeksas (source index), o DI –tikslo indeksas (destination index).

• Juose taip pat talpinami adresai, kurie nurodo į atmintį.

• Jie naudojami eilučių operacijoms, kur eilutės gali būti kopijuojamos, ieškomos ar kitaip manipuliuojamos.

• SI nurodo į atminties vietas, iš kurių simboliai yra gaunami, o tuo tarpu DI nurodo į atminties vietas, kur simboliai bus saugomi.

Page 19: Intel 80x86 kompiuterių funkcionavimo pagrindai

Vėliavėlės

• 80x86 procesoriaus vėlevėlės yra 16 bitų registre.

• Ne visi 16 bitų yra naudojami ir nėra svarbu atsiminti tikslią bito pozicija kiekvienai vėliavėlei, esančiai registre.

• Svarbiau yra suprasti kiekvienos vėliavėlės paskirtį.

• Kaip pamenate, vėliavėlės parodo dabartinę procesoriaus būseną.

• 80x86 procesoriuose vėliavėlės yra suskirstytos į dvi kategorijas:

▫ valdymo vėliavėles;

▫ būsenos vėliavėles.

Page 20: Intel 80x86 kompiuterių funkcionavimo pagrindai

Valdymo vėliavėlės

• Valdymo vėliavėlės yra valdomos programine įranga, taip leidţiant keisti procesorius veikimą. Jų yra trys:▫ Spąstų vėliavėlė (TF – trap flag) yra naudojama klaidų

aptikimo tikslams, leidţiant kodą vykdyti po vieną instrukciją vienu metu. Tai leidţia programuotojui eiti kodu adresas po adreso, taip galint stebėti kaip vyksta kiekviena instrukcija.

▫ Krypties vėliavėlė (DF – direction flag) yra susieta su eilučių operacijomis. Jei tiksliau, tai DF nurodo ar eilutės bus perţiūrimos pagal ar prieš abėcelę. Ši vėlevėlė 80x86 procesoriaus naudojama automatizuoti eilučių operacijas.

▫ Pertraukimų vėliavėlė (IF – interrupt flag) naudojama įgalinti šią funkciją arba ne. Jei ši vėlevėlė nustatyta į loginį 1, tai pertraukimai apdorojami, o jei į loginį 0, tai maskuojami pertraukimai tiesiog ignoruojami.

Page 21: Intel 80x86 kompiuterių funkcionavimo pagrindai

Būsenos vėliavėlės

• Likusios vėliavėlės yra būsenos vėliavėlės. Jų yra šešios:• Perpildymo vėliavėlė (OF – Overflow flag) parodo kada

matematinėje operacijoje buvo perpildymas (netilpo į nustatytą dydį).▫ Ţenklo vėliavėlė (SF – Sign flag) atspindi ţenklo bitą

matematinėse ar loginėse operacijose, t.y. ši vėlevėlė lygi loginiam 0, kai rezultatas teigiamas ir loginiam 1 – kai neigiamas.

▫ Nulio vėliavėlė (ZF – Zero flag) yra prilyginama loginiam 1, kuomet matematinių ar loginių operacijų rezultatas yra lygus nuliui, kitu atveju ji lygi loginiam 0.

▫ Pagalbinio pernešimo vėliavėlė (AF – Auxiliary carry flag) lygi pernešinui iš 3 bitų kolonos, kuris pridedamas prie 4 bitų kolonos.

▫ Lygybės vėliavėlė (PF – Parity flag) nustatoma į loginį 1, jei rezultate yra lyginis vienetų skaičius, o jei vienetų skaičius nelyginis, ši vėlevėlė būna lygi loginiam 0.

▫ Pernešimo vėliavėlė (CF – Carry flag) vaizduoja pernešimą iš labiausiai reikšminio bito.

Page 22: Intel 80x86 kompiuterių funkcionavimo pagrindai

Pavyzdys

• Perpildymo vėliavėlė = 1; Buvo pernešimas, t.y. sudedant neigiamus skaičius rezultatas gavosi teigiamas skaičius.

• Ţenklo vėliavėlė = 0; Rezultatas yra teigiamas skaičius.• Nulio vėliavėlė = 0; Rezultatas nelygus nuliui.• Pagalbinio pernešimo vėliavėlė =0; Nebuvo pernešimo iš

ketvirtos kolonos (3 bito) į penktą koloną (4 bitą).• Lygybės vėliavėlė = 1; Rezultate yra keturi vienetai, o tai

lyginis vienetų skaičius.• Pernešimo vėliavėlė = 1; Buvo pernešimas.

Pavyzdţiui kaip atrodys vėliavėlės atlikus 8 bitų sudėtį 101101012 + 100101102?

Page 23: Intel 80x86 kompiuterių funkcionavimo pagrindai

Vidinės magistralės

• Vykdymo įrenginyje yra dvi vidinės magistralės, kurios naudojamos perduoti informaciją tarp jo komponentų.

• Pirmoji yra skirta keistis duomenimis ir adresavimo informacija tarp registrų ir aritmetinio-loginio įtaiso (ALU). Ji taip pat naudojama perduoti duomenis į atmintį ir iš atminties, naudojantis magistralės sąsajos įrenginiu.

• Kiekviena asemblerio kalbos instrukcija, kuri naudoja operandus, privalo perkelti tuos operandus iš jų šaltinio į paskyrimo vietą. Šie perdavimai vyksta duomenų magistralėje.

• Sekanti magistralė turi tik vieną tikslą: perduoti instrukcijas, kurios magistralės sąveikos įrenginio buvo išgautos instrukcijų dekoderiui, kuris yra vykdymo įrenginio valdymo sistemoje.

Page 24: Intel 80x86 kompiuterių funkcionavimo pagrindai

Magistralės sąveikos įrenginys

• Magistralės sąveikos įrenginys (BUI – Bus Interface Unit) valdo informacijos perdavimą tarp procesoriaus ir išorinių įrenginių, tokių kaip atmintis, Į/I portai ir saugojimo įrenginiai.

• Jis veikia kaip tiltas tarp vykdymo įrenginio ir išorinės magistralės.

• Dalis instrukcijų dekoderio yra patalpinta magistralės s1veikos įrenginyje.

• Tokia instrukcijų eilė elgiasi kaip buferis, leidţiantis instrukcijas statyti į eilę belaukiant kol jos bus aptarnaujamos vykdymo įrenginyje.

Page 25: Intel 80x86 kompiuterių funkcionavimo pagrindai

Magistralės sąveikos įrenginys

Pagrindinė BUI paskirtis yra paimti 16 bitų vykdymo įrenginio arba atminties rodyklę, ir ją modifikuoti taip, kad ji galėtų nurodyti į duomenis 20 bitų adresų erdvėje.

Page 26: Intel 80x86 kompiuterių funkcionavimo pagrindai

Segmentų adresavimas

• Kaip 16 bitų duomenų registrais galima nurodyti 20 bitų adresą adresų magistralei?

• Intel procesoriuje adresas nurodomas naudojant du adresų registrus, kur vienas nurodo segmentą, o kitas – vietą tame segmente

• Intel paremtoje operacinėje sistemoje gavus klaidą, kartais pateikiama kuriame adrese ji įvyko

• Tai pateikiama šešioliktaine forma 3241:A32E

Page 27: Intel 80x86 kompiuterių funkcionavimo pagrindai

Segmentų adresavimas

• Toks formatas pateikia segmento registrą (skaičius dvitaškio kairėje) ir rodyklės arba indekso registrą (skaičius dvitaškio dešinėje).

• Keturi šešioliktainės skaičių sistemos skaitmenys reiškia 16 bitų dvejetainį skaičių, o šių 16 bitų registrų kombinacija sukuria 20 bitų adresą

• Tai atliekama sudedant:

Page 28: Intel 80x86 kompiuterių funkcionavimo pagrindai

Segmentų adresavimas

• 20 bitų reikšmė, kuri gaunama prie segmento registro dešinėje prirašius keturis nulius, vadinama segmento adresu. Ji nurodo į maţiausią adresą į kurį segmento rodyklės kombinacija gali nurodyti. Šis adresas dar gali būti ţinomas, kaip segmento pagrindo adresas.

• 16 bitų reikšmė, saugoma rodyklės ar indekso registre, vadinama atšakos adresu. Jis vaizduoja atšaką nuo segmento adreso į adresą atmintyje, su kuriuo procesorius nori bendrauti.

• 20 bitų reikšmė, kuri gauta adresų sumavimo bloke, rodo į tam tikrą adresą procesoriaus adresų erdvėje. Šis adresas vadinamas fiziniu adresu ir tai tas pats adresas, kuris talpinamas adresų linijose atminties magistralėje.

Page 29: Intel 80x86 kompiuterių funkcionavimo pagrindai

Segmentų adresavimas

Page 30: Intel 80x86 kompiuterių funkcionavimo pagrindai

Segmentų adresavimo pliusai

• Naudojant 16 bitų registrus, galima nurodyti 20 bitų adresus

• Programa gali būti talpinama betkur, jei pirmąją adreso dalį nurodo operacinė sistema, o pati programa nurodo tik vietą tame segmente (kol įsitenka 64 K segmente)

Page 31: Intel 80x86 kompiuterių funkcionavimo pagrindai

Segmentų registrai• Kodo segmentas (CS – Code Segment). Šis registras saugo

segmento, priskirto saugoti programos kodą, pagrindo adresą. Jis yra suporuotas su instrukcijų rodykle (IP) nurodyti į sekančią instrukciją, kuri turi būti patalpinta į instrukcijų dekoderį vykdymui.

• Duomenų segmentas (DS – Data Segment). Šis registras nurodo segmento, skirto saugoti programos duomenims, pagrindo adresą. Jis daţniasuia siejamas su SI registru.

• Steko Segmentas (SS – Stack Segment). Šiame segmente saugomas steko segmento pagrindo adresas. Kaip prisimenate, yra du registrai, kurie naudoja steką. Pirmasis yra steko rodyklė, o SS ir SP kombinacija rodo į paskutinę įrašytą į laikinąją atmintį reikšmę. Kitas registras yra pagrindo rodyklė, kuris yra naudojamas nurodyti duomenų elementų bloko perdavimą funkcijai.

• Papildomas segmentas (ES – Extra Segment). Kaip DS, šis registras rodo į duomenų segmentą, priskirtą programai. Kadangi DS yra susietas su SI registru, tai ES susietas su DI registru.

Page 32: Intel 80x86 kompiuterių funkcionavimo pagrindai

Pavyzdys

• Jei CS lygus A48716, o IP lygu 143616, tai koks yra sekančios instrukcijos adresas fizinėje atmintyje?

• Tai išsiaiškiname prie A48716 dvejetainio kodo prirašę keturis nulius iš dešinės ir sudėję su 143616.

Kaip matome, gavome, kad uţrašas A487:1436 atitinka fizinį adresą A5CA616.

Page 33: Intel 80x86 kompiuterių funkcionavimo pagrindai

Instrukcijų eilė

• 80186 vykdymo procesą sudalina į tris ciklus: uţkrovimas, dekodavimas ir vykdymas. Kiekvienas iš šių ciklų apibudintas ţemiau.▫ Uţkrovimas – iš atminties gaunama kita instrukcija, kurią reikės

vykdyti. Uţ tai atsakingas BUI.▫ Dekodavimas – nustatoma kurias grandines suaktyvinti, kad būtų

vykdoma uţkrauta instrukcija. Ši funkcija yra vykdoma EU valdymo sistemos instrukcijų dekodavimo grandinėje.

▫ Vykdymas – vykdoma operacija, nurodyta instrukcijos, naudojant ALU, registrus ir duomenų perdavimo mechanizmus.

• BUI instrukcijų eilės tikslas yra saugoti uţkrautų instrukcijų, kurias turės vykdyti EU, seką. Kai kuriais atvejais išsišakojimai ar sugrįţimai iš funkcijos gali sugriauti instrukcijų eilę ir reikalauti numatytos vykdymo tvarkos keitimo. Aukštesnio lygio instrukcijų eilė gali su tuo susidoroti įkeliant abu galimus vykdymo kelius, leidţiant EU nustatyti kuris kelias bus reikalingas po dabar vykdomos instrukcijos.

Page 34: Intel 80x86 kompiuterių funkcionavimo pagrindai

Į/I• Norint bendrauti su išoriniais įrenginiais,

neuţimant 80x86 procesoriaus 1 M atminties erdvės erdvės, magistralėje yra pridėtos dvi papildomos valdymo linijos, kurios efektyviai tampa dviem magistralėmis – viena atminčiai, o kita Į/I.

• Antroji magistralė naudoja tas pačias adresų ir duomenų linijas, kurios yra naudojamos atminties magistralėje. Skirtumas yra tas, kad Į/I įrenginiai naudoja skirtingas valdymo linijas.

Page 35: Intel 80x86 kompiuterių funkcionavimo pagrindai

Į/I• Skaityti duomenis iš atminties, 80x86 procesorius naudoja

ţemą MRDS signalą• Įrašyti duomenis į atmintį 80x86 procesoriuje naudojamas

ţemas signalas MWTC• Kai abu MRDC ir MWTC signalai yra aukšti (1), atminties

įrenginiai yra neaktyvūs. • Skaitymo valdymas iš Į/I portų yra vadinamas IORC, kuris

taip pat yra ţemo lygio• Į/I portų rašymo valdymo signalas vadinamas IOWC. Jis taip

pat yra aktyvus, kuomet ţemas

Funkcija MRDC MWTC IORC IOWC

Skaitymas iš atminties 0 1 1 1

Rašymas į atmintį 1 0 1 1

Skaitymas iš Į/I įrenginio 1 1 0 1

Rašymas į Į/I įrenginį 1 1 1 0

Page 36: Intel 80x86 kompiuterių funkcionavimo pagrindai

Į/I• Nors atminis ir Į/I įrenginiai naudojasi tomis pačiomis

adresų ir duomenų linijomis, tačiau yra skirtumas tarp atminties ir Į/I įrenginių naudojimo. ▫ nepriklausomai nuo 80x86 procesoriaus kartos, tik

ţemiausios 16 adresų linijų yra naudojama Į/I portams. Tai reiškia, kad net jei adresų erdvė bus 4 G, Į/I portų adresų erdvė visvien bus tik 64 K. Tačiau tai nėra didelė problema, nes išorinių įrenginių poreikis neauga taip sparčiai, kaip kad atminties erdvė.

▫ programuotojui keliami kitokie reikalavimai. Mes dar nesusipaţinome su 80x86 asemblerio klabos instrukcijų rinkiniu, tačiau tikriausiai daugelis jūsų ţino, kad asemblerio kalboje duomenų perdavimui naudojama instrukcija MOV. Tačiau ši komanda negali būti naudojama duomenų perdavimui ar gavimui iš Į/I portų, nes ji naudoja MRDC ir MWTC signalus magistralės valdymui. Siųsti duomenis į Į/I portą asemblerio kalboje naudojama komanda OUT arba OUTS, o tuo tarpu skaitymui, komanda IN arba INS.