1.18k likes | 1.43k Views
ARM7 PROCESOR. Mladenović Aleksandar. Pavlović Bojan. Dejković Davor. Milenković Miloš. Arhitektura ARM procesora. Student: Aleksandar Mladenovi ć Broj indeksa : 10017. Arhitektura ARM procesora.
E N D
ARM7 PROCESOR Mladenović Aleksandar Pavlović Bojan Dejković Davor Milenković Miloš
Arhitektura ARM procesora Student: Aleksandar Mladenović Broj indeksa: 10017
Arhitektura ARM procesora U vreme kada se pojavio ARM čip, jedino raspoložive RISC arhitekture su bile RISC I razvijen na Berkeley-u i MIPS na Stanfordu. ARM arhitektura je prihvatila brojne osobine RISC I dizajna, ali je brojne odbacila. One koje su se i dalje koristile su bile: Napuni - smesti arhitektura (load-store) 32-bitni fiksni format instrukcija Tro-adresni format instrukcija Osobine koje je ARM odbacio, a bile su korišćene na RISC I arhitekturi su: Rad sa registarskim prozorima Odloženo grananje Izvršenje svih instrukcija u jednom ciklusu
Registri ARM7 procesoraSkup instrukcija jednog procesora definiše operacije koje programer koristi da promeni stanje sistema. Stanje čine vrednosti podataka koji se čuvaju u vidljivim registrima procesora i u sistemskoj memoriji. Svaka instrukcija izvršava definisanu transformaciju procesora iz stanja koje je bilo pre instrukcije, u stanje po njenom okončanju. Promena stanja se odnosi samo na programsko vidljive, a ne nevidljive registre.To znači da su bitne samo vrednosti koje se čuvaju u vidljivim registrima. Slika 1.Vidljivi registri ARM7 procesora
Statusni registar tekućeg programa (CPSR) se koristi za čuvanje statusnih markera. Ovi markeri se postavljaju nakon izvršenja aritmetičko-logičkih operacija. Sadržaj ovih bitova definiše režim rada procesora,način prihvatanja prekida i stanje nakon izvršenja operacija. • Registri R0 do R12 su registri opšte namene, R13 se koristi kao pokazivač magacina, R14 kao registar za povezivanje podprograma, a R15 kao programski brojač. ARM je arhitektura tipa Load - Store. To znači da sve aritmetičko-logičke instrukcije manipulišu nad sadržajem registara, a jedine dve instrukcije pomoću kojih se vrši obraćanje memoriji su operacije Load i Store. Pomoću Load se dobavlja podatak iz memorije u registar, a pomoću Store sadržaj registra se smešta u memoriju.
Sve ARM instrukcije su 32-bitne. Najznačajnije osobine skupa instrukcija ARM procesora su sledeće: • učitaj-smesti arhitektura. • 3-adresne instrukcije za obradu podataka. • uslovno izvršenje svake od instrukcija. • uključenje vrlo jakih višestrukih učitaj-smesti instrukcija registara • mogućnost da se izvedu opšte operacije pomeranja kao i opšte aritmetičko-logičke operacije u jednoj instrukciji, koja se izvršava u jednom taktnom ciklusu. • proširenje na otvoreni skup instrukcija preko skupa instrukcija koprocesora, što uključuje i dodavanje novih registara i tipova podataka programerskom modelu. • 16-bitna predstava skupa instrukcija velike gustine u Thumb arhitekturi.
Razvojni alati ARM-a Pošto se ARM koristi kao embedded kontroler kod kojih ciljni hardver nije projektovan da predstavlja podlogu za razvoj softvera, ovi alati su namenjeni za razvoj drugih arhitektura kakve su platforme PC-a na kojima se izvršavaju Windows programi ili radne stanice koje rade pod UNIX-om. Struktura razvojnog sredstva ARM je prikazana na slici2. C-ovi ili izvorni asemblerski fajlovi se kompajliraju ili asembliraju u ARM objektni format (.aof), koji se nakon toga povezuju u ARM-ov fajl format (aif.). Na osnovu formatovih fajlova kreiraju se tabele za otklanjanje grešaka u programu uz pomoć AMR-ovog simboličkog debuggera (ARMsd koji može da napuni, izvrši i debagira programe bilo na hardveru kakav je ARM Development Board ili koristeći softversku emulaciju pomoću ARMulatora) .
C source C libraries asm source C compiler assembler .aof linker object libraries .aif debug system model ARMsd ARMulator development board • ARM-ov C kompajler je kompatibilan sa ANSI standardom za C i podržan je od strane odgovarajućih biblioteka standardnih funkcija. • Kompajler koristi ARM standard za poziv procedure za sve spoljašnje dostupne funkcije. • Može mu se narediti da generiše asemblerski izvorni izlazni kod umesto ARM-ovog objektnog formata tako da kod može biti ispitan, ili čak i optimizovan, pa zatim dat na asembliranje. • Kompajleru se može pridružiti i Thumb kod. Slika 2 :Struktura ARM C kompajlera
ARM asembler je pravi makro asembler koji proizvodi ARM objektni izlazni format koji se može linkovati sa izlazom iz C kompajlera. Linker prihvata jedan ili više objektnih fajlova i kombinuje ih u izvršivi program. On rešava simbolička referenciranja između objektnih fajlova i poziva objektne module iz biblioteka po potrebi programa. Može asemblirati različite komponente programa na veći broj različitih načina, zavisno od toga da li se program izvršava u RAM ili ROM memoriji, da li je potrebno preklapanje ,itd. ARM simbolički debuger je ulazni interfejs koji pomaže pri debugovanju programa koji se ili emuliraju (u ARMulatoru) ili izvršavaju na nekom ciljnom sistemu. Primer takvog hardvera je razvojna ploča. Sistem mora podržavati odgovarajuće protokole za debugovanje bilo preko serijske linije za prenos podataka ili preko JTAG test interfejsa. ARMulator (ARM emulator) je programski paket koji modelira ponašanje različitih jezgra ARM procesora na softverski način na nekom drugom računaru. Može raditi sa različitim nivoima preciznosti.
Organizacija i implementacija ARM-a Organizacija jezgra ARM procesora ARM6 i ARM7 se jako malo promenila u odnosu na prve 3-mikronske procesore u tehnologiji razvijene u Acorn-u između 1983. i 1985. Tro-stepeni protočni sistem (pipeline) koji su ovi procesori koristili je postepeno usavršavan, a tehnologija CMOS procesa je znatno smanjila veličinu čipova, pa su se performanse ovih jezgara drastično povećale. U datom trenutku, moguće je da se izvršavaju 3 instrukcije, od kojih se svaka nalazi na različitom stepenu. Kada procesor izvodi jednostavne instrukcije za obradu podataka, protočni sistem (pipeline) omogućava da se po jedna instrukcija izvrši u svakom taktnom ciklusu. Jednoj instrukciji je potrebno tri taktna ciklusa da bi se izvršila, tako da ona ima kašnjenje od tri ciklusa. Stvarni propusni opseg je ipak jedna instrukcija po ciklusu. Od 1995. se pojavilo još par novih ARM jezgara koja su imala daleko bolje performanse zbog uvođenja peto-stepene protočne obrade kao i zasebnih memorija za instrukcije i podatke obično u formi razdvojenih keš memorija međusobno povezanih preko jedinstvene memorije za instrukcije i podatke.
ARM procesori do verzije ARM7 koriste tro-stepenu protočnu obradu kod koje se identifikuju sledeći stepeni: Fetch (pribavljanje)-instrukcija se pribavlja iz memorije i smešta u instrukcioni protočni system Decode (dekodiranje)- vrši se dekodiranje instrukcije a upravljački signali staze podataka se pripremaju za naredni ciklus Execute (izvršenje)- instrukcija se izvršava od strane staze podataka, čitaju se sadržaji registarske banke, pomera se operant,rezultat koji generiše ALU se upisuje u odredišni registar. Tro-stepena protočna ARM organizacija Slika 3 :Tro-stepena protočna obrada
Osnovne komponente ARM-a su: • Registarska banka - koristi se za čuvanje stanja procesora. Banka ima dva porta za čitanje i jedan port za upis. Portovi se mogu koristiti za pristup bilo kom registru. Postoji i dodatni port za čitanje i port za upis kojima se pristupa registru R15, programskom brojaču. Dodatni port za upis u R15 omogućava njegovo ažuriranje nakon što se pribavljena instrukcija adrese inkrementira, dok port za čitanje obezbeđuje da se nastavi sa fazom pribavljanja nakon što je adresa izdata. • Barrel pomerač - može da pomera ili rotira bilo koji operant proizvoljan broj bit pozicija. • Aritmetičko-logička jedinica (ALU) - obavlja aritmetičke i logičke funkcije iz repertoara skupa naredbi. • Adresni registar i inkrementer - selektuje i čuva sve memorijske adrese i generiše sekvencijalne adrese kada je to potrebno. • Registri podataka- čuvaju podatke koji se prenose ili dobavljaju iz memorije. • Dekoder instrukcija i upravljačka logika.
ARM procesori se realizuju i kao petostepeno protočni. Kod ovih procesora postoje sledeći stepeni: • Fetch • Decode • Execute • Buffer/data- pristupa se memoriji za podatke kada se to zahteva od strane instrukcije. Inače ALU rezultat se baferuje i prosleđuje se i sledećem stepenu taktnog ciklusa. • Write-back- rezultati generisani od strane instrukcije upisuju se u registarsko polje uključujući i podatke koji se dobavljaju iz memorije. • Ovakav petostepeni protočni sistem korišćen je od strane velikog broja RISC procesora i predstavlja klasično rešenje za ovakav tip procesora. Peto-stepeni ARM processor Slika 4. Struktura peto-stepenog jezgra ARM-a
ARM jezgra procesora ARM7TDMI ARM7TDMI ima jezgra sa naslabijim performansama. Koristi se kod velikog broja aplikacijama a tipična je ona koja se koristi za mobilni digitalni telefon. Jezgro procesora čini ARM integer jezgro koje koristi 3 protočna stepena sa sledećim proširenjima: • primenjuje i izvršava ARM arhitekturu verzije 4T sa podrškom koja podržava 64-bitne rezultate množenja, operacija Load i Store tipa polureč i jedan bajt, kao i skup instrukcija Thumb. • Sadrži EMbeddedICE modul koji podržava otklanjanje grešaka u programu kod ambedet sistema
Slika 5. Organizacija procesora ARMI7TDMI Kod otklanjanja grešaka u hardveru pristup procesoru se ostvaruje preko JTAG porta za pristup, pri čemu je JTAG logika sastavni deo procesora.
Hardverski interfejs Jako veliki broj signala može dovesti do pogrešnog zaključka jer se njima pretpostavlja složeno ponašanje koje se nadovezuje na suštinsku jednostavnost bazičnog ARM interfejsa. Među signalima interfejsa dominiraju signali sa magistrala podataka i adresa, tako da će jednostavni memorijski interfejs koristiti ove signale kao i par kontrolnih signala. Ostali signali su namenjeni nekim drugim funkcijama poput debug-ovanjana čipu, JTAG boundary scan-u, i nekim drugim. Slika 6:Signali ARM7TDMI hardverskog interfejsa
Signali interfejsa prikazani su u grupama po funkcijama, i uloga svake grupe je opisana sa odgovarajućim informacijama o pojedinačnim signalima. Kontrola takta-Sve promene stanja unutar procesora se kontrolišu memorijskim taktom, mclk. Iako se ovim taktom može upravljati eksterno i time načiniti da procesor čeka na pristup, jednostavnije je imati samostalan takt i koristiti signal za preskakanje taktnih ciklusa. Memorijski interfejs-Memorijski interfejs obuhvata 32-bitnu adresu (A(31:0)), dvosmernu magistralu podataka (D(31:0)), posebne magistrale za prijem i slanje podataka (Dout(31:0)) i (Din(31:0)), kao i deset kontrolnih signala. MMU interfejs- Interfejs signali ka MMU daju informacije koje se koriste za kontrolu pristupa određenim oblastima memorije. Signal ukazuje da li se procesor nalazi u korisničkom (=0) ili u povlašćenom (=1) načinu rada, tako da se nekim oblastima memorije ne može pristupiti.
Stanje - Tbit izlaz daje informaciju okruženju o tome da li procesor trenutno izvršava ARM ili Thumb instrukcije.Konfiguracija - bigend menja red bitova između Little- i Big-endian. Ovaj ulaz konfiguriše način na koji procesor radi i ne očekuje se od njega da se dinamički menja, iako se po potrebi može menjati tokom faze takta 2.Prekidi - Dva ulaza za prekide mogu biti asinhrona u odnosu na takt procesora jer prolaze kroz lečeve za sinhronizaciju pre ulaska u kontrolnu logiku procesora. Brzi zahtev za prekid ima veći prioritet od normalnog zahteva za prekid.Inicijalizacija - resetstartuje procesor iz poznatog stanja kada izvršavanje počinje sa adrese 0000000016. ARM7TDMI jezgro signalizira kada je u ciklusu zapisivanja pomoću signala . Tamo gde je eksterna magistrala podataka dvosmerna, enout se koristi za omogućavanje pristupa signalu dout (31:0) namagistralu. Ponekad je poželjno odložiti operaciju zapisivanja kako bi drugi uređaji mogli koristiti magistralu.Ostali signali za kontrolumagistrala su , enin , enout , abe, ale, tbe, busen, highz, busdis, i ecapclk i izvode različite operacije.
Podrška zadebugovanje - Ugrađeni ICE modul sadrži tačke prekida registre za posmatranje stanja koji omogućavaju kodu da se zaustavi kako bi se izvršilo debug-ovanje. Ove registre kontroliše JTAG test port korišćenjem lanca za skeniranje. Kada se dođe do tačke prekida ili pregleda stanja, procesor se zaustavlja i prelazi u stanje debug-ovanja. U tom stanju se mogu ispitivati vrednosti registra procesora. Vrednosti registara će biti prosleđene na magistralu podataka odakle mogu biti uzorkovane i ponovo pomerene. Interfejs zadebug-ovanje - Interfejs za debug-ovanje povećava funkcionalnost koju daje integrisana ugrađena ICE makro ćelija tako što dozvoljava da se spoljašnji hardver poveže zbog debug-ovanja (putem dbgen), i dozvoljava asinhroni zahtev zadebug-ovanjem (preko dbgrq) ili zahtev sinhronizovan sa instrukcijom (breakpt). Spoljašnji hardver se obaveštava o debug stanju procesora putem dgback signala. Interni signal za debug-ovanje se vodi na dbrqi. Interfejs koprocesora - Dodatni signal koji daje koprocesor je koji pokazuje da li će se u memorijskom pristupu pribaviti instrukcija ili podatak. Ovo se može koristiti za praćenje izvršenja ARM instrukcije. JTAG interfejs - JTAG kontrolni signali se povezuju na test kontroler preko svojih pinova
Boundary scan - ARM7TDMI ćelija sadrži potpun JTAG TAP kontroler za dodatnu ugrađenu ICE funkcionalnost jre je ovaj TAP kontroler u stanju da podrži bilo koje olakšice prilikom skeniranja kojima se pristupa preko JTAG porta. Signali drivesb, ecapclkbs, icapclkbs, , pclkbs, rstclkbs, sdinbs, sdoutbs, shclkbs i shclk2bs u interfejsu su zato mogući kako bi se dozvolile dodatne putanje za skeniranje koje će se dodati sistemu. ARM7TDMI u sintezi - Proces sinteze podržava brojne opcije u varijacijama u funkcionalnosti jezgra procesora. Ovo uključuje: - izostavljanje ugrađene ICE ćelije; - zamenu kompletnog 64-bitnog množača jednostavnijim i manjim množačem koji podržava - samo ARM instrukcije množenja koje daju 32-bitni rezultat. Jezgro ARM7TDMI procesora je našlo razne primene u sistemima sa jednostavnom konfiguracijom memorije. To znači da se puno koristi u sistemima koji poseduju par kilobajta jednostavnog RAM-a na čipu. Tipičan primer takvog sistema je mobilni telefon. Tu se objedinjuju moderni hardver za obradu digitalnih signala i odgovarajuća memorija. Zato je ARM7TDMI postao najkorišćeniji procesor za funkcije kontrole i korisničkog interfejsa.
ARM8TDMI ARM8 jezgro je nastalo u kompaniji ARM Limited u periodu između 1993. i 1996. kako bi ispunilo zahteve za ARM jezgrom koje će imati bolje performanse od onih koje je postizalo dotadašnje ARM7 jezgro. Danas su ga nasledila ARM9 i ARM10 jezgra ali je njegov dizajn izazvao veliko interesovanje. • Performanse procesora su poboljšane na sledeće načine: • Povećavanjem taktne frekvencije. Ovo zahteva pojednostavljenje logike u svakom protočnom stepenu (pipelinu) što povlači povećanje broja protočnih stepena • Smanjenjem CPI taktnih ciklusa po instrukciji. Ovo zahteva smanjenje brojakomunikacionih kanala koje zauzimaju instrukcije, ili smanjenje zavisnosti među instrukcijama tako da one ne izazivaju zastoje u komunikacionim kanalima. • Najbolja je kombinacija oba metoda.
ARM8 procesor se sastoji iz jedinice za pribavljanje instrukcija i integer staze podataka. Jedinica za pribavljanje je zadužena za pribavljanje instrukcija iz memorije i njihovo baferovanje u unapred zadati redosled. Taj redosled mora omogućiti maksimalno korišćenje propusnog opsega memorije. Zatim se integer jedinici prosleđuje po jedna instrukcija u svakom taktu zajedno sa vrednošću programskog brojača za datu instrukciju. Jedinica za pribavljanje je takođe zadužena za predikciju grananja, i koristi statičko predviđanje kod određivanja smera grananja (za grananja unazad se predviđaju da će se desiti, dok se grananja unapred predviđaju kao ‘neće se desiti’). Slika 7:Organizacija procesora ARM8TDMI ARM processor koristi peto-stepenu protočnu obradu pri čemu jedinica za unapred pribavljanje instrukcija odgovara prvom stepenu protočne obrade dok se integer jedinici pridružuju ostala 4 stepena.
ARM9TDMI ARM9TDMI jezgro poseduje funkcionalnost ARM7TDMI jezgra ali sa značajno poboljšanim performansama. Poput ARM7TDMI jezgra (na suprot od ARM8 jezgra) ovo novo jezgro podržava Thumb skup instrukcija i EmbeddedICE modul za podršku debugovanja na samom čipu. Poboljšanja u performansama su ostvarena nakon prihvatanja petostepenog protočnog sistema (pipelina) čime se obezbedilo povećanje pobudne taktne frekvencije kao i korišćenje posebnih memorijskih portova za pristup instrukcijama i podacima čime se značajno poboljšao CPI. Ima odvojene portove za instrukcije i podatke. U osnovi je moguće povezati ove portove na jedinstvenu memoriju, ali je posledica toga smanjenje performansi tako da se povezivanje ne izvodi. Pravi se za veće radne frekvencije u poređenju sa ARM7TDMI jezgrom, tako da sve aplikacije koje koriste ARM9TDMI jezgro imaju složenije i brže memorijske podsisteme. ARM procesori se primenjuju u : Industrijskoj kontroli,medicinskim sistemima kontroli pristupa,komunikacionim skretnicama,ugradjenim modemima i u primenama opšte namene.
Skup instrukcija ARM • Student: Davor Dejkovic • Broj indeksa: 9885
1. Tipovi podataka sa kojima ARM manipuliše ARM procesori podržavaju šest tipova podataka: • 8-bitne označene i neoznačene bajtove. • 16-bitne označene i neoznačene polureči; poređane na granice od dva bajta. • 32-bitne označene i neoznačene reči; poređane na granice 4 bajta.
2. Tipovi instrukcija procesora ARM Procesor ARM podržava sledeće tipove instrukcija: • Instrukcije za pribavljnje podataka i memorisanje • Instrukcije za razmene sadržaja memorije i registra • Instrukcije pristupa status registara • Instrukcije za obradu podataka • Različite aritmetičke instrukcije • Instrukcije množenja • Instrukcije grananja • Instrukcije za generisanje softverkoih prekida • Instrukcije koprocesora
Instrukcije za pribavljnje podataka i memorisanje Ova grupa instrukcija se može podeliti na: • Instrukcije za prenos podataka tipa jedna reč ili neoznačeni bajt (Ove instrukcije su najfleksibilniji način za prenos (premeštanje) bajtova ili reči podataka između registara ARM i memorije. Premeštanje velikih blokova podataka je obično bolje izvesti korišćenjem višestrukih instrukcija za prenos registara, dok najnoviji ARM procesori takođe podržavaju instrukcije za premeštanje polureči i označenih bajtova). • Instrukcije za prenos podataka tipa polureči i označenih bajtova • Višestruke instrukcije za učitavanje i smeštanje (Ove ARM instrukcije omogućavaju da se bilo koji podskup (ili svi) od 16 registara koji su vidljivi u tekućem režimu rada mogu smestiti u memoriju ili pročitati iz nje. Jedan oblik ove instrukcije omogućava operativnom sistemu da napuni ili memoriše register korisničkog načina rada kao i da zapamti i obnovi stanje korisničkig procesa, a takođe da omogući CPSR registru da obnovi stanje koje se čuva u SPSR, a deo je povratne informacije programa za obradu izuzetaka. Ove instrukcije se koriste za ulazak i povratak iz procedura radi smeštanja i obnavljanja stanja radnih registara).
Binarno kodiranje instrukcije za transfer podataka od jedne reči ili neoznačenog bajta:
Asemblerski format: Pre-indeksirani format instrukcije: LDR | STR{<cond>} {B} Rd, [Rn, <offset>] {!} Post-indeksirani oblik: LDR | STR{<cond>} {B} {T} Rd, [Rn], <offset> Primeri: LDR r1, [r0] ; učitaj r1 iz adrese u r0 LDR r8, [r3, #4] ; učitaj r8 iz adrese u r3 + 4 STR r2, [r1, #0x100] ; smesti r2 na adresu u r1 + 0x100 LDRB r5, [r9] ; učitaj bajt u r5 iz r9 LDRB r3, [r8, #3] ; učitaj bajt u r3 iz r8 + 3 LDR r11, [r1, r2] ; učitaj r11 iz adrese u r1 + r2 STRB r10, [r7, -r4] ; smesti bajt iz r10 na adresu u r7 - r4 LDR r11, [r3, r5, LSL #2] ; učitaj r11 iz r3 + (r5 x 4) LDR r1, [r0, #4] ! ; učitaj r1 iz r0 + 4, zatim r0= r0 + 4 LDR r3, [r9], #4 ; učitaj r3 iz r9, zatim r9= r9 + 4 STR r2, [r5], #8 ; smesti r2 u r5, zatim r5= r5 + 8 LDR r0, [r1], r2 ; učitaj r0 iz r1, zatim r1= r1 + r2
Binarno kodiranje instrukcije za transfer podataka polureči i označenih bajtova:
Asemblerski formati: Pre-indeksiran oblik: LDR | STR{<cond>}H |SH |SB Rd, [Rn, <offset>] {!} Post-indeksiran oblik: LDR | STR{<cond>}H |SH |SB Rd, [Rn, <offset>] Primeri: LDRH r1, [r0] ; učitaj polureč u r1 iz r0 LDRH r8, [r3, #2] ; učitaj polureč u r8 iz r3 + 2 LDRH r12, [r13, #-6] ; učitaj polureč u r12 iz r13 - 6 STRH r2, [r1, #0x80] ; smesti polureč iz r2 u r1 + 0x80 LDRSH r5, [r9] ; učitaj označenu polureč u r5 iz r9 LDRH r11, [r1, r2] ; učitaj polureč u r11 iz adrese u r1 + r2 LDRSH r1, [r0, #2] ! ; učitaj označenu polureč r1 iz r0 + 2, ; zatim r0= r0 +2 LDRSB r7, [r6, #-1] ! ; učitaj označen bajt u r7 iz r6 - 1, ; zatim r6= r6 -1 LDRH r3, [r9], #2 ; učitaj polureč u r3 iz r9, zatim r9= r9 +2 STRH r2, [r5], #8 ; učitaj polureč iz r2 u r5, zatim r5= r5 +8
Binarno kodiranje višestruke instrukcije za učitavanje i smeštanje
Asemblerski format: Uobičajeni oblik instrukcije je: LDM | STM{<cond>}<add mode> Rn{!}, <registers> U ne-korisničkom načinu rada CPSR se može obnoviti pomoću: LDM{<cond>}<add mode> Rn{!}, <registers + pc>^ Korisnički registri se mogu sačuvati ili obnoviti pomoću: LDM | STM{<cond>}<add mode> Rn, <registers - pc>^ Primeri: Da bi se sačuvlo stanje tri radna registra i povratne adrese nakon ulaska u subrutinu potrebno je izvršiti instrikciju: STMFD r13!, {r0 - r2, r14} Ovo pretpostavlja da je r13 inicijalizovan za korišćenje kao pokazivač magacina. Da bi obnovili stanje radnih registara i obavili povratak koristi se instrukcija: LDMFD r13!, {r0 - r2, pc}
Instrukcije za razmenu sadržaja memorije i registra Ove Instrukcije kombinuju učitavanje i smeštanje reči ili neoznače-nog bajta u jednoj instrukciji. Obično se dva prenosa kombinuju u jednu memorijsku operaciju koja se ne može razdvojiti spoljašnjim memorijskim pristupom (npr. pomoću DMA od kontrolera). Tako se instrukcija može koristiti kao osnova mehanizam semafora kako bi se obezbedila uzajamna isključivost u pristupu strukturama podaka koji su deljivi između većeg broja procesa, procesora ili procesora i DMA kontrolera. Binarno kodiranje Instrukcije za razmenu sadržaja memorije i registra
Asemblerski format: SWP{<cond>} {B} Rd, Rm, [Rn] Primeri: SWP r12, r10, [r9] ; učitaj r12 iz adrese r9 i ; smesti r10 na adresu r9 SWPB r3, r4, [r8] ; učitaj bajt u r3 iz adrese r8 i ; smesti bajt iz r4 na adresu r8 SWP r1, r1, [r8] ; zameni vrednosti u r1 i adresu u r2
Instrukcije pristupa status registara Ova grupa instrukcija se može podeliti na: • Instrukcije za prenos stanja statusnog registara u registre opšte namene (U slučaju da je potrebno sačuvati ili modifikovati sadržaj CPSR ili SPSR registra tekućeg načina rada, njihovi sadržaji moraju se prvo preneti u registar opšte namene, zatim da se modifikuju selektovani in a kraju da se povratna vrednost smesti u statusni registar. Ove instrukcije obavljaju prvi korak u zadatoj sekvenci) • Instrukcije za prenosa registara opšte namene u statusni registar (U slučaju da je potrebno zapamtii ili modifikovati sadržaj CPSR ili SPSR tekućeg načina rada, njihovi sadržaji se prvo moraju preneti u registar opšte namene, zatim da se odabrani bitovi modifikuju, a onda se povratna vrednost smešta u statusni registar. Ove instrukcije obavljaju poslednji korak u zadatoj sekvenci).
Binarno kodiranje instrukcije prenosa status registara u registre opšte namene Asemblerski format: MRS{<cond>} Rd, CPSR | SPSR gde je Rd odredišni registar CPSR - Current Program Status Register SPSR - Saved Program Status Register Primeri: MRS r0, CPSR ; prebaci CPSR u r0 MRS r3, SPSR ; prebaci SPSR u r3
Binarno kodiranje instrukcije prenosa registara opšte namene u status registar
Asemblerski format: MSR{<cond>} CPSR_f|SPSR_f, #<32-bit immediate> MSR{<cond>} CPSR_<field>|SPSR_<field>, Rm gde je <field> jedno od: c – kontrolno polje – PSR[7:0]. x – polje proširenja – PSR[15:8] (ne koristi se kod trenutnih ARM) s – polje statusa – PSR[23:16] (ne koristi se kod trenutnih ARM) f – polje flegova – PSR[31:24] Primer: Za postavljanje N, Z, C, i V flegova: MSR CPSR_f, #&f0000000 ; postavi sve flegove Za postavljanje C flega, i očuvanje N, Z i V: MRS r0, CPSR ; prebaci CPSR u r0 ORR r0, r0, #&20000000 ; postavi bit 29 od r0 MSR CPSR_f, r0 ; prebaci natrag u CPSR
Instrukcije za obradu podataka Instrukcije procesora ARM koje se koriste za obradu podataka omogućavaju programeru da izvodi aritmetičke i logičke operacije nad podacima u registrima. Ovim instrukcijama su tipično potrebna dva operanda i one generišu jedinstven rezultat. Ova grupa instrukcija se može podeliti na: • Aritmetičke operacije • Logičke operacije • Operacije premeštanja sadržaja registara • Operacije poređenja • Neposredni operandi • Pomereni registarski operandi
Asemblerski format: Opšti format asemblerskih instrukcija iz ove grupe je sledećeg oblika: <op>{<cond>} {s} Rd, Rn, #<32-bit immediate> <op>{<cond>} {s} Rd, Rn, Rm, {<shift>} Kod monadičkih operacija kakve su MOV, MVN izostavlja se Rn tako da je format sledećeg oblika: <opcode1>{<cond>} {s} Rd, <shifter operand> <opcode1> := MOV | MVN Kod instrukcija upoređivanja kakve su CMP, CMN, TST, TEQ postavljaju se samo flegovi, ne specificira se registar Rd pa je format sledećeg oblika: <opcode2>{<cond>} Rn, <shifter operand> <opcode2> := CMP | CMN | TST | TEQ Kod tro-operandskih instrukcija format je oblika: <opcode3>{<cond>} {s} Rd, Rn <shifter operand> <opcode3> := ADD | SUB | RSB | ADC | SBC | RSC | AND | BIC | EOR | ORR
Aritmetičke operacije Ove instrukcije izvode binarne aritmetičke operacije (dodavanje oduzimanje, ili inverzno oduzimanje tj. oduzimanje sa izmenjenim redosledom operanada) nad dva 32-bitna operanda. Operandi mogu biti neoznačene ili označene celobrojne vrednosti u dvojičnom komplermentu. Ulazni prenos kada se koristi predstavlja tekuću vrednost C bita registra CPSR. ADD r0, r1, r2 ; r0 := r1 + r2 ADC r0, r1, r2 ; r0 := r1 + r2 + C SUB r0, r1, r2 ; r0 := r1 - r2 SBC r0, r1, r2 ; r0 := r1 - r2 + C - 1 RSB r0, r1, r2 ; r0 := r2 - r1 RSC r0, r1, r2 ; r0 := r2 - r1 +C – 1 ‘ADD’ prdstavlja sabiranje, ‘ADC’ je sabiranje sa prenosom, ‘SUB’ je oduzimanje, ‘SBC’ je oduzimanje sa pozamljivanjem, ‘RSB’ je oduzimanje sa inverznim redosledom a ‘RSC’ oduzimanje sa inverznim redosledom i pozamljivanjem. Logičke operacije Ove instrukcije izvode logičke operacije Bulove algebre za svaki par bitova ulaznih operanada AND r0, r1, r2 ; r0 := r1 and r2 ORR r0, r1, r2 ; r0 := r1 or r2 EOR r0, r1, r2 ; r0 := r1 xor r2 BIC r0, r1, r2 ; r0 := r1 and not r2 Mnemonici AND, ORR, EOR se odnose na logičke operacije I, ILI, isključivo ILI. Mnemonik BIC se odnosi na ‘brisanje bita’ gde svaka ‘1’ u drugom operandu briše odgovarajući bit u prvom operandu.
Operacije premeštanja sadržaja registara Ove instrukcije ignorišu prvi operand koji se izostavlja iz formata asem-blerskog jezika, i kopiraju drugi operand u krajnje odredište. MOV r0, r2 ; r0 := r2 MVN r0, r2 ; r0 := not r2 MVN’ mnemonik znači ‘kopiranje koplementarne vrednosti’ u odredišni registar Operacije poređenja Ove instrukcije ne generišu rezultat (koji je zbog toga izostavljen iz formata asemblerskog jezika) već samo postavljaju flegove (N, Z, C i V) registra CPSR. CMP r1, r2 ; postavi cc na r1 - r2 CMN r1, r2 ; postavi cc na r1 + r2 TST r1, r2 ; postavi cc na r1 and r2 TEQ r1, r2 ; postavi cc na r1 xor r2 Mnemonici označavaju ‘poređenje’ (CMP), ‘poređenje sa negacijom’ (CMN), testiranje sadržaja bita (TST) i ‘test nejednakost’ (TEQ). Neposredni operandi Ako umesto sabiranja sadržaja dva registra želimo da saberemo neku konstantu sa sadržajem registra tada će drugi operand biti neposredna vrednost koje se definiše kao konstanta kojoj prethodi znak #: ADD r3, r3, #1 ; r3 := r3 + 1 AND r8, r7, #&ff ; r8 := r7[7:0]
Različite aritmetičke instrukcije Prebrojavanje početnih nula (CLZ(Count Leading Zeros) Korisna je za ponovnu normalizaciju brojeva i mnogo je efikasnija nego samo korišćenje nekih drugih ARM instrukcija. Asemblerski format: CLZ{<cond>} Rd, Rm Rd označava odredišni registar, a Rm izvorni registar Primer: MOV r0, #&100 CLZ r1, r0 ; r1 := 23 Binarno kodiranje instrukcije brojanja početnih nula
Instrukcije množenja ARM instrukcije množenja daju proizvod u vidu dva 32-bitna binarna broja koja se čuvaju u registrima. Množenje dve 32-bitne celobrojne vrednosti dobija se 64-bitni rezultat, kod koga se 32 bita manje težine smeštaju u odredišni registar rezultata dok se ostali zanemaruju. Binarno kodiranje instrukcije množenja
Asemblerski format: Instrukcije koje daju 32 bita najmanje vrednosti u proizvodu su: MUL{<cond>} {s} Rd, Rm, Rs MLA{<cond>} {s} Rd, Rm, Rs, Rn Veoma važna instrukcija koja se koristi kod digitalnog procesiranja signala je množenje sa akumulacijom. U jednom konkretnom primeru ona je sledećeg oblika: MLA r4, r3, r2, r1 ; r4 := (r3 x r2 +r1) Primeri: MUL r4, r2, r1 ; r4 dobija vrednost r2 pomnožena sa r1 MULS r4, r2, r1 ; r4 := r2 x r1, postavi N I Z flegove MLA r7, r8, r9, r3 ; r4 := r8 x r9 + r3 SMULL r4, r8, r2, r3 ; r4 := bitovi 0 do 31 od r2 x r3 ; r8 := bitovi 32 do 63 od r2 x r3 UMULL r6, r8, r0, r1 ; r8, r6 := r0 x r1 UMLAL r5, r8, r0, r1 ; r8, r5 := r0 x r1 + r8, r5
Instrukcije grananja U ovu instrukcija spadaju: • Grananje sa linkom (Instrukcije grananja i grananja sa linkom su standardni načini za promenu toka izvrešenja sekvenci instrukcija. ARM standardno izvršava instrukcije sa sekvencijalnim redosledom adresa u memoriji, a koristi uslovno izvršenje sa grananjem tamo gde je to potrebno). • Grananje sa linkom i razmenom (Ove instrukcije su dostupne kod ARM čipova koji podržavaju 16-bitni Thumb skup instrukcija, i jedan su od mehanizama za prebacivanje procesora u režim rada kada bi izvršavao thumb instrukcije ili za povratak na ARM ili Thumb rutine). Format asemblera: B{L}X{<cond>} Rm BLX <target address> B{L} {<cond>} <target address> <target address> je obično labela u asemlerskom kodu. Asembler generiše ofset (koji će biti razlika između adrese reči mete i adrese instrukcije grananja plus 8) i postavlja H bit ako je potrebno.
Binarno kodiranje granjanja i grananje sa linkom Binarno kodiranje granjanja (sa opcionim linkom) i instrukcijom razmene
Instrukcije za generisanje softverkoih prekida Ova grupa instrukcija se može podeliti na: • Softverski prekid (SWI) (Instrukcija softverskog prekida se koristi za poziv operativnog sistema i često se naziva ‘poziv supervizoru’. Ona postavlja procesor u supervizorski režim rada i započinje izvršenje instrukcija sa adrese 0x08). • Instrukcija prekidna tačka (Instrukcije prekidne tačke se koriste za debagiranje softvera; one uzrokuju da procesor prekine sa normalnim izvršenjem instrukcija i pređe na izvršenje odgovarajuću proceduru za debagiranja.)