Universiteti i Prizrenit Fakulteti i Shkencave Kompjuterike Drejtimi

  • Slides: 29
Download presentation
Universiteti i Prizrenit Fakulteti i Shkencave Kompjuterike Drejtimi - DS Gjuha Programuese Assembler Prof.

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

Gjuha programuese asembler Mikroprocesorët punojnë në kodin binar. Instruksionet e shkruara në kodin binar

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. l 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. l 2

Gjuha programuese asembler Transferi i të dhënave (Data transfer) 1 Load Ky instruksion lexon

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 memories 0010 E dhëna në lokacionin 0010 E dhëna prej 0010 në akumulator 3

Gjuha programuese asembler 2 Store Ky instruksion kopjon përmbajtjen aktuale të regjistrit të specifikuar

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 e kopjuar në lokacionin e memories 0011 4

Gjuha programuese asembler Aritmetike 3 Add Ky instruksion shton përmbajtjen e lokacionit të specifikuar

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 5

Gjuha programuese asembler 4 Decrement Ky instruksion zbret 1 nga përmbajtja e lokacionit të

Gjuha programuese asembler 4 Decrement Ky instruksion zbret 1 nga përmbajtja e lokacionit të specifikuar. P. sh. , ne mund të kemi akumulator si lokacion i specifikuar dhe kështu: Para instruksionit Pas instruksionit __________________________________________________________________ Akumulator me të dhënë 0011 Akumulator me të të dhënë 0010 6

Gjuha programuese asembler 5 Compare Ky instruksion tregon nëse përmbajtja e regjistrit është më

Gjuha programuese asembler 5 Compare Ky instruksion tregon nëse përmbajtja e regjistrit është më e madhe, më e vogël ose e barabartë me përmbajtjen e lokacionit të memories së specifikuar. Rezultati paraqitet në statusin e regjistrit si flag (flamuri). Logjike (Logical) 6 AND Ky instruksion shërben operacionin logjik AND me përmbajtjen e lokacionit të memories dhe të dhënën në ndonjë regjistër. Numrat janë ANDed bit për bit, p. sh. , Para instruksionit Pas instruksionit __________________________________ Akumulator me të dhënë 0011 Akumulator me të dhënë 0001 Lokacioni i memories me të dhënë 1001 Vetëm në bitin e fundit në të dhënën e mësipërme kemi 1 në të dy vargjet e të dhënës dhe operacioni AND jepë vetëm 1 në bitin e fundit të rezultatit. 7

Gjuha programuese asembler 7 EXCLUSIVE-OR Ky instruksion tregon operacionin logjik EXCLUSIVE-OR me përmbajtje të

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 8

Gjuha programuese asembler 9 Arithmetic shift (left ose right) Instruksioni arithmetic shift mundëson zhvendosjen

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 9

Gjuha programuese asembler Kontrolli i programit 11 Jump Ky instruksion ndryshon sekuencën në të

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: 10

Gjuha programuese asembler Zvogëlimi i akumulatorit Po Kopjo akumul. në regjist. X Nëse akumul.

Gjuha programuese asembler Zvogëlimi i akumulatorit Po Kopjo akumul. në regjist. X Nëse akumul. është zero? Jo Fillo segmentin e ri të programit 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. 11

Gjuha programuese asembler Adresimi Nëse kodi mnemonik, p. sh. , LDA nevojitet që të

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 68 HC 11 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. 12

Gjuha programuese asembler Shembull i adresimit Modi i adresës Instruksioni --------------------------------------------------------Immediate LDA A #$F

Gjuha programuese asembler Shembull i adresimit Modi i adresës Instruksioni --------------------------------------------------------Immediate LDA A #$F 0 Ngarko akumulatorin A me të dhënën F 0 Direct LDA A $50 Ngarko akumulatorin A me të dhënën në adresën 0050 Extended LDA A$0 F 01 Ngarko akumulatorin A me të dhënën në adresën 0 F 01 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ë. 13

Gjuha programuese asembler Zhvendosja e të dhënave Shembull: Modet e adresimit Immed Direct Operacioni

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

Programet në gjuhën asembler Programi në gjuhën programuese asembler përbëhet prej një numri të

Programet në gjuhën asembler Programi në gjuhën programuese asembler përbëhet prej një numri të madh të instruksioneve që pastaj do të prodhojnë programin në kodin e makinës. Programi i shkruar në gjuhën asembler përbëhet prej sekuencave të formulime (gjendjeve), një formulim për rresht. Formulimi përbëhet prej katër pjesëve ose fushave duke filluar: Label Op-code Operand Comment Label – është emri të dhënës që i referohet memoria (shkronja, numra ose karaktere tjerë) 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 – kjo fushë është opcionale (programeri mund të japë komente) 15

Shembuj programimi në gjuhën programuese Asembler Start Ngarko ACC me numrin e parë Shto

Shembuj programimi në gjuhën programuese Asembler Start Ngarko ACC me numrin e parë Shto numrin e dytë Vendos shumën në memorie Stop Problemi: Mbledhja e dy numrave 8 bitësh të vendosur në dy adresa të ndryshme të memories, ndërsa vendosja e rezultatit të kthehet në memorie. Algoritmi është: 1. Start. 2. Ngarko akumulatorin me numrin e parë. Akumulatori është aty ku rezultatet e operacioneve aritmetikore janë akumuluar. Ky është një regjistër punues, d. m. th. , sikurse notepadi në të cilin kalkulimet bëhen para se rezultati të transferohet dikund tjetër. Kështu duhet të kopjojmë të dhënën në akumulator para se të bëjmë arithmetic. Me PIC është përdorur termi regjistri punues (w). 3. Shtoje numrin tjetër. 4. Vendos shumën në lokacioninn e dedikuar të memories. 5. Stop. 16

Programimi në gjuhën programuese Asembler Mikrokontrolleri M 68 HC 11 ; Mbledhja e dy

Programimi në gjuhën programuese Asembler Mikrokontrolleri M 68 HC 11 ; Mbledhja e dy numrave Label Op-code Operand Comment NUM 1 EQU $00 ; lokacioni i numrit 1 NUM 2 EQU $01 ; lokacioni i numrit 2 SUM EQU $02 ; lokacioni për shumën ORG $C 000 ; adresa e fillimit të userit RAM START LDAA $NUM 1 ; ngakro numrin 1 në akumulatorin A ADDA $NUM 2 ; shto numrin 2 te A STAA SUM ; ruaje shumën në $02 END 17

Kodi i makinës Pas përkthimit në kod të makinës pseudooperacionet tregojnë adresat për njësitë.

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

Programi në 8051 ; Mbledhja e dy numrave Label Op-code Operand Comment NUM 1

Programi në 8051 ; Mbledhja e dy numrave Label Op-code Operand Comment NUM 1 EQU 20 H ; lokacioni i numrit 1 NUM 2 EQU 21 H ; lokacioni i numrit 2 SUM EQU 22 H ; lokacioni për shumën ORG 8000 H ; adresa e fillimit të userit RAM START MOV A, NUM 1 ; ngarko numrin 1 në akumulatorin A ADD A, NUM 2 ; shto numrin 2 te A MOV SUM, A ; ruaje shumën në adresën 22 H END 19

Programi në mikrokontrollerin PIC ; Mbledhja e dy numrave Label Op-code Operand Num 1

Programi në mikrokontrollerin PIC ; Mbledhja e dy numrave Label Op-code Operand Num 1 equ Num 2 equ Sum equ org Start mov. Iw addlw movwf End Comment H’ 20’ ; lokacioni i numrit 1 H’ 21’ ; lokacioni i numrit 2 H’ 22’ ; lokacioni për shumën H’ 000’ ; adresa e fillimit të userit RAM Num 1 ; ngarko numrin 1 në w Num 2 ; shto numrin 2 te w Sum ; ruaje shumën H’ 22’ 20

Looping Start Operacioni jo A eshte kryer operacioni deri ne fund? Në shumë programe

Looping Start Operacioni jo A eshte kryer operacioni deri ne fund? 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ë. po Pjesa tjeter e programit Unaza 21

Looping (Unaza) Problemi 1: Mbledhja e numrave të vendosur në 10 adresa të ndryshme

Looping (Unaza) Problemi 1: Mbledhja e numrave të vendosur në 10 adresa të ndryshme (ky mund të jetë për shembull rezultati i hyrjeve prej 10 sensorëve të ndryshëm që duhet bërë semplimi). Algoritmi mund të jetë: 1 Start 2 Vendos 10 te numratori. 3 Shko (Point) në lokacionin e numrit me adresë të fundit. 4 Shto numrin me adresë të fundit. 5 Zvogëlo numratori për 1. 6 Shto 1 në pointerin me adresë të lokacionit. 7 A është numratori 0? Nëse jo shko në 4. Nëse po vazhdo. 8 Vendos shuma. 9 Stop. 22

Bllok diagrami për mbledhje të 10 numrave Start Shtoje 1 te pointeri Vendos 10

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

Kodi në Asembler ; Mbledhja e dhjetë numrave Label Op-code Operand Comment COUNT POINT

Kodi në Asembler ; Mbledhja e dhjetë numrave Label Op-code Operand Comment COUNT POINT RESULT SUM EQU $0010 EQU $0020 EQU $0050 ORG $0001 LDA B COUNT LDX POINT ; Ngarko numratorin ; Inicializo regjistrin me index ; ne fillim te numrave ADD A X ; Shto addend (shtesen) INX ; Shto 1 te regjistri me index DEC B ; Zbrit 1 nga ; akumulatori B BNE SUM ; Degezohu (shko) te Shuma STA A RESULT ; Vendos WAI ; Ndal programin 24

Përshkrimi i programit Numratori 10 ngarkohet në akumulatorin B. Regjistri i indeksuar jepë adresën

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. 25

Problemi 2: Përcaktimi i numrit më të madh në regjistrin e numrave (ai mund

Problemi 2: Përcaktimi i numrit më të madh në regjistrin e numrave (ai mund të jetë p. sh. , përcaktimi i temperaturës më të lartë që është lexuar nga sensorët e temperaturës). Algoritmi mund të jetë: 1. Pastro adresën përgjigje. 2. Listo adresën fillestare. 3. Ngarko numrin nga adresa fillestare. 4. Krahaso numrin me numër në adresën përgjigje. 5. Vendos përgjigje nëse është më e madhe. 6. Përndryshe ruaje numrin. 7. Rrit adresën fillestare për 1. 8. Degëzo (shko) në 3 nëse adresa nuk është adresa e fundit. 9. Stop. 26

Kodi në Asembler FIRST LAST ANSW NUM NEXT EQU EQU ORG CLR LDX LDA

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

Përshkrimi i programit Procedura është e tillë që së pari adresa përgjegje duhet pastruar.

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. 28

Bllok diagrami për gjetje të numrit më të madh Start numri < pergjegje ?

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