Kapitulli 10. Setet e instruksionit Karakteristikat dhe funksionet Karakteristikat e instruksioneve të makinës Tipet e operandëve Tipet e të dhënave te Pentiumi dhe PowerPC Tipet e operacioneve Gjuha asembler
Elementet e instruksionit të makinës Kodi operacional (Opcode) Elementi esencial i një instruksioni të kompjuterit, që specifikon operacionin që duhet kryer (p.sh. ADD, I/O); burimin dhe destinacionin e referencës së operandit Opcode-i specifikon operacionet në një nga kategoritë: aritmetike ose logjike; zhvendosjen e të dhënave në mes dy regjistrave, regjistrit dhe memories; H/D; si dhe kontrolli. 3
Referenca në operandin burimor Specifikon një regjistër ose lokacion memorik të operandit të të dhënave. Tipi mund të jetë: adresa, numra, karaktere ose të dhëna logjike Referenca e operandit të rezultatit Karakteristika e zakonshme e procesorit është shfrytëzimi i stekut (mund të shihet ose jo prej programerit) Referenca në instruksionin e ardhshëm I tregon procesorit ku të marrë instruksionin e ardhshëm 3
Arkitektura dhe programimi Shumë prej elementeve të arkitekturës nuk shihen nga ana e programerit, kur ai programon në gjuhë të larta programuese (C, C++, C#,Pascal,…) Kufiri i ‘takimit’ në mes të dizajnerit dhe programerit: gjuha e makinës. Të dy e shohin të njejtën makinë. Këndvështrimi i dizajnerit: seti i instruksionit ofron kërkesat funksionale të procesorit. Programeri që programon në gjuhën e makinës (assembler) sheh strukturën e memories dhe regjistrat.
Një kategorizim i procesorëve Në bazë të stilit të ruajtjes së vlerave numerike shumëbajtëshe: Big-endian Bajtat më të rëndësishëm ruhen në adresat numerike më të ulta. Little-endian Bajtat më të rëndësishëm ruhen në adresat më të larta. Bi-endian Mund t’i përkrahë të dy stilet.
Karakteristikat e instruksionit të makinës Operacioni i procesorit përcaktohet nga instruksionet që e ekzekutojnë, që i referohemi si instruksionet e makinës (kompjuterit). Koleksioni i instruksioneve të ndryshme që mund të ekzekutojë procesori, njihet si seti i instruksionit të procesorit. Secili instruksion duhet të përmbajë informacionet që kërkohen nga procesori për ekzekutim.
Elementet e një instruksioni të makinës Kodi i operacionit: specifikon operacionin që duhet të kryhet (p.sh. ADD, I/O). Operacioni paraqitet me një kod binar, i njohur si opcode. Burimi i operandit: operacioni mund të përfshijë një apo më tepër operande dhe duhet ditur se cilët janë operandet hyrës. Rezultati i operandit: operacioni mund të prodhojë një rezultat. Instruksioni i ardhshëm: i tregon procesorit ku të marrë instruksionin e ardhshëm, pasi të jetë kompletuar instruksioni aktual.
Diagrami i gjendjeve të ciklit të instruksionit
Operandi burimor dhe i rezultatit gjendet: Në memorien kryesore ose virtuale Në regjistrat e procesorit Në paisjet H/D
Paraqitja e instruksioneve Në kodin e makinës çdo instruksion ka varg të ndryshëm bitash Programerët përdorin prezentimin simbolik p.sh. ADD, SUB, LOAD, MPY, DIV, STOR Operandet mund të paraqiten edhe në këtë mënyrë: P.sh. ADD A,B Që do të thotë: vlerën në lokacionin B shtoja përmbajtjes së regjistrit A. B i referohet adresës së lokacionit në memorie A i referohet një regjistri të pjesërishëm Operacioni kryehet në përmbajtjen e lokacioneve 5
Formati i thjeshtë i instruksioneve
Tipet e instruksioneve Shembull: X=X+Y (në gjuhë të lartë programuese) Ky operacion kryhet me tri instruksione: Ngarko (load) regjistrin me përmbajtjen e lokacionit memorik 513l Shto (add) përmbajtjen e lokacionit memorik 514 në regjistër; Ruaje (store) përmbajtjen e regjistrit në lokacionin memorik 513. Lidhja në mes gjuhëve të larta dhe gjuhës së makinës: Pra, një operacion i thjeshtë mund të kërkojë disa instruksione.
Tipet e instruksioneve Procesimi i të dhënave: instruksionet aritmetike dhe logjike Ruajtja e të dhënave instruksionet e memories Zhvendosja e të dhënave instruksionet H/D Kontrolli i rrjedhës së programit testimi dhe degëzimi i programit. 6
Numri i adresave (a) 3 adresa Operandi 1, Operandi 2, Rezultati a = b + c; Mund të jetë edhe e katërta – instruksioni i ardhshëm (zakonisht implicit) Nuk është i përhapur Kërkon fjalë të gjatë të instruksionit për të përmbledhur të gjitha. 7
Numri i adresave (b) 2 adresa Një adresë shërben si adresë e operandit dhe rezulatit të procesimit a = a + b Shkurton gjatësinë e instruksionit Ka nevojë për punë shtesë dhe hapësirë për ruajtjen e përkohshme të rezultatit. 8
Numri i adresave (c) 1 adresë Adresa e dytë është implicite Zakonisht regjistër (accumulator) E zakonshme te procesorët e hershëm. 9
Numri i adresave (d) 0 (zero) adresa Të gjitha adresat janë implicite Përdoren në një organizim special të memories, të njohur si stek (stack) Stack: një set i lokacioneve ‘last-in-first-out’ p.sh. push a push b add pop c c = a + b 10
(c) Instruksionet tri-adresëshe
Sa adresa? Më shumë: Më pak: Instruksione më komplekese Më shumë regjistra Operacione me operand në regjistër janë më të shpejta Më pak instruksione për program Më pak: Instruksione më të thjeshta Më shumë instruksione për program Marrja / ekzekutimi më i shpejtë i instruksioneve. 11
Dizajni i repertorit të instruksionit Dizajni i setit: kompleks, sepse afekton në shumë aspekte të sistemit kompjuterik. Definon: shumë funksione që kryen procesori. Repertori i operacioneve Sa dhe cilat operacione i ofron? Çka mund të bëjnë? Sa janë komplekse? Tipet e të dhënave Llojet e ndryshme të të dhënave ndaj të cilave mund të kryhen operacione. 12
Reduced Instruction Set Computer Complex Instruction Set Computer Formatet e instruksioneve Gjatësia e fushës së kodit operacional Numri i adresave Gjatësia e fushave të ndryshme Regjistrat Numri i regjistrave të CPU-së Cilat operacione mund të kryhen në cilët regjistra? Adresimi Modi (modet) sipas të cilit është specifikuar adresa e një operandi RISC CISC Reduced Instruction Set Computer Complex Instruction Set Computer 13
Instruksionet e makinës operojnë në të dhëna. Tipet e operandëve Instruksionet e makinës operojnë në të dhëna. Kategoritë më të rëndësishme të të dhënave: Adresat Numrat Integer (fixed point); floating point; decimal (BCD) Karakteret ASCII, EBCDIC, etj. Të dhëna logjike Bitat ose flag-at (flags) 14
Tipet e të dhënave të Pentiumit Pentiumi mund të kuptojë të dhënat: 8 bit (byte) 16 bit (word) 32 bit (doubleword) 64 bit (quadword) Adresimi është sipas njësisë 8 bitëshe Fjala e dyfishtë 32 bitëshe lexohet në adresa të pjesëtueshme me 4. Për fleksibilitet dhe shfrytëzim më të mirë, nuk lejohen adresat me numër tek të bitave. Stili (si te të gjithë 80x86) little-endian: bitat më pak të rëndësishëm ruhen në adresat më të ulëta. 15
Tipet specifike të të dhënave (Pentium) Gjeneral – përmbajtja arbitrare binare Integer – vlerë binare duke shfrytëzuar 2 komplementin Ordinal – integer pa parashenjë Unpacked BCD – Një numër për byte Packed BCD - 2 BCD numra për një byte Near Pointer – zhvendosja 32 bitëshe brenda segmentit Bit fushe Byte String Floating Point 16
Formatet e të dhënave numerike të Pentiumit 17
Shndërrime (Conversion) H/D Kontroll i sistemit (System Control) Tipet e operacioneve Transferi i të dhënave Aritmetike Logjike Shndërrime (Conversion) H/D Kontroll i sistemit (System Control) Transferi i kontrollit. 18
Mund të jenë instruksione të ndryshme për lëvizje të ndryshme Transferi i të dhënave Specifiko Burimin Destinacionin Sasinë e të dhënave Mund të jenë instruksione të ndryshme për lëvizje të ndryshme p.sh. IBM 370 Ose një instruksion dhe adresa të ndryshme p.sh. VAX. 19
Mbledhja, zbritja, shumëzimi, pjesëtimi Signed Integer Floating point Aritmetike Mbledhja, zbritja, shumëzimi, pjesëtimi Signed Integer Floating point Mund të përfshijë Inkrementimi (a++) Dekrementimi (a--) Negacioni (-a) Vlera absolute. 20
Operacionet Shift dhe Rotate
Logjike Operacione mbi bita AND OR NOT XOR Test Compare Shift Rotate 21
Shndërrimet (Conversions) Instruksionet e shndërrimit: ato që ndërrojnë formatin ose operimin në format. p.sh. Binar në Decimal Instruksioni TR (translate) te S/390: mund të përdoret për të shndërruar të dhënat prej kodit 8-bitësh në një kod tjetër: TR R1, R2, L 22
Mund të jenë instruksione specifike Instruksionet H/D Mund të jenë instruksione specifike Mund të kryhen duke përdorur instruksionet për zhvendosjen e të dhënave (H/D e mapuar në memorie) Mund të ekzekutohen nga kontrolleri i veçantë (DMA). 23
Të rezervuara për përdorim nga sistemi operativ Kontrolli i sistemit Instruksionet e kontrollit të sistemit: ato që mund të ekzekutohen vetëm deri sa procesori është në një gjendje të privilegjuar ose është duke ekzekutuar një program në një zonë të privilegjuar të memories (Instruksione të privilegjuara). Ring 0 në 80386+ Kernel mode Të rezervuara për përdorim nga sistemi operativ 24
Thirrja e subrutinave (procedurave) Transferi kontrollit Degëzimi p.sh. kalo në x nëse rezultati është zero Kapërcimi (skip) p.sh. inkremento dhe kapërce nëse rezultati është zero ISZ Register1 Branch (BRP X; BRN X; BRZ X; BRO X; BRE R1,R2,X) ADD A Thirrja e subrutinave (procedurave) Programi më i ekonomizuar Modulariteti. 25
Instrusioni i degëzimit
Thirrja e procedurave
Përdorimi i stekut
Rritja e stekut gjatë përdorimit të procedurave shembull P dhe Q
Me çfarë radhe i lexojmë numrat të cilët zënë më shumë se një byte Rendi i byte-ve Me çfarë radhe i lexojmë numrat të cilët zënë më shumë se një byte p.sh. numrat heksadecimal që të mund t’i lexojmë më lehtë 12345678 mund të ruhet në 4 lokacione 8 bitëshe në këto mënyra: 27
Rendi i byte-ve (shembull) Adresa Vlera (1) Vlera (2) 184 12 78 185 34 56 186 56 34 187 78 12 p.sh. lexo nga lartë poshtë apo nga poshtë lartë? 28
Emrat e rendeve të byte-ve Problemi quhet Endian Big-endian: Sistemi në të majtë e ka byte-in me peshë më të vogël në adresë më të madhe (78 në adresën 187) Little-endian: Sistemi në të djathtë e ka byte-in me peshë më të vogël në adresën më të vogël (78 në adresën 184) 29
Shembulli vendosjes së një C struct
Këndvështrim alternativ i memories
Pentium (80x86), VAX janë little-endian Standard ? Pentium (80x86), VAX janë little-endian IBM 370, Motorola 680x0 (Mac) dhe shumica e RISC janë big-endian Interneti është big-endian 30
Instruksionet janë numra të thjeshtë binarë të ruajtur në kompjuter. Gjuha asembler Një procesor mund të kuptojë dhe të ekzekutojë instruksionet e makinës. Instruksionet janë numra të thjeshtë binarë të ruajtur në kompjuter. Nëse programeri dëshiron të programojë direkt në gjuhë të makinës, duhet të futë programin në formën binare. Nivelet: gjuha e makinës (binare) gjuha simbolike gjuha asembler gjuhët e larta (kompajleri)
Shembull: llogaritja e formulës N = I + J + K