4 - arhitektura racunara i instrukcije procesora

12
4-1 4. ARHITEKTURA RAČUNARA I INSTRUKCIJE PROCESORA Elemente arhitekture računara čine programski dostupni registri, tipovi podataka, formati instrukcija, načini adresiranja, skup instrukcija i mehanizam prekida. 4.1 Programski dostupni registri Programski dostupni registri procesora su registri u koje je moguće programskom putem izvršavanjem instrukcija procesora upisivati vrednosti i iz kojih je moguće programskom putem izvršavanjem instrukcija procesora očitavati vrednosti. Vrednost koja se u neki od ovih registara upisuju u nekom od koraka izvršavanja instrukcije koriste se u nekom ili nekim kasnijim koracima izvršavanja te iste instrukcije, ali ne neke od sledećih instrukcija. Upisivanje vrednosti u ove registre i čitanje vrednosti iz ovih registara je nemoguće specificirati instrukcijama. To je određeno usvojenim algoritmima izvršavanja svake instrukcije posebno. Ovi registri su deo organizacije računara. Funkcije i broj programski dostupnih registara se razlikije od procesora do procesora. Ovde se daju oni programski dostupni registri koji se često sreću kod komercijalno raspoloživih procesora i to programski brojač PC, registri podataka DR, adresni registri AR, bazni registar BR, indeksni registri XR, registri opšte namene GPR, programska statusna reč PSW, ukazivač na vrh steka SP i ukazivač na okvir steka FP. Programski brojač PC je standardni programski brojač procesora čija se vrednost implicitno koristi kao adresa memorijske lokacije sa koje se čita instrukcija. Vrednost programskog brojača PC se menja i to implicitno prilikom svakog čitanja instrukcije kada se vrši inkrementiranje programskog brojača PC i eksplicitno instrukcijama skoka kada se u programski brojač brojač PC upisuje nova vrednost.

Upload: mirko-mirkovic

Post on 17-Dec-2015

100 views

Category:

Documents


6 download

DESCRIPTION

j

TRANSCRIPT

  • 4-1

    4.

    ARHITEKTURA RAUNARA I INSTRUKCIJE PROCESORA

    Elemente arhitekture raunara ine programski dostupni registri, tipovi podataka, formati

    instrukcija, naini adresiranja, skup instrukcija i mehanizam prekida.

    4.1 Programski dostupni registri

    Programski dostupni registri procesora su registri u koje je mogue programskom putem

    izvravanjem instrukcija procesora upisivati vrednosti i iz kojih je mogue programskom putem

    izvravanjem instrukcija procesora oitavati vrednosti. Vrednost koja se u neki od ovih registara

    upisuju u nekom od koraka izvravanja instrukcije koriste se u nekom ili nekim kasnijim

    koracima izvravanja te iste instrukcije, ali ne neke od sledeih instrukcija. Upisivanje vrednosti

    u ove registre i itanje vrednosti iz ovih registara je nemogue specificirati instrukcijama. To je

    odreeno usvojenim algoritmima izvravanja svake instrukcije posebno. Ovi registri su deo

    organizacije raunara.

    Funkcije i broj programski dostupnih registara se razlikije od procesora do procesora. Ovde

    se daju oni programski dostupni registri koji se esto sreu kod komercijalno raspoloivih

    procesora i to programski broja PC, registri podataka DR, adresni registri AR, bazni registar

    BR, indeksni registri XR, registri opte namene GPR, programska statusna re PSW, ukaziva

    na vrh steka SP i ukaziva na okvir steka FP.

    Programski broja PC je standardni programski broja procesora ija se vrednost

    implicitno koristi kao adresa memorijske lokacije sa koje se ita instrukcija. Vrednost

    programskog brojaa PC se menja i to implicitno prilikom svakog itanja instrukcije kada se vri

    inkrementiranje programskog brojaa PC i eksplicitno instrukcijama skoka kada se u programski

    broja broja PC upisuje nova vrednost.

  • 4-2

    Registri podataka DR se koriste kod registarskog direktnog adresiranja. Registrima

    podataka se pristupa programskim putem instrukcijama prenosa i aritmetikim, logikim i

    pomerakim instrukcijama. Registri podataka se uvode da bi se ubrzao pristup podacima, tako

    to bi se tokom izvravanja programa pristupalo podacima u registrima podataka procesora

    umesto u memorijskim lokacijama, a rezultat je injenice da je pristup registrima skoro za red

    veliine bri od pristupa memorijskim lokacijama. Korienje registara podataka radi ubrzavanja

    pristupa podacima ima smisla ukoliko se u toku nekog raunanja javi potreba da se via puta

    koristi neki podatak.

    Adresni registri AR se koriste kod registarskog indirektnog adresiranja i autoinkrement i

    autodekrement naina adresiranja. Adresni registri se uvode da bi se ubrzao pristup adresama,

    tako to bi se tokom izvravanja programa pristupalo adresama u adresnim registrima procesora

    umesto u memorijskim lokacijama, a rezultat je injenice da je pristup registrima skoro za red

    veliine bri od pristupa memorijskim lokacijama.

    Bazni registri BR se koriste kod baznog i bazno-indeksnog adresiranja. Zbir sadraja

    specificiranog baznog registra i pomeraja kod baznog adresiranja, odnosno baznog registra,

    indeksnog registra i pomeraja kod bazno-indeksnog adresiranja, predstavlja adresu memorijske

    lokacije na kojoj se nalazi izvorini ili odredini operand.

    Indeksni registri XR se koriste kod indeksnog i bazno-indeksnog adresiranja. Zbir

    sadraja specificiranog indeksnog registra i pomeraja kod indeksnog adresiranja, odnosno

    baznog registra, indeksnog registra i pomeraja kod bazno-indeksnog adresiranja, predstavlja

    adresu memorijske lokacije na kojoj se nalazi izvorini ili odredini operand.

    Registri opte namene GPR se koriste na isti nain kao registri podataka, adresni registri,

    bazni registri i indeksni registri. Registri opte namene GPR se javljaju kod onih procesora kod

    kojih ne postoje posebni registri podataka, adresni registri, bazni registri i indeksni registri. Za

    razliku od procesora sa posebnim registrima podataka, adresnim registrima, baznim registrima i

    indeksnim registrima, gde se registri iz svake grupe registara koriste samo uz odgovarajua

    adresiranja, procesori sa registrima opte namene mogu da koriste bilo koji od registara uz bilo

    koje adresiranje.

    Registar PSW je standardna programska statusna re procesora sastavljena od odreenog

    broja bitova, koji se obino nazivaju indikatori. Bitovi programske statusne rei PSW se

    nezavisno postavljaju i koriste po pravilima definisanim posebno za svaki bit. U programskoj

  • 4-3

    statusnoj rei PSW postoje dve grupe bitova i to bitovi statusnog i bitovi upravljakog karaktera.

    Na slici 1 je prikazana tipina struktura PSW registra.

    Slika 1. Struktura registra PSW

    Bitovi statusnog karaktera su:

    - Nbit koji se postavlja na 1 u sluaju da je rezultat operacije negativan,

    - Zbit koji se postavlja na 1 u sluaju da je rezultat operacije jednak 0,

    - Cbit koji se postavlja na 1 u sluaju prenosa/pozajmice u aritmetici celobrojnih

    veliina bez znaka i

    - Vbit koji se postavlja na 1 u sluaju prekoraenja u aritmetici celobrojnih veliina sa

    znakom.

    Bit upravljakog karaktera je:

    - Ibit koji je jednak 1 ako treba da budu dozvoljeni maskirajui prekidi.

    Bitovi statusnog karaktera N, Z, C i V, se postavljaju hardverski na osnovu rezultata

    izvravanja instrukcija, a proveravaju softverski instrukcijama uslovnog skoka. Bitovi

    upravljakog karaktera se postavljaju softverski kao rezultat izvravanja posebnih instrukcija, a

    proveravaju hardverski u saglasnosti sa algoritmom izvravanja instrukcija.

    Registar SP je ukaziva na vrh steka kada je stek je organizovan u operativnoj memoriji.

    Registar SP se pojavljuje u procesorima kao podrka za realizaciju LIFO strukture podataka.

    Prilikom upisa u LIFO strukturu podataka ili itanja iz LIFO strukture podataka sadraj registra

    SP se koristi kao adresa memorijske lokacije u koju treba upisati podatak ili iz koje treba oitati

    podatak. Tom prilikom se vri i auriranje i to inkrementiranje ili dekrementiranje sadraja

    registra SP. LIFO strukturu podataka je mogue realizovati na etiri naina u zavisnosti od toga

    da li se kod upisa vri inkrementiranje ili dekrementiranje sadraja registra SP, pa se kae da stek

    raste prema viim ili prema niim lokacijama, i da li sadraj registra SP ukazuje na zadnju

    zauzetu lokaciju ili prvu slobodnu lokaciju.

    Stek raste prema viim lokacijama a registar SP ukazuje na zadnju zauzetu lokaciju

    Kod upisa na stek najpre se vri inkrementiranje registra SP, pa sa posle toga sadraj

    registra SP koristi kao adresa memorijske lokacije u koju se upisuje. Kod itanja sa steka najpre

  • 4-4

    se sadraj registra SP koristi kao adresa memorijske lokacije sa koje se ita sadraj, pa se posle

    toga vri dekrementiranje sadraja registra SP.

    Stek raste prema viim lokacijama a registar SP ukazuje na prvu slobodnu lokaciju

    Kod upisa na stek najpre se sadraj registra SP koristi kao adresa memorijske lokacije u

    koju se upisuje, pa se posle toga vri inkrementiranje registra SP. Kod itanja sa steka najpre se

    vri dekrementiranje sadraja registra SP, pa se posle toga sadraj registra SP koristi kao adresa

    memorijske lokacije sa koje se ita sadraj.

    Stek raste prema niim lokacijama a registar SP ukazuje na zadnju zauzetu lokaciju

    Kod upisa na stek najpre se vri dekrementiranje registra SP, pa sa posle toga sadraj

    registra SP koristi kao adresa memorijske lokacije u koju se upisuje. Kod itanja sa steka najpre

    se sadraj registra SP koristi kao adresa memorijske lokacije sa koje se ita sadraj, pa se posle

    toga vri dekrementiranje sadraja registra SP.

    Stek raste prema niim lokacijama a registar SP ukazuje na prvu slobodnu lokaciju

    Kod upisa na stek najpre se sadraj registra SP koristi kao adresa memorijske lokacije u

    koju se upisuje, pa se posle toga vri dekrementiranje registra SP. Kod itanja sa steka najpre se

    vri inkrementiranje sadraja registra SP, pa se posle toga sadraj registra SP koristi kao adresa

    memorijske lokacije sa koje se ita sadraj.

    Ukaziva na okvir steka FP (frame pointer ili base pointer, BP) ukazuje na bazu okvira

    (frame-a) koji se formira na steku kod poziva potprograma. Koristi se za pristup:

    - parametrima koji se predaju kod poziva potprograma i

    - lokalnim promenljivim veliinama kod jezika sa dinamikim dodeljivanjem

    prostora kod ulaska u potprogram i oslobaanjem prostora kod naputanja

    potprograma.

    4.2 Instrukcije procesora

    Rad procesora je odreen instrukcijama koje on izvrava, a koje se zovu mainske

    instrukcije ili raunarske instrukcije. Skup razliitih instrukcija koje procesor moe da izvri se

    zove skup instrukcija procesora. Skup standardnih instrukcija ine instrukcije prenosa,

  • 4-5

    aritmetike instrukcije, logike instrukcije, instrukcije pomeranja i rotiranja, instrukcije skoka i

    meovite instrukcije. U tabeli 1 su date osnovne instrukcije procesora.

    Tabela 1. Osnovne instrukcije procesora

    Instrukcije

    prenosa

    MOV a,b Prebacivanje podatka iz jedne lokacije u drugu

    IN a,b

    Prebacivanje iz registra kontrolora periferije a u registar

    procesora b

    OUT a,b Prebacivanje iz registra procesora a u registar kontrolora

    periferije b

    LOAD a Prebacivanje podatka sa lokacije a u akumulator

    STORE a Smetanje podatka iz akumulatora na lokaciju a

    PUSH a Podatak sa lokacije a se smeta na stek (moe biti i bezadresna, tada se podrazumeva akumulator kao izvor)

    POP a Podatak sa steka se smeta na lokaciju a (moe biti i bezadresna, tada se podrazumeva akumulator kao odredite)

    Aritmetike instrukcije

    ADD a,b,c

    ADD a,b

    ADD a

    ADD

    Sabiranje operanada sa lokacija a i b i smetanje na lokaciju c; kod dvoadresne instrukcije jedan od operanada je i

    odredite; kod jednoadresne instrukcije jedan izvor i odredite je akumulator; kod bezadresne instrukcije vrh steka je implicitan izvor i odredite

    SUB a,b,c

    SUB a,b

    SUB a

    SUB

    Oduzimanje

    MUL a,b,c

    MUL a,b

    MUL a

    MUL

    Mnoenje

    DIV a,b,c

    DIV a,b

    DIV a

    DIV

    Deljenje

    INC a,b

    INC a

    INC

    Inkrementiranje operanda sa lokacije a i smetanje na lokaciju b; kod jednoadresne instrukcije odredite je lokacija a, kao i izvor; kod bezadresne instrukcije vrh steka je

    implicitno odredite i izvor

    DEC a,b

    DEC a

    DEC

    Dekrementiranje

    Logike instrukcije

    AND a,b,c

    AND a,b

    AND a

    AND

    Operacija logiko I

    OR a,b,c

    OR a,b

    Operacija logiko ILI

  • 4-6

    OR a

    OR

    XOR a,b,c

    XOR a,b

    XOR a

    XOR

    Operacija logiko XOR

    NOT a,b

    NOT a

    NOT

    Operacija komplementiranja

    Instrukcije

    pomeranja

    ASR a,b

    ASR a

    ASR

    Aritmetiko pomeranje udesno; na mesto novog MSB bita se upisuje stari MSB bit

    ASL a,b

    ASL a

    ASL

    Aritmetiko pomeranje ulevo; na mesto novog LSB bita se upisuje 0

    LSR a,b

    LSR a

    LSR

    Logiko pomeranje udesno; na mesto novog MSB bita se upisuje 0

    LSL a,b

    LSL a

    LSL

    Logiko pomeranje ulevo; na mesto novog LSB bita se upisuje 0

    ROR a,b

    ROR a

    ROR

    Rotiranje udesno; na mesto novog MSB bita se upisuje stari

    LSB bit

    ROL a,b

    ROL a

    ROL

    Rotiranje ulevo; na mesto novog LSB bita se upisuje stari

    MSB bit

    RORC a,b

    RORC a

    RORC

    Rotiranje udesno sa prenosom; na mesto novog MSB bita se

    upisuje bit prenosa C, koji je jednak starom LSB bitu

    ROLC a,b

    ROLC a

    ROL

    Rotiranje ulevo sa prenosom; na mesto novog LSB bita se

    upisuje bit prenosa C, koji je jednak starom LSB bitu

    Instrukcije

    skoka

    JMP a Bezuslovni skok na adresu a, koja se upisuje u PC procesora

    kao naredna instrukcija za izvravanje

    JMPIND a Bezuslovni skok na adresu koja je specificirana operandom

    a

    BEQL a

    BNEQ a

    BGRTU a

    BGREU a

    BLSSU a

    BLEQU a

    BGRT a

    BGRE a

    BLSS a

    Instrukcije uslovnog skoka u zavisnosti od vrednosti

    indikatora u PSW-u; a je pomeraj u odnosu na PC na koji

    treba skoiti

  • 4-7

    BLEQ a

    BNEG a

    BNNG a

    BOVF a

    BNVF a

    JEQL a

    JNEQ a

    JGRTU a

    JGREU a

    JLSSU a

    JLEQU a

    JGRT a

    JGRE a

    JLSS a

    JLEQ a

    JNEG a

    JNNG a

    JOVF a

    JNVF a

    Instrukcije bezuslovnog skoka u zavisnosti od vrednosti

    indikatora u PSW-u; a je adresa na koju se skae

    JSR a Skok na potprogram na adresi a

    RTS Povratak iz potprograma

    INT a Skok na prekidnu rutinu na adresi a

    RTI Povratak iz prekidne rutine

    4.2.1 Elementi mainske instrukcije

    Svaka instrukcija mora da sadri informacije koje procesor zahteva za izvrenje. Elementi

    mainske instrukcije su:

    - Kod operacije, koji odreuje operaciju koja treba da se izvede. On predstavlja binarni kod

    koji jedinstveno odreuje svaku operaciju.

    - Referenca izvornog operanda, koja obuhvata jedan ili vie izvrnih operanada koji se

    koriste kao ulazi za izvrenje instrukcija.

    - Referenca rezultujueg operanda, koja obuhvata rezultujui operand, tj. rezultat izvrenja

    instrukcije.

    - Referenca na sledeu instrukciju, koja govori procesoru gde se nalazi sledea instrukcija

    koju treba izvriti posle zavretka tekue instrukcije.

    Sledea instrukcija koja treba da se izvri se nalazi u glavnoj memoriji ili na disku (kod

    sistema sa virtuelnom memorijom). U veini sluajeva, sledea instrukcija koja treba da se izvri

  • 4-8

    se nalazi neposredno iza tekue instrukcije. Na slici 2 je prikazan dijagram stanja instrukcijskog

    ciklusa.

    Slika 2. Dijagram stanja instrukcijskog ciklusa

    Operandi izvora i rezultata mogu da se nalaze u jednoj od sledee tri oblasti:

    1. Glavna ili virtuelna memorija,

    2. Registri procesora,

    3. U/I ureaji (u sluaju memorijski preslikanog ulaza/izlaza predstavlja adresu u glavnoj

    memoriji koja je rezervisana za dati ureaj).

    4.2.2 Predstavljanje instrukcija

    Unutar raunara, svaka instrukcija je predstavljena nizom bitova. Podeljena je na polja koja

    odgovaraju elementima instrukcije koji su njen sastavni deo. Jednostavan primer formata

    instrukcije je prikazan na slici 3. Za vreme izvrenja instrukcije, ona se uitava u registar za

    instrukcije IR, koji se nalazi u procesoru.

    Slika 3. Primer formata instrukcije

    Binarno predstavljene mainske instrukcije su teko razumljive za oveka. Stoga je

    uobiajena praksa da se koristi simboliko predstavljanje mainskih instrukcija. Operacioni

    kodovi se predstavljaju skraenicama koje se zovu mnemonici i ukazuju na odreenu operaciju.

    Neki od primera su ADD, SUB, LOAD, POP,, a primer kompletne instrukcije je:

  • 4-9

    ADD x,y,z

    Jezik u kome se koriste simboliko predstavljene mainske instrukcije se zove asembler.

    4.2.3 Vrste instrukcija

    Instrukcije se mogu klasifikovati po operacijama koje izvravaju i po broju adresnih polja

    koje koriste za svoje izvravanje. Stoga razlikujemo operacije koje se koriste za:

    - Obradu podataka (aritmetike i logike instrukcije),

    - Skladitenje podataka (memorijske instrukcije),

    - Pomeranje podataka (U/I instrukcije),

    - Upravljanje (testiranje i grananje).

    Po broju adresa razlikujemo sledee operacije:

    - Bezadresne (imaju samo kod operacije bez adresa operanada),

    - Jednoadresne (imaju kod operacije i prostor za jedan operand),

    - Dvoadresne (imaju kod operacije i prostor za dva operanda),

    - Troadresne (imaju kod operacije i prostor za tri operanda).

    Na slici 4 su uporeene tipine jednoadresne, dvoadresne i troadresne instrukcije, koje bi

    mogle da se upotrebe da bi se izraunala vrednost izraza Y = (A B) / [C + (D * E)]. Sa tri

    adrese, svaka instrukcija odreuje dve lokacije izvornih operanada i odredinu lokaciju

    operanada. Privremena lokacija T se koristi da se skladite meurezultati, kako ne bismo menjali

    sadraj nijedne od lokacija.

    Slika 4. Programi za izraunavanje izraza Y = (A B) / [C + (D * E)]

  • 4-10

    Troadresni formati instrukcija nisu uobiajeni zato to zahtevaju relativno dugaak format

    instrukcije da bi se smestile tri adresne reference. Kod dvoadresnih instrukcija i za binarne

    operacije, jedna adresa mora da ima dvostruku ulogu, kao operand i kao rezultat. Prema tome,

    instrukcija SUB Y, B izvodi raunanje Y B i skladiti rezultat u Y. Dvoadresni format

    smanjuje koliinu memorije potrebne za smetanje instrukcija, ali unosi i izvesnu nezgrapnost.

    Da bi se izbeglo menjanje vrednosti operanda, koristi se instrukcija MOVE kako bi se jedna od

    vrednosti prebacila u lokaciju za rezultat ili privremenu lokaciju pre nego to se izvede operacija.

    U ovom primeru, program se iri na est instrukcija.

    Jo jednostavnija je jednoadresna instrukcija. Da bi ona radila, druga adresa mora da bude

    implicitna. Implicitna adresa je obino registar u procesoru koji se naziva akumulator (Acc).

    Akumulator sadri jedan od operanada i koristi se za skladitenje rezultata. U ovom primeru,

    potrebno je osam instrukcija da bi se izvrio zadatak.

    Bezadresne instrukcije se mogu koristiti kod raunara koji poseduju specijalnu

    organizaciju memorije koja se zove stek. Stek je skup lokacija sa kojima se radi po pravilu LIFO

    (Last In, First Out), poslednji podatak koji se smesti na stek se prvi ita. Podatak se smeta na

    stek instrukcijom PUSH, a uzima sa steka instrukcijom POP.

    4.2.4 Vrste operanada

    Operandi predstavljaju podatke koji se mogu podeliti u etiri kategorije:

    1. Adrese (operand moe predstavljati adresu u operativnoj memoriji ili adresu

    registra),

    2. Brojevi,

    3. Znakovi,

    4. Logiki podaci.

    Brojevi u raunaru mogu biti predstavljeni u vidu tri tipa numerikih podataka:

    1. Celi brojevi (brojevi u fiksnom zarezu),

    2. Brojevi u pokretnom zarezu,

    3. Decimalni brojevi (predstavljeni BCD (engl. Binary Coded Decimal numbers)

    kodom).

    Znakovi se predstavljaju pomou binarnih kodova, od kojih je najzastupljeniji 7-bitni

    ASCII kod.

  • 4-11

    Logiki podaci u raunaru se predstavljaju pomou jednog bita koji ima vrednost 0 za

    netanu vrednost izraza (false) i 1 za tanu vrednost izraza (true).

    Zadatak 1. Na steku se nalaze simboli A, B, C i D, tako da je A na vrhu steka. Izraunati

    vrednost izraza (A3 + B + C) * D i smestiti ga na stek. Koristiti jednu pomonu lokaciju b i

    naredbe LOAD, STORE, POP, PUSH koje koriste akumulator, kao i jednoadresne aritmetike

    naredbe ADD i MUL, kod kojih je prvi operand u akumulatoru, drugi u memoriji, a rezultat

    ostaje u akumulatoru.

    Naredba Adresa Komentar

    POP (Acc) = A

    STORE b (b) = (Acc) = A

    MUL b (Acc) = (Acc) * (b) = A * A

    MUL b (Acc) = (Acc) * (b) = A * A * A

    STORE b (b) = A3

    POP (Acc) = B

    ADD b (Acc) = (Acc) + (b) = B + A3

    STORE b (b) = B + A3

    POP (Acc) = C

    ADD b (Acc) = C + B + A3

    STORE b (b) = C + B + A3

    POP (Acc) = D

    MUL b (Acc) = D * (C + B + A3)

    PUSH

  • 4-12

    Zadatak 2. Napisati program za izraunavanje izraza (X + Y) * Z W2, gde se X, Y, Z i W

    nalaze u memorijskim elijama sa adresama a, b, c i d, respektivno. Program ne sme da menja

    sadraj ovih elija. Na raspolaganju je i lokacija e na koju se smeta rezultat. Program napisati za

    raunar koji koristi jednoadresne naredbe.

    Instrukcija Komentar

    LOAD d (Acc) = W

    MUL d (Acc) = (Acc) * (d) = W2

    STORE e (e) = W2

    LOAD a (Acc) = X

    ADD b (Acc) = (Acc) + (b) = X + Y

    MUL c (Acc) = (Acc) * (c) = (X + Y) * Z

    SUB e (Acc) = (Acc) (e) = (X + Y) * Z W2

    STORE e (e) = (X + Y) * Z W2