1 / 29

Universiteti i Prizrenit

Universiteti i Prizrenit. Fakulteti i Shkencave Kompjuterike Drejtimi - DS. Gjuha Programuese Assembler. Prof. Dr. Arbnor Pajaziti arbnor.pajaziti@uni-prizren.com. Gjuha programuese asembler.

Download Presentation

Universiteti i Prizrenit

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Universiteti i Prizrenit Fakulteti i Shkencave Kompjuterike Drejtimi - DS Gjuha Programuese Assembler Prof. Dr. Arbnor Pajaziti arbnor.pajaziti@uni-prizren.com

  2. Gjuha programuese asembler • Mikroprocesorët punojnë në kodin binar. Instruksionet e shkruara në kodin binar duhet të jenë kod i makinës që paraqet një proces të lodhshëm. • Alternativë është që të përdoren kode të shkurta për mustrat 0 dhe 1. P.sh., operacioni për shtimin e të dhënës së një akumulatori mund të paraqitet me ADDA. Ky kod i shkurtuar i referohet kodit mnemonik. Termi gjuha asembler përdoret për këtë lloj kodi. Grupi i instruksioneve Më poshtë janë dhënë instruksionet (urdhrat) e zakonshëm që i jepen mikroprocesorit. Në përgjithësi, instruksionet mund të ndahen në: 1 Transferi i të dhënave (Data transfer) 2 Aritmetike (Arithmetic) 3 Logjike (Logical) 4 Kontrolli i programit (Program control) Këto instuksione (urdhra) ndryshojnë prej një mikroprocesori në tjetrin. Disa prej tyre, megjithatë, janë të përbashkëta në shumicën e mikroprocesorëve.

  3. Gjuha programuese asembler Transferi i të dhënave (Data transfer) 1 Load Ky instruksion lexon përmbajtjen e lokacionit të specifikuar të memories dhe e kopjon atë në lokacionin e specifikuar të regjistrit në CPU, p.sh., Para instruksionit Pas instruksionit ___________________________________________________________________________________________________________________________________ E dhëna në lokacionin E dhëna në lokacionin e memories 0010 0010 E dhëna prej 0010 në akumulator

  4. Gjuha programuese asembler 2 Store Ky instruksion kopjon përmbajtjen aktuale të regjistrit të specifikuar në lokacionin e specifikuar të memories, p.sh., Para instruksionit Pas instruksionit ___________________________________________________________________________________________________________________________________ E dhëna në akumulator E dhëna në akumulator E dhëna e kopjuar në lokacionin e memories 0011

  5. Gjuha programuese asembler Aritmetike 3 Add Ky instruksion shton përmbajtjen e lokacionit të specifikuar të memories në të dhënë të ndonjë regjistri, p.sh., Para instruksionit Pas instruksionit ___________________________________________________________________________________________________________________________________ Akumulator me të dhënë 0001 Akumulator me të Lokacioni i memories me dhënë 0011 të dhënë 0010

  6. Gjuha programuese asembler 4 Decrement Kyinstruksionzbret 1 nga përmbajtja e lokacionittëspecifikuar. P.sh., ne mund të kemiakumulatorsilokacionispecifikuardhekështu: Para instruksionit Pas instruksionit ___________________________________________________________________________________________________________________________________ Akumulator me tëdhënë 0011 Akumulator me të tëdhënë 0010

  7. Gjuha programuese asembler 5 Compare Kyinstruksiontregon nësepërmbajtja e regjistritështëmë e madhe, më e vogëlose e barabartë me përmbajtjen e lokacionittë memories sëspecifikuar. Rezultatiparaqitetnëstatusin e regjistritsi flag (flamuri). Logjike (Logical) 6 AND Kyinstruksionshërbenoperacioninlogjik AND me përmbajtjen e lokacionittë memories dhetëdhënënnëndonjëregjistër. NumratjanëANDed bit për bit, p.sh., Para instruksionit Pas instruksionit ____________________________________________________________________ Akumulator me tëdhënë 0011 Akumulator me tëdhënë 0001 Lokacionii memories me të dhënë 1001 Vetëmnëbitin e funditnëtëdhënën e mësipërmekemi 1 nëtëdyvargjet e tëdhënësdheoperacioni AND jepëvetëm 1 nëbitin e fundittërezultatit.

  8. Gjuha programuese asembler 7 EXCLUSIVE-OR Ky instruksion tregon operacionin logjik EXCLUSIVE-OR me përmbajtje të lokacionit të memories së specifikuar dhe me të dhënën në ndonjë regjistër, bit për bit. 8 Logical shift (left-majtas apo right-djathtas) Instruksioni logical shift mundëson zhvendosjen e sekuencës (mostrës) së bitave në regjistër për një vend në të majtë apo në të djathtë duke vendosur 0 në fund të numrit. P.sh., për logical shift right, 0 është zhvendosur në bitin signifikant ashtu që biti i fundit është zhvendosur për të bartur flag (flamurin) në regjistrin e statusit. Para instruksionit Pas instruksionit _________________________________________________________________ Akumulator me të dhënë 0011 Akumulator me të dhënë 0001 Regjistri i statusit tregon Carry 1

  9. Gjuha programuese asembler 9 Arithmetic shift (left ose right) Instruksioni arithmetic shift mundëson zhvendosjen e mostrës së bitave në një regjistër për një vend majtas ose djathtas por ruan bitin e shenjës në fund majtas të numrit, p.sh., për arithmetic right: Para instruksionit Pas instruksionit _________________________________________________________________ Akumulatori me të dhënë 1011 Akumulatori me të dhënë 1001 Regjistri i statusit tregon Carry 1 10 Rotate (left ose right) Instruksioni rotate mundëson lëvizjen e mostrës së bitave në regjistër për një vend majtas ose djathtas dhe të bitit i cili përhapet prapa në një fund tjetër, p.sh., për rotate right: Para instruksionit Pas instruksionit _________________________________________________________________ Akumulator me të dhënë 0011 Akumulator me të dhënë 1001

  10. Gjuha programuese asembler Kontrolli i programit 11 Jump Ky instruksion ndryshon sekuencën në të cilën realizohen hapat e programit. Normalisht numratori i programit ndikon që programi të realizohet në mënyrë sekuenciale me një sekuencë numerike strikte. Instruksioni Jump shkakton që numratori i programit të kërcejë në ndonjë lokacion të specifikuar në program. P.sh., programit i nevojiten këto instruksione: Zvogëlimi i akumulatorit Kërcimi nëse akumulatori nuk është zero në instruksionin… 12 Branch Ky instruksion është kushtëzues që mund të jetë branch if zero ose branch if plus. Ky instruksion i degëzimit përcjellet nëse paraqiten kushte. P.sh., programit i nevojiten sekuencat e instruksioneve në diagramin vijues:

  11. Gjuha programuese asembler 13 Halt Ky instruksion ndërpret të gjitha aktivitetet tjera të mikroprocesorit. Llojet e kodeve mnemonike që përdoren si instruksione në gjuhën asembler varen nga mikroprocesori/mikrokontrolleri që shfrytëzohet. Zvogëlimi i akumulatorit Nëse akumul. është zero? Jo Po Kopjo akumul. në regjist. X Fillo segmentin e ri të programit

  12. Gjuha programuese asembler Adresimi Nëse kodi mnemonik, p.sh., LDA nevojitet që të specifikojë një instruksion, ai do të shoqërohet me informacionin shtesë për të treguar burimin dhe destinimin e të dhënës që kërkohet nga instruksioni (urdhri). E dhëna që e shoqëron instruksionin quhet operand. Ekzistojnë metoda të ndryshme që nevojiten për të specifikuar lokacionet e të dhënave, d.m.th., adresimi, pra mënyra se si programi e shtyen mikroprocesorin që të zgjedhë instruksionet ose të dhënat. Mirkoprocesorët e ndryshëm kanë mode të ndryshme të adresimit. Motorola 68HC11 ka 6 mode adresimi: immediate, direct, extended, indexed, inherent dhe relative; Intel 8051 ka 5 mode adresimi: immediate, direct, register, indirect dhe indexed. PIC mikrokontrolleri ka 3 mode adresimi: immediate, direct dhe indirect.

  13. Gjuha programuese asembler Shembull i adresimit Modi i adresës Instruksioni ----------------------------------------------------------------------------------------------------------------- Immediate LDA A #$F0 Ngarko akumulatorin A me të dhënën F0 Direct LDA A $50 Ngarko akumulatorin A me të dhënën në adresën 0050 Extended LDA A$0F01 Ngarko akumulatorin A me të dhënën në adresën 0F01 Indexed LDA A $CF,X Ngarko akumulatorin me të dhënën në adresën e dhënë me indeks regjistër plus CF Inherent CLR A Pastro akumulatorin A Extended CLR $2020 Pastro adresën 2020, d.m.th., vendos 0 në adresën 2020 Indexed CLR $10,X Pastro adresën e dhënë me indeks regjistër plus 10, d.m.th., vendos 0 në atë adresë.

  14. Gjuha programuese asembler Zhvendosja e të dhënave Shembull: Modet e adresimit Immed Direct Operacioni Mnemonic OP ~ # OP ~ # ------------------------------------------------------------------------------------- Add ADDA 8B 2 2 9B 3 2 ~ është numri i cikleve të mikroprocesorit # numri i bajtave të programit.

  15. Programet në gjuhën asembler Programinëgjuhënprogramueseasemblerpërbëhetprejnjënumritëmadhtëinstruksioneveqëpastaj do tëprodhojnëprograminnëkodin e makinës. Programiishkruarnëgjuhënasemblerpërbëhetprejsekuencavetëformulime (gjendjeve), njëformulimpërrresht. Formulimipërbëhetprejkatërpjesëveosefushave duke filluar: Label Op-code OperandComment Label – ështëemritëdhënësqëireferohetmemoria (shkronja, numraosekarakteretjerë) Op-code - tregon se si e dhëna do tëmanipulohet, p.sh., LDA A Operand – jepëadresën e tëdhënës me tëcilën do tëoperohet Comment – kjofushëështëopcionale (programerimundtëjapëkomente)

  16. Shembuj programimi në gjuhën programuese Asembler Start • Problemi: Mbledhja e dynumrave 8 bitështëvendosurnëdyadresatëndryshmetë memories, ndërsavendosja e rezultatittëkthehetnëmemorie. • Algoritmiështë: • Start. • Ngarkoakumulatorin me numrin e parë. Akumulatoriështëatykurezultatet e operacionevearitmetikorejanëakumuluar. Kyështënjëregjistërpunues, d.m.th., sikursenotepadinëtëcilinkalkulimetbëhenpara se rezultatitëtransferohetdikundtjetër. Kështuduhettëkopjojmëtëdhënënnëakumulatorpara se tëbëjmë arithmetic. Me PIC ështëpërdorurtermiregjistripunues (w). • Shtojenumrintjetër. • Vendosshumënnëlokacioninn e dedikuartë memories. • Stop. Ngarko ACC me numrin e parë Shto numrin e dytë Vendos shumën në memorie Stop

  17. Programimi në gjuhën programuese Asembler Mikrokontrolleri M68HC11 ;Mbledhja e dynumrave Label Op-code OperandComment NUM1 EQU $00 ; lokacioniinumrit 1 NUM2 EQU $01 ; lokacioniinumrit 2 SUM EQU $02 ; lokacionipërshumën ORG $C000 ; adresa e fillimittëuserit RAM START LDAA $NUM1 ; ngakronumrin 1 nëakumulatorin A ADDA $NUM2 ; shtonumrin 2 te A STAA SUM ; ruajeshumënnë $02 END

  18. Kodi i makinës Pas përkthimit në kod të makinës pseudo-operacionet tregojnë adresat për njësitë. Në kodin e makinës programi do te dukej kështu: 0010 96 70 0012 9B 71 0014 97 72 0016 3F

  19. Programi në 8051 ;Mbledhja e dynumrave Label Op-code OperandComment NUM1 EQU 20H ; lokacioniinumrit 1 NUM2 EQU 21H ; lokacioniinumrit 2 SUM EQU 22H ; lokacionipërshumën ORG 8000H ; adresa e fillimittëuserit RAM START MOV A,NUM1 ; ngarkonumrin 1 nëakumulatorin A ADD A,NUM2 ; shtonumrin 2 te A MOV SUM,A ; ruajeshumënnëadresën 22H END

  20. Programi në mikrokontrollerin PIC ;Mbledhja e dynumrave Label Op-code OperandComment Num1 equ H’20’ ; lokacioniinumrit 1 Num2 equ H’21’ ; lokacioniinumrit 2 Sum equ H’22’ ; lokacionipërshumën org H’000’ ; adresa e fillimittëuserit RAM Start movIw Num1 ; ngarkonumrin 1 në w addlw Num2 ; shtonumrin 2 te w movwf Sum ; ruajeshumën H’22’ End

  21. Looping Start Operacioni Në shumë programe mund të ketë kërkesa që detyra të kryhet me numër të limituar të përsëritjeve. Në këto raste programin duhet bërë ashtu që operacioni të kalojë nëpër pjesën e njëjtë disa herë. Ky term quhet looping, një loop (unazë) që është pjesë e programit dhe përsëritet disa herë. jo A eshte kryer operacioni deri ne fund? po Pjesa tjeter e programit Unaza

  22. Looping (Unaza) Problemi 1: Mbledhja e numravetëvendosurnë 10 adresatëndryshme (kymundtëjetëpërshembullrezultatiihyrjeveprej 10 sensorëvetëndryshëmqëduhetbërësemplimi). Algoritmimundtëjetë: • Start • Vendos 10 tenumratori. • Shko (Point) nëlokacionin e numrit me adresëtëfundit. • Shtonumrin me adresëtëfundit. • Zvogëlonumratoripër 1. • Shto 1 nëpointerin me adresëtëlokacionit. • A ështënumratori0? Nësejoshkonë 4. Nësepovazhdo. • Vendosshuma. • Stop.

  23. Bllok diagrami për mbledhje të 10 numrave Start Shtoje 1 te pointeri Vendos 10 te numratori Shko ne adresen e fundit A eshte numratori 0? jo Shuma po Vendos Shuma Zvogelo numratorin per 1 End

  24. Kodi në Asembler ;Mbledhja e dhjetënumrave Label Op-code OperandComment COUNT EQU $0010 POINT EQU $0020 RESULT EQU $0050 ORG $0001 LDA B COUNT ; Ngarkonumratorin LDX POINT ; Inicializoregjistrin me index ; ne fillimtenumrave SUM ADD A X ; Shto addend (shtesen) INX ; Shto 1 teregjistri me index DEC B ; Zbrit 1 nga ; akumulatori B BNE SUM ; Degezohu (shko) teShuma STA A RESULT ; Vendos WAI ; Ndalprogramin

  25. Përshkrimi i programit Numratori 10 ngarkohet në akumulatorin B. Regjistri i indeksuar jepë adresën fillestare të të dhënës që duhet shtuar. Hapi i parë i mbledhjes është që të shtohet përmbajtja e lokacionit të memories e adresuar me regjistër indeksor në përmbajtjen e akumulatorit, fillimisht baras me zero (instruksioni CLR A mund të përdoret që së pari ta pastrojë). Instruksioni INX ia shton 1 regjistrit me index, kështu që adresa tjetër e radhës që duhet trajtuar është 0021. DEC B zbret 1 nga përmbajtja e akumulatorit B dhe tregon se kanë mbetur 9. BNE pastaj është instruksion për degëzim të SUM nëse nuk është baras me 0, d.m.th., nëse flamuri (flag) Z ka pasur vlerën 0. Programi pastaj sillet në unazë dhe përsëritet derisa ACC B të bëhet zero.

  26. Problemi Problemi 2: Përcaktimiinumritmëtëmadhnëregjistrin e numrave (aimundtëjetë p.sh., përcaktimiitemperaturësmëtëlartëqëështëlexuarngasensorët e temperaturës). Algoritmimundtëjetë: • Pastroadresënpërgjigje. • Listoadresënfillestare. • Ngarkonumrinngaadresafillestare. • Krahasonumrin me numërnëadresënpërgjigje. • Vendospërgjigjenëseështëmë e madhe. • Përndrysheruajenumrin. • Rritadresënfillestarepër 1. • Degëzo (shko) në 3 nëseadresanukështëadresa e fundit. • Stop.

  27. Kodi në Asembler FIRST EQU $0030 LAST EQU $0040 ANSW EQU $0041 ORG $0000 CLR ANSW ; Fshije pergjigje LDX FIRST ; Ngarko adresen e pare NUM LDA A $30,X ; Ngarko numrin CMP A ANSW ; Krahaso me pergjigje BLS NEXT ; Degezimi tek NEXT nese me e ; vogel ose e njejte STA A ANSW ; Vendos pergjegje NEXT INX ; Rrite regjistrin me index CPX LAST ; Krahaso regjistrin me index me LAST BNE NUM ; Degezo nese nuk eshte baras me zero WAI ; Stop programin

  28. Përshkrimi i programit Procedura është e tillë që së pari adresa përgjegje duhet pastruar. Adresa e parë pastaj ngarkohet dhe numri në atë adresë vendoset në akumulatorin A. LDA A $30,X nënkupton që duhet ngarkuar akumulatorin A me të dhënën tek adresa e dhënë me regjistër indeksi plus 30. Krahaso numrin me përgjegje, duke mbajtur numrin nëse është më i madh se numri që gjendet në akumulator, përndryshe degëzohet për të përsëritur unazën me numrin e radhës.

  29. Bllok diagrami për gjetje të numrit më të madh Start numri < pergjegje ? po Pastro pergjegje jo Listo adresen fillestare Ruaje numri Rrite adresen fillestare Ngarko numri Adresa e fundit? jo Krahaso po Stop

More Related