09__AOK__Ligjërata 09__ Bashkësitë e instruksioneve - karakteristikat dhe funksionet -- MSc. Valdrin Haxhiu.pdf
Document Details

Uploaded by NiftyGodel
Kolegji "UBT"
Tags
Full Transcript
Kolegji UBT Arkitektura dhe organizimi i kompjuterëve Ligjërata 9 Bashkësitë e instruksioneve Karakteristikat dhe funksionet MSc. Valdrin Haxhiu MSc. Valdrin Haxhiu 12.1 Karakteristikat e instruksionit të kompjuterit Puna e procesorit përcaktohet nga instruksionet që i ekzekuton, që njihen si instru...
Kolegji UBT Arkitektura dhe organizimi i kompjuterëve Ligjërata 9 Bashkësitë e instruksioneve Karakteristikat dhe funksionet MSc. Valdrin Haxhiu MSc. Valdrin Haxhiu 12.1 Karakteristikat e instruksionit të kompjuterit Puna e procesorit përcaktohet nga instruksionet që i ekzekuton, që njihen si instruksionet e makinës ose instruksionet e kompjuterit. Bashkësia e instruksioneve të ndryshme që procesori mund t’i ekzekutojë njihet si bashkësia e instruksioneve (instruction set). Elementët e një instruksioni të kompjuterit Çdo instruksion duhet të përmbajë informacionin e kërkuar nga procesori për ekzekutim. Figura 12.1, që është përsëritje e Figura 3.6, paraqet hapat që përfshihen në ekzekutimin e instruksionit dhe definon elementët e një instruksioni të kompjuterit. Këta elementë janë: Kodi i operacionit (operation code): Tregon operacionin që do të kryhet (p.sh. ADD, H/D). Operacioni specifikohet me një kod (varg) binar, i njohur si kodi i operacionit ose opcode. Referenca (adresa) e operandit të burimit (source operand reference): Operacioni mund të përfshijë një ose më shumë operandë (vlera), që nënkupton operandët që përdoren si hyrje për operacionin. Figura 12.1 – Diagrami i gjendjeve të ciklit të instruksionit Referenca (adresa) e operandit të rezultatit (result operand reference): Operacioni mund të japë një rezultat. Referenca (adresa) e instruksionit të ardhshëm (next instruction reference): Kjo i tregon procesorit ku të marrë instruksionin e radhës pas përfundimit të ekzekutimit të instruksionit aktual. Adresa e instruksionit të ardhshëm që do të merret mund të jetë një adresë fizike ose një adresë virtuale, varësisht prej arkitekturës. Në shumicën e rasteve, instruksioni i radhës që do të merret 1 MSc. Valdrin Haxhiu ndodhet pas instruksionit aktual. Në ato raste, nuk ka referencë eksplicite për instruksionin e radhës. Kur të nevojitet një referencë eksplicite, atëherë duhet të ofrohet një adresë e memories DRAM ose një adresë virtuale. Mënyra se si ofrohet adresa do të diskutohet në ligjëratën 10. Operandët e burimit dhe të rezultatit mund të jenë në njërin nga këto katër vende: Në memorien DRAM ose në memorien virtuale: Njëjtë sikur me referencat e instruksionit të ardhshëm, duhet të ofrohet adresa e DRAM-it ose memories virtuale. Në regjistër të procesorit: Me pak përjashtime, një procesor përmban një ose më shumë regjistra që mund të referencohen (qasen) me instruksione të kompjuterit. Nëse ekziston vetëm një regjistër, referenca e tij mund të jetë implicite. Nëse ekziston më shumë se një regjistër, atëherë secilit regjistër i vendoset një emër ose numër dhe instruksioni duhet patjetër të përmbajë numrin e regjistrit të caktuar. Menjëherë (immediate): Vlera e operandit gjendet në një fushë në instruksionin që ekzekutohet. Pajisje për H/D: Instruksioni duhet patjetër të specifikojë modulin për H/D dhe pajisjen për operacionin. Paraqitja e instruksionit Brenda një kompjuteri, çdo instruksion paraqitet përmes një vargu të bitëve. Instruksioni ndahet në fusha, që u takojnë elementëve përbërës të instruksionit. Një shembull i thjeshtë i një formati të instruksionit është paraqitur në Figura 12.2. Figura 12.2 – Një format i thjeshtë i instruksionit Si shembull tjetër, formati i instruksionit të kompjuterit IAS është paraqitur në Figura 2.2. Në shumicën e bashkësive të instruksioneve, përdoret më shumë se një format. Gjatë ekzekutimit të instruksionit, instruksioni vendoset në regjistrin e instruksionit (IR) në procesor. Procesori duhet të jetë në gjendje të nxjerrë të dhënat prej fushave të ndryshme të instruksionit për të kryer operacionin e kërkuar. Është e vështirë si për programuesin ashtu edhe për lexuesin e librave që të merren me paraqitjen binare të instruksioneve të kompjuterit. Për këtë arsye, është bërë praktikë e zakonshme të përdoret një paraqitje e instruksioneve përmes simboleve (symbolic representation). Kodet e operacioneve paraqiten me shkurtesa, që njihen si fjalë që mund të mbahen mend me lehtë (mnemonics) dhe paraqesin operacionin. 2 MSc. Valdrin Haxhiu Shembuj të shkurtesave për instruksione: ADD për operacionin e mbledhjes SUB për operacionin e zbritjes MUL për operacionin e shumëzimit DIV për operacionin e pjesëtimit LOAD për leximin e të dhënave në memorie STORE për ruajtjen e të dhënave në memorie Operandët po ashtu paraqiten përmes simboleve. Për shembull instruksioni ADD R, Y mund të ketë kuptimin që vlera që gjendet në vendin Y duhet të mbledhet me përmbajtjen e regjistrit R dhe rezultati i fituar të ruhet në regjistrin R. Në këtë shembull, simboli Y paraqet adresën e një vendi në memorie dhe simboli R paraqet një regjistër të caktuar. Duhet të kemi parasysh që operacioni kryhet me përmbajtjet e një vendi, jo me adresën e tij. Në këtë mënyrë, është e mundur të shkruhet një program në gjuhën e makinës me anë të simboleve. Çdo kod i operacionit i paraqitur me simbole ka një paraqitje binare fikse dhe programuesi specifikon vendin e secilit operand të paraqitur me anë të simboleve. Për shembull, programuesi mund të fillojë me një listë të definimeve: X = 513 Y = 514 dhe ashtu me radhë. Një program i thjeshtë do të pranonte këtë hyrje si simbole, do të shndërronte kodet e operacioneve dhe referencat e operandëve në formë binare dhe do të ndërtonte instruksionet binare të kompjuterit. Shumica e programeve sot shkruhen në një gjuhë të lartë programuese dhe ndonjëherë në gjuhën assembly. Llojet e instruksioneve Të marrim për shembull një instruksion të një gjuhe të lartë programuese që mund të shprehet në gjuhën BASIC ose FORTRAN. Për shembull, X=X+Y Kjo shprehje e urdhëron kompjuterin që të mbledh vlerën që është ruajtur në Y me vlerën e ruajtur në X dhe të vendosë rezultatin në X. Si do të mund të arrihej kjo përmes instruksioneve të nivelit të ulët? Të supozojmë se variablat X dhe Y u takojnë vendeve 513 dhe 514. Nëse marrim një 3 MSc. Valdrin Haxhiu bashkësi të thjeshtë të instruksioneve të kompjuterit, ky operacion do të mund të kryhej me 3 instruksione: 1. Vlera e vendit 513 në memorie vendoset në një regjistër. 2. Mbledhja e përmbajtjes së vendit 514 me vlerën e regjistrit. 3. Ruajtja e përmbajtjes së regjistrit në vendin 513 në memorie. Siç mund të shihet, një instruksion i vetëm në gjuhën BASIC mund të kërkojë 3 instruksione të makinës. Ky është një raport tipik në mes një gjuhe të lartë programuese dhe një gjuhe të ulët të makinës. Një gjuhë e lartë programuese i shpreh operacionet në një formë të qartë algjebrike, duke përdorë variabla. Një gjuhë e makinës i shpreh operacionet në një formë bazë që përfshinë lëvizjen e të dhënave në mes regjistrave. Me këtë shembull të thjeshtë si udhëzues, të marrim parasysh llojet e instruksioneve që duhet patjetër të përfshihen në një kompjuter praktik. Një kompjuter duhet të ketë një bashkësi të instruksioneve që e lejon një shfrytëzues për kryerjen e çfarëdo pune për përpunimin e të dhënave. Të marrim parasysh mundësitë e një gjuhe të lartë programuese. Çdo program i shkruar në një gjuhë të lartë programuese duhet patjetër të përkthehet në gjuhën e ulët të kompjuterit për t’u ekzekutuar. Në këtë mënyrë, bashkësia e instruksioneve të kompjuterit duhet patjetër të jetë e mjaftueshme për të shprehur cilindo prej instruksioneve të një gjuhe të lartë programuese. Duke pasur parasysh këtë, instruksionet mund t’i ndajmë në këto lloje: Për përpunimin e të dhënave: Instruksionet aritmetike dhe logjike Për ruajtjen e të dhënave: Lëvizja e të dhënave te ose prej regjistrave dhe/ose vendeve në memorie Për lëvizjen e të dhënave: Instruksionet për H/D Për kontroll: Instruksionet për testim dhe degëzim Instruksionet aritmetike ofrojnë mundësi llogaritëse për përpunimin e të dhënave numerike. Instruksionet logjike (boolean) veprojnë mbi bitët e një fjale si bitë e jo si numra; ashtu, ato ofrojnë mundësi për përpunimin e të dhënave të çfarëdo lloji tjetër që shfrytëzuesi mund të përdorë. Këto operacione kryhen në radhë të parë me të dhënat në regjistrat e procesorit. Në këtë mënyrë, duhet të ketë instruksione të memories për bartjen e të dhënave në mes të memories dhe regjistrave. Instruksionet për H/D nevojiten për bartjen e programeve dhe të dhënave në memorie si dhe të dhënave të rezultateve të llogaritjeve te shfrytëzuesi. Instruksionet për testim përdoren për të testuar vlerën e një fjalë me të dhëna ose statusin e një llogaritjeje. Instruksionet për degëzim përdoren për t’u degëzuar te një bashkësi tjetër e instruksioneve varësisht prej vendimit që merret. Numri i adresave Një prej mënyrave tradicionale për përshkrimin e arkitekturës së procesorit është me anë të numrit të adresave që janë në një instruksion. Ky dimension është bërë më pak i rëndësishëm me rritjen e kompleksitetit të dizajnit të procesorit. Sido që të jetë, është e dobishme që të analizohet ky dallim. Sa është numri i adresave të nevojshme në një instruksion? Është e qartë që, instruksionet aritmetike dhe logjike do të kërkojnë më shumë operandë. Pothuajse të gjitha operacionet aritmetike dhe logjike janë unare (me një operand të burimit) ose binare (me dy operandë të 4 MSc. Valdrin Haxhiu burimit). Pra, do të kishim nevojë për më së shumti dy adresa për të referencuar operandët burimorë. Rezultati i një operacioni duhet patjetër të ruhet, duke sugjeruar përdorimin e një adrese të tretë, që definon një operand të destinacionit. Në fund, pas ekzekutimit të një instruksioni, instruksioni i radhës duhet të merret dhe nevojitet adresa e tij për marrje. Ky diskutim sugjeron që një instruksion do të ishte e dëshirueshme të ketë katër adresa: dy operandë të burimit, një operand të rezultatit dhe adresën e instruksionit të ardhshëm. Në shumicën e arkitekturave, shumica e instruksioneve kanë një, dy ose tri adresa të operandit, ku adresa e instruksionit të ardhshëm është implicite (merret prej regjistrit PC). Shumica e arkitekturave kanë edhe disa instruksione për qëllime speciale me më shumë operandë. Figura 12.3 krahason instruksionet me një, me dy dhe me tri adresa që do të mund të përdoreshin për të llogaritur vlerën e shprehjes: Y = (A – B) /[C + (D ∙ E)]. Instruksioni Komenti SUB Y, A, B Y←A-B MUL T, D, E T←D∙E ADD T, T, C T←T+C DIV Y←Y÷T Y, Y, T (a) Instruksionet me tri adresa Instruksioni Komenti LOAD D AC ← D Instruksioni Komenti MUL E AC ← AC ∙ E MOVE Y, A Y←A ADD C AC ← AC + C SUB Y←Y-B STORE Y Y ← AC MOVE T, D T←D LOAD A AC ← A MUL T, E T←T∙E SUB B AC ← AC - B ADD T, C T←T+C DIV Y AC ← AC ÷ Y DIV Y, T Y←Y÷T STORE Y Y, B (b) Instruksionet me dy adresa Y ← AC (c) Instruksionet me një adresë Figura 12.3 – Programet për ekzekutim të Y = A−B C + (D ∙ E) Me tri adresa, çdo instruksion specifikon vendet e dy operandëve të burimit dhe vendin e një operandi të rezultatit. Për të mos i ndryshuar vlerat e operandëve, një vend i përkohshëm T, përdoret për të ruajtur disa rezultate të ndërmjetme. 5 MSc. Valdrin Haxhiu Formatet e instruksioneve me tri adresa nuk janë të zakonshme sepse ato kërkojnë një format relativisht të gjatë të instruksionit për të mbajtur tri adresat. Te instruksionet me dy adresa, për operacionet me dy operandë, një adresë duhet të kryejë dy punë si një operand burimor dhe si operand i rezultatit. Kështu, instruksioni SUB Y, B kryen llogaritjen Y – B dhe ruan rezultatin në Y. Formati me dy adresa zvogëlon hapësirën e nevojshme, por paraqet disa punë shtesë. Për të shmangur ndërrimin e vlerës të një operandi, përdoret instruksioni MOVE për të bartur njërin operand në një vend të rezultatit ose vend të përkohshëm para se të kryhet operacioni. Programi i thjeshtë në shembull zgjerohet në gjashtë instruksione. Edhe më i thjeshtë është instruksioni me një adresë. Që të funksionojë kjo, një adresë e dytë duhet të jetë implicite. Kjo ka qenë e zakonshme në kompjuterët e mëhershëm, ku adresa implicite ka qenë një regjistër i procesorit i njohur si akumulator (accumulator – AC). Regjistri AC përmban njërin operand dhe përdoret për të ruajtur rezultatin. Në shembullin tonë nevojiten tetë instruksione për të kryer punën. Mund të përdoren edhe instruksione me zero adresa. Instruksionet me zero adresa përdoren për një vend të veçantë të memories të quajtur stek (stack). Një stek është një bashkësi e vendeve në memorie që punon sipas algoritmit i fundit që është futur del i pari (last-in-first-out). Steku ndodhet në një vend që dihet dhe zakonisht dy elementët në maje të stekut vendosen në regjistra të procesorit. Kështu, instruksionet me zero adresa do të referenconin dy elementët në maje të stekut. Tabela 12.1 përmbledhë mënyrat se si duhet të kuptohen instruksionet me zero, një, dy dhe tri adresa. Tabela 12.1 – Përdorimi i adresave në instruksion Numri i adresave 3 2 1 0 AC = akumulatori T = maja e stekut (top of stack) Paraqitja simbolike OP A, B, C OP A, B OP A OP Kuptimi AC ← B OP C AC ← A OP B AC ← AC OP A T ← (T - 1) OP T (T – 1 ) = elementi i dytë përfundi majes së stekut A, B, C = regjistrat ose vendet në memorie Në secilin rast në tabelë, supozohet që adresa e instruksionit të ardhshëm është implicite dhe kryhet një operacion me dy operandë të burimit dhe një operand të rezultatit. Numri i adresave në një instruksion është një vendim bazë i dizajnit. Më pak adresa në instruksion nënkupton që instruksionet janë më të thjeshta, duke kërkuar një procesor më pak 6 MSc. Valdrin Haxhiu kompleks. Po ashtu nënkupton instruksione më të shkurta. Në anën tjetër, programet përmbajnë më shumë instruksione, që në përgjithësi nënkupton kohë më të gjata të ekzekutimit dhe programe më të gjata dhe më komplekse. Ekziston një lidhje e rëndësishme në mes instruksioneve me një adresë dhe me shumë adresa. Me anë të instruksioneve me një adresë, programuesi zakonisht ka në dispozicion vetëm një regjistër me qëllim të përgjithshëm, regjistrin AC. Me anë të instruksioneve me shumë adresa, është e zakonshme të kemi më shumë regjistra me qëllim të përgjithshëm. Kjo mundëson që disa operacione të kryhen vetëm në regjistra. Për arsye se referencat e regjistrave janë më të shpejta se referencat në memorie, kjo shpejton ekzekutimin. Për arsye të fleksibilitetit dhe mundësisë për të përdorë më shumë regjistra, shumica e kompjuterëve modern përdorin një kombinim në mes instruksioneve me dy dhe me tri adresa. Kompromiset në dizajn që përfshihen në zgjedhjen e numrit të adresave në instruksion komplikohen edhe prej faktorëve tjerë. Ekziston çështja se një adresë i referohet një vendi në memorie apo një regjistri. Meqë ka më pak regjistra, me pak bitë nevojiten për një referencë të regjistrit. Po ashtu, siç do të shohim në ligjëratën 10, një kompjuter mund të ofrojë disa mënyra të adresimit dhe përcaktimi i mënyrës së adresimit shpenzon një ose më shumë bitë. Ajo që del nga kjo është që shumica e procesorëve përfshijnë disa lloje të formateve të instruksionit. Dizajni i bashkësisë së instruksioneve Një prej aspekteve më interesante dhe më të analizuara të dizajnit të kompjuterit është dizajni i bashkësisë së instruksioneve. Dizajni i një bashkësie të instruksioneve është shumë kompleks sepse ndikon në shumë aspekte të sistemit kompjuterik. Bashkësia e instruksioneve përcakton shumë funksione që i kryen procesori dhe në atë mënyrë ka një ndikim të madh në implementimin e procesorit. Një programues e kontrollon procesorin përmes bashkësisë së instruksioneve. Kështu që, kërkesat e programuesit duhet të merren parasysh gjatë dizajnimit të bashkësisë së instruksioneve. Ka mjaft mospajtime sa i përket çështjeve bazë të dizajnit të bashkësisë së instruksioneve. Në të vërtetë, vitet e fundit, niveli i mospajtimit është rritur më shumë. Çështjet më të rëndësishme të dizajnit përfshijnë këto: Bashkësia e operatorëve: Sa dhe cilat operacione duhet të ofrohen dhe sa komplekse duhet të jenë operacionet Tipet e të dhënave: Tipet e ndryshme për të dhëna mbi të cilat kryhen operacionet Formati i instruksionit: Gjatësia e instruksionit (në bit), numri i adresave, madhësia e fushave të ndryshme e të tjera Regjistrat: Numri i regjistrave të procesorit që mund referencohen me instruksione dhe përdorimi i tyre Adresimi: Mënyra ose mënyrat me të cilat specifikohet adresa e një operandi. Këto çështje janë të lidhura ngushtë në mes vete dhe duhet të merren parasysh gjatë dizajnimit të një bashkësie të instruksioneve. 7 MSc. Valdrin Haxhiu Referenca Materiali është marrë nga kapitulli 12 (faqe 406) i librit Computer Organization and Architecture Designing for Performance të autorit William Stallings. 8