SDOS_lab01
Transcript of SDOS_lab01
-
8/18/2019 SDOS_lab01
1/13
1
SDOS – Laboratorijske vježbe - Vježba 1
Na laboratorijskim vježbama iz Sustava za digitalnu obradu signala bavit ćemo se uglavnom
programiranjem za Blackfin ADSP-BF533, DSP procesor tvrtke Analog Devices. Programi ćese pisati u asemblerskom jeziku za Blackfin procesore te u programskom jeziku C.
1. Osnovna arhitektura Blackfin procesora
Jezgru Blackfin procesora čine:
1) aritmetička jedinica za podatke
2) adresna aritmetička jedinica
3) kontrolna jedinica
Podatkovna aritmetička jedinica sadrži dva 16-bitna sklopa za množenje, dva 40-bitna
akumulatora, dvije 40-bitne aritmetičko-logičke jedinice (ALU), četiri 8-bitnih video ALU-a i
40-bitni bačvasti posmični sklop (engl. barrel shifter ), koji služe za obradu 8-, 16- ili 32-
bitnih podataka iz podatkovnih registara.
Procesor sadrži osam podatkovnih 32-bitnih registara (R0 – R7). Pri radu sa 16-bitnim
podacima, s ovim se registrima radi kao sa 16 neovisnih 16-bitnih registara (R0.L – R7.H).
Naime, korištenjem oznaka .H i .L može se pristupati gornjoj (H – high) ili donjoj (L – low)
polovici podatkovnih registara. Svi operandi u aritmetičkim operacijama se uzimaju iz
registara ili kao konstanta iz same naredbe.
ALU-i obavljaju uobičajeni skup aritmetičkih i logičkih operacija nad 16- i 32-bitnim
podacima, uz dodatak posebnih naredbi koje omogućuju bržu obradu raznih signala
(množenje po modulu 2
32
, detekcija broja postavljenih bitova u operandu, istovremenoobavljanje četiri 16-bitne ALU operacije korištenjem obje ALU jedinice i slično).
-
8/18/2019 SDOS_lab01
2/13
2
40-bitni posmični sklop obavlja operacije logičkog i aritmetičkog posmaka, rotacije,
postavljanja i ispitivanja vrijednosti bitova...
Kontrolna jedinica je zaduženja za dekodiranje naredbi, upravljanje redoslijedom njihovog
izvršavanja, obavljanje grananja i skokova u programu.
Adresna aritmetička jedinica se koristi za izračun dvije adrese koje služe za istovremeni
dohvat dva podatka iz memorije. Sadrži četiri skupa registara za rad sa cikličkim poljima (I,
L, B i M 0-4), te šest 32-bitnih pokazivačkih registra (P0 – P5). Uz njih, tu su i pokazivač na
stog (SP) i okvir (FP), koji se koriste za rad sa stogom.
2. ipovi po!ataka
Blackfin procesori podržavaju rad s 32-bitnim riječima, 16-bitnim poluriječima i 8-bitnim
oktetima. 32- i 16-bitni podaci mogu biti cijeli ili frakcionalni brojevi, dok se okteti uvijeksmatraju cijelim brojevima.
2.1.
"ijeli brojevi
Cijeli brojevi mogu biti sa ili bez predznaka (signed ili unsigned ). Tako oktet može imati
opseg vrijednosti od 0 do 255 (unsigned ) ili od -128 do 127 (signed ), a poluriječ od 0 do
65535 (unsigned ) ili od -32768 do 32767 (signed ). Pritom se negativni brojevi zapisuju
korištenjem dvojnog komplementa. Cijeli brojevi kojima je prvi (najvažniji) bit 1 su
negativni, a oni kojima je 0 su pozitivni. Negativna vrijednost nekog broja a se može lako
izračunati tako da se izračuna prvi komplement broja a, pa se njemu doda 1, tj. 1+=− aa . Na
primjer, kod 8-bitnih cijelih brojeva s predznakom vrijedi:
7 = 00000111 111110011111110001000001117 =+=+=−
32 = 00100000 1110000011101111110010000032 =+=+=−
127 = 01111111 10000001110000000101111111127 =+=+=−
Najmanji cijeli broj s predznakom koji se može zapisati s n bitova je 1000...000 = -2n-1
, dok je
najveći broj 0111...111 = 2n-1
-1.
8-bitni cijeli brojevi s predznakom 16-bitni cijeli brojevi s predznakom
Binarno Decimalno Binarno Decimalno
0111 1111 127 0111 1111 1111 1111 32767
0111 1110 126 0111 1111 1111 1110 32766
0111 1101 125 0111 1111 1111 1101 32765
... ... ... ...
0000 0010 2 0000 0000 0000 0010 2
0000 0001 1 0000 0000 0000 0001 1
0000 0000 0 0000 0000 0000 0000 0
1111 1111 -1 1111 1111 1111 1111 -1
1111 1110 -2 1111 1111 1111 1110 -2... ... ... ...
-
8/18/2019 SDOS_lab01
3/13
3
1000 0010 -126 1000 0000 0000 0010 -32766
1000 0001 -127 1000 0000 0000 0001 -32767
1000 0000 -128 1000 0000 0000 0000 -32768
2.2.
#rakcionalni brojevi
Kod cijelih brojeva ne koristi se decimalna točka, tj. ona se nalazi desno od najmanje
značajnog bita u broju, tako da svi bitovi imaju težinu jednaku ili veću od jedan. Kod
frakcionalnog formata zapisa brojeva decimalna se točka nalazi unutar broja, tako da bitovi
lijevo od točke imaju težinu veću od ili jednaku jedan, dok bitovi desno od točke imaju težinu
manju od ili jednaku 0,5. Ukupna se vrijednost broja dobiva zbrajanjem težina svih
postavljenih bitova, kao i kod cijelih brojeva. Pretpostavimo da je neki broj zapisan u formatu
5.3 ima vrijednost 0101 0011. Ime formata govori da ovaj broj ima 5 binarnih znamenki lijevo
i tri znamenke desno od decimalne točke.
težina znamenke 2^4 2^3 2^2 2^1 2^0 1/(2^1) 1/(2^2) 1/(2^3)
0 1 0 1 0 0 1 1
Dakle, vrijednost ovog broja je 23 + 2
1 + 1/2
2 + 1/2
3 = 8 + 2 + 0,25 + 0,125 = 10,375
Razmislimo malo o frakcionalnim brojevima s predznakom tipa 1.2 i 1.3. To su brojevi
kojima se lijevo od točke nalazi samo znak predznaka (ako je taj bit 0, broj je pozitivan, a ako je 1 onda je negativan), dok su svi ostali bitovi desno od točke. Njima se mogu zapisati
sljedeći brojevi:
Format
1.2 Vrijednost
Format
1.3 Vrijednost
011 0,75 0111 0,875
010 0,5 0110 0,75
001 0,25 0101 0,625
000 0 0100 0,5
111 -0,25 0011 0,375
110 -0,5 0010 0,25
101 -0,75 0001 0,125
100 -1 0000 0
1111 -0,125
1110 -0,25
1101 -0,375
1100 -0,5
1011 -0,625
1010 -0,75
1001 -0,875
1000 -1
-
8/18/2019 SDOS_lab01
4/13
4
Očito je da dodavanje jedne znamenke nije značajno utjecalo na povećanje raspona
vrijednosti koje ovi brojevi mogu imati. Naime, brojevi formata 1.X uvijek će imati
vrijednosti u rasponu [-1, 1>. Međutim, povećanjem broja bitova dobila se finija podjela tog
raspona.
Pretpostavimo da u formatu 1.2 trebamo zapisati broj 0,6. Iz gornje tablice je očito da je to
nemoguće, pa bismo ga aproksimirali kao 010, tj. zapisali bi ga kao broj 0,5 i napravili greškuod 0,6 – 0,5 = 0,1. Ako bismo 0,6 napisali u formatu 1.3 (i dalje ne možemo zapisati to čan
broj, nego moramo aproksimirati), to bi učinili kao 0101 i tako napravili grešku od 0,625 –
0,6 = 0,025. Dakle, iako se u formatima 1.2 i 1.3 mogu zapisati brojevi iz istog raspona,
format s većim brojem bitova može točnije aproksimirati željene vrijednosti.
U radu s Blackfin procesorima koristit ćemo najčešće frakcionalne brojeve s predznakom tipa
1.15 i 1.31. To su brojevi koji imaju jedan bit predznaka i 15 odnosno 31 bit desno od
decimalne točke. I u ovom slučaju je najveća vrijednost koja se može zapisati nekim od ovih
zapisa uvijek manja od 1, dok je najmanja vrijednost koja se može zapisati jednaka -1.
Međutim, kao i u gornjem primjeru s formatima 1.2 i 1.3, dodatnih 16 znamenki kod formata
1.31 u odnosu na 1.15 se koristi za finiju podjelu raspona [-1, 1>, odnosno za pove ćanjepreciznosti zapisa.
Najveći broj koji se može zapisatu u formatu 1.15 je 0111 111 i on iznosi (0 je oznaka
pozitivnog predznaka broja i nalazi se lijevo od decimalne točke) 1/(21) + 1/(2
2) + ... + 1/(2
15)
= 0,5 + 0,25 + ... + 0,0000305175 = 0,999969482421875
Najmanji pozitivni broj u istom formatu je 0000 0001 = 1/(215
) = 0,000030517578125.
Općenito, najveći broj koji se može zapisati u formatu 1.X je 1 – 1/(2x), a najmanji pozitivni
broj je 1/(2x).
Pri operacijama zbrajanja i oduzimanja, oba operanda trebaju biti zapisani u istom formatu (sa
ili bez predznaka, s decimalnom točkom na istoj poziciji), a rezultat operacije bit će također
iskazan u tom formatu. Međutim, kod množenja to nije slučaj. Operandi mogu biti različitih
formata, a o njima ovisi i format u kojem će biti zapisan rezultat. Kod Blackfin procesora
moguće je prilikom množenja specificirati imaju li oba operanda predznak, samo jedan ili
nijedan. Pozicija decimalne točke u rezultatu može se odrediti na temelju njene pozicije u
operandima. Produkt dva 16-bitna broja bit će 32-bitni broj. Općenito, ukoliko su operandi
zapisani u formatu M.N i P.Q, njihov produkt bit će zapisan u formatu (M + P).(N + Q). Na
primjer, produkt brojeva od kojih je jedan formata 1.15, a drugi formata 13.3, bit će u formatu
14.18.
$. Osnovne operacije s re%istri&a
$.1.
Loa!
Svi registri (podatkovni, pokazivački, registri za rad s cikličkim poljima) kod Blackfin
procesora, osim akumulatora A0 i A1, su 32-bitni.
32-bitna konstanta
-
8/18/2019 SDOS_lab01
5/13
5
Operacija upisivanja 32-bitne konstante u neki registar obavlja se u dva koraka.
Pretpostavimo da je u registar R2 potrebno upisati konstantu 0x1A2B3C4D („0x“ označava
heksadecimalni zapis broja, jedna znamenka predstavlja četiri bita u binarnom zapisu). To se
može uraditi sljedećim naredbama:
R2.H = 0x1A2B;
R2.L = 0x3C4D;Prva naredba u gornju polovicu registra R2 (važnijih 16 bitova registra) upisuje vrijednost
0x1A2B, dok druga naredba u donju polovicu istog registra upisuje 0x3C4D. Svaka naredba
završava točkom-zarezom (;).
Sličan je slučaj i s pokazivačkim registrima. Ako u registar P1 želimo upisati memorijsku
adresu 0xFF801234 (sve su memorijske adrese kod Blackfin procesora 32-bitne), to ćemo
učiniti naredbama
P1.H = 0xFF80;
P1.L = 0x1234;
Međutim, ako smo u programu već deklarirali neku varijablu u memoriji, imena moja_var ,
tada se adresa te varijable u pokazivački registar može upisati s:
P1.H = moja_var;P1.L = moja_var;
Naime, procesoru moja_var nije ništa drugo nego 32-bitna memorijska adresa, a asembler će
automatski odabrati ispravnu polovicu adrese koju treba upisati u registar ( u .H će upisati
gornju polovicu adrese, a u .L će upisati donju polovicu).
16-bitna konstantaAko se u registar želi upisati 16-bitna, a ne 32-bitna vrijednost, to se može napraviti u jednom
koraku. Neka u registar R3 treba upisati broj 5000 (heksadecimalno 0x1388, dakle 16-bitna
vrijednost). To bi, naravno, mogli napraviti korištenjem dvije naredbe:
R3.H = 0x0;
R3.L = 0x1388;
Prva naredba briše sadržaj gornje polovice registra R3, a druga u donju polovicu upisuje
željeni broj. Međutim, isto se može postići i naredbom:
R3 = 0x1388 (Z);
Ova naredba u donju polovicu registra R3 upisuje 16-bitnu vrijednost, dok opcija Z govori da
se u gornju polovicu registra treba upisati 0. Osim ove opcije, postoji i opcija X, koja u gornju
polovicu registra upisuje 16 bitova predznaka 16-bitnog broja (0x0 za pozitivne i 0xFFFF za
negativne brojeve). Pretpostavimo da u registar R5 želimo upisati broj -4 (0xFFFC za 16-
bitne ili 0xFFFFFFFC za 32-bitne brojeve). To bismo učinili naredbom:
R5 = 0xFFFC (X);
Ova naredba u donju polovicu registra upisuje 16-bitni broj -4, dok se gornja polovica punipredznakom (16 jedinica ili 0xFFFF). Tako i registar R5 kao cjelina nakon ove naredbe sadrži
32-bitni broj -4.
Obično će se opcija Z koristiti pri radu s brojevima bez predznaka, a opcija X u radu s
brojevima s predznakom.
32-bitna varijablaOsim konstanti u registre se može upisivati i sadržaj s neke memorijske lokacije. Tada je
moguće jednom naredbom napuniti čitav registar, tj. upisati 32 bita (a ne 16 po 16 bitova).
Neka pokazivački registar P0 sadrži adresu 32-bitne varijable moja_var . Naredbom
R1 = [P0];
-
8/18/2019 SDOS_lab01
6/13
6
u registar R1 će se upisati 4 okteta s memorijske adrese sadržane u registru P0, tj. u R1 će se
upisati vrijednost varijable moja_var . Uglate zagrade [ ] u ovoj naredbi označavaju da se
naredba odnosi na sadržaj na memorijskoj adresi.
Vrlo često će se u radu s nizovima (poljima) koristiti naredbe oblika
R2 = [P3++];
Kod ove naredbe će se u registar R2 upisati sadržaj s memorijske lokacije čija je adresazapisana u registru P3, nakon čega će se sadržaj registra P3 uvećati za broj okteta koji je
pročitan iz memorije, u ovom slučaju 4. Ako je prije ove naredbe P3 pokazivao na
memorijsku adresu 0xFF800004, nakon naredbe sadržaj P3 će biti 0xFF800008. Slično, osim
ovakvog post-inkrementa, nad pokazivačkim registrom se može raditi i post-dekrement pri
čemu se sadržaj pokazivačkog registra ne uvećava, nego umanjuje za onoliko koliko je okteta
pročitano iz memorije:
R5 = [P2--];
16-bitna varijablaAko se u memoriji nalaze 16- a ne 32-bitni podaci, tada ćemo iz memorije čitati samo 16
bitova korištenjem naredbi oblika:R0.H = W [P0]; ili
R1.L = W [P3];
Kod ovih naredbi „W“ označava da se iz memorije čita samo 16 bitova (poluriječ). Poluriječ s
adrese u registru P0 se sprema u gornju polovicu registra R0, dok se dva okteta s adrese u
registru P3 spremaju u donju polovicu registra R1.
Korištenjem opcija Z i X moguće je jednom naredbom popuniti cijeli registar iako se iz
memorije čita samo poluriječ. Ona se sprema u donju polovicu registra, dok se u gornju
polovicu upisuju nule (opcija Z) ili se puni predznakom (opcija X), kao u naredbama:
R1 = W [P3] (Z); i
R4 = W [P2] (X);
Iako post-dekrement pri čitanju dva okteta iz memorije nije podržan, moguće je obaviti post-
inkrement nad pokazivačkim registrom, ali uz manje izmjene u odnosu na slučaj s četiri
okteta. Naime, on se obavlja na sljedeći način:
P0 = 2 (Z);
R4.L = W [P3++P0];
Prvom se naredbom (P0 = 2 (Z); ) u jedan pokazivački registar upiše vrijednost koju ćemo
kasnije koristiti za inkrementiranje drugog pokazivačkog registra. Druga naredba čita 16
bitova s memorijske adrese zapisane u pokazivačkom registru (P3) i sprema ih u specificiranu
polovicu podatkovnog registra (R4.L), nakon čega se sadržaj pokazivačkog registra uveća za
vrijednost koju smo prethodno upisali u registar P0. Dakle, naredba
R4.L = W [P3++P0];zamjenjuje dvije naredbe
R4.L = W [P3];
-
8/18/2019 SDOS_lab01
7/13
7
inkrement ili dekrement, pri čemu se sadržaj pokazivačkog registra uvećava ili smanjuje za 1
(budući da je pročitan samo jedan oktet podataka):
R2 = B [P0++] (Z);
$.2.
Store
Osim čitanja podataka iz memorije u registre moguće je, naravno, i spremiti podatke iz
registara u memoriju, i to četiri, dva ili jedan oktet podataka.
32-bitna varijablaNaredbama
[P0] = R0;
[P1] = P2;
u memoriju se spremaju čitavi registri (32 bita). Prva naredba na memorijsku lokaciju čija je
adresa sadržana u pokazivačkom registru P0 upisuje sadržaj podatkovnog registra R0. Druga
naredba na adresu sadržanu u registru P1 upisuje sadržaj pokazivačkog registra P2. I kodnaredbi za pohranu podataka u memoriju mogu se koristiti post-inkrement i dekrement opcije
nad pokazivačkim registrima, pa bi se nakon naredbi
[P3++] = R2;
[P4--] = P5;
sadržaj registra P3 uvećao, a registra P4 umanjio za 4, budući da se u memoriju spremaju
četiri okteta podataka.
16-bitna varijablaZa spremanje gornje ili donje polovice podatkovnog registra (16 bitova) u memoriju koristi se
oznaka W. Gornju polovicu registra R2 možemo upisati u memoriju na adresu koja piše u
pokazivačkom registru P1 naredbomW [P1] = R2.H;
Donju polovicu nekog registra možemo spremiti u memoriju na dva načina:
W [P3] = R4.L; ili
W [P3] = R4;
Budući da se u memoriju upisuju samo dva okteta, u drugoj naredbi se podrazumijeva da se to
odnosi na donju polovicu registra.
Kao i u slučaju čitanja 16 bitova iz memorije, ni pri spremanju 16 bitova u memoriju nije
dozvoljena operacija post-dekrementa nad pokazivačkim registrom. Post-inkrement je
podržan i obavlja se na sličan način:
P0 = 2 (Z);
W [P3++P0] = R4.H;
Druga naredba obavlja spremanje gornje polovice registra R4 u memoriju na adresu zapisanu
u registru P3, nakon čega se sadržaj registra P3 (tj. memorijska adresa na koju on pokazuje)
inkrementira za onoliko koliko piše u registru P0 (za 2). Dakle, naredba
W [P3++P0] = R4.H;
zamjenjuje dvije naredbe
W [P3] = R4.H
-
8/18/2019 SDOS_lab01
8/13
8
čime se na adresu zapisanu u registru P2 sprema donjih 8 bitova iz registra R2. Pri korištenju
post-inkrementa i dekrementa, kao u naredbama
B [P2++] = R2; i
B [P2--] = R2;
vrijednost pokazivačkog registra se mijenja za jedan.
$.$.
'ove
Osim iz memorije u registar te iz registra u memoriju, podaci se mogu prebacivati između
registara. Čitav sadržaj (32 bita) registra reg1 se može upisati u drugi registar reg2 naredbama
oblika
reg2 = reg1;
gdje su reg1 i reg2 bilo koji podatkovni ili pokazivački registar, na primjer
P3 = R1;
Prebacivanje 16 bitova iz jednog registra u drugi moguće je samo među podatkovnim
registrima, korištenjem opcija Z i X:R0 = R1.L (Z); ili
R3 = R5.L (X);
Gornja polovica odredišnog registra (R0 i R3) se puni nulama (opcija Z) ili predznakom
(opcija X), dok se u donju polovicu odredišnog registra sprema donja polovica izvorišnog
registra. Naredbe kojima bi se u odredišni registar kopirala gornja, a ne donja polovica
izvorišnog registra nisu podržane.
Slično vrijedi i za prebacivanje samo jednog okteta među podatkovnim registrima:
R0 = R1.B (Z);
R3 = R5.B (X);
Može se primijetiti da se osim oznakama .H i .L, dijelovima podatkovnog registra može
pristupiti i korištenjem oznake .B. Ona označava najmanje važnih 8 bitova promatranogpodatkovnog registra. Ovim naredbama se donji oktet registara R1 i R5 upisuje na donji oktet
registara R0 i R3, dok se gornjih 27 bitova odredišnih registara puni nulama (R0) ili
predznakom (R3).
(. Struktura ase&blersko% pro%ra&a
Predložak za pisanje asemblerskog programa izgleda:
.SECTION data1;
-
8/18/2019 SDOS_lab01
9/13
9
.GLOBAL _main;
-
8/18/2019 SDOS_lab01
10/13
10
).1.
*okretanje VisualDS*++VisualDSP++ se pokreće odabirom Start -> Programs -> Analog Devices -> VisualDSP++
5.0 -> VisualDSP Environment. Ako se na računalu već pokretao VisualDSP++, a u
Settings -> Properties je odabrana opcija Reload last project at startup, VisualDSP++ će
otvoriti posljednji aktivni projekt. Kako biste ga zatvorili, odaberite File -> Close -> Project.
).2.
reiranje i o!abir sje!niceProjekti se u VisualDSP-u pokreću kao tkz. sjednice za debagiranje. Sjednicu definiraju tri
elementa:
• Procesor – procesor za kojeg se piše program
• Tip veze – kontrolira debagiranje projekta, ovisno o tome koja je od tri opcije
izabrana: simulator (nije potrebno sklopovlje za debagiranje projekta), EZ-KIT Lite
(za debagiranje je potrebna prava pločica s prethodno navedenim procesorom) ili
emulator (za debagiranje je potreban poseban sklopovski modul koji emulira rad
procesora)
•
Platforma – odnosi se na konfiguraciju procesora kojem je projekt namijenjen. Zaodabrani procesor i tip veze može biti ponuđeno više platformi
Nova se sjednica kreira klikom na Session -> New Session i odabirom sljedećih postavki:
• za rad sa simulatorom
Processor Family: Blackfin
Target Processor: ADSP- BF533
Connection Type: EZ-KIT Lite
Session Name: (ostavite podrazumijevano ime)
Platform: ADSP-BF5xx Single processor simulator
•
za rad s EZ-KIT Lite pločicomProcessor Family: Blackfin
Target Processor: ADSP- BF533
Connection Type: EZ-KIT Lite
Session Name: (ostavite podrazumijevano ime)
Platform: ADSP-BF533 EZ-KIT Lite via Debug Agent
Kada se jednom kreira sjednica, pri sljedećim pokretanjima VisualDSP-a moguće ju je
odabrati klikom na Session->Select session i odabirom željene sjednice.
).$.
reiranje projektaKreiranje projekta započinje odabirom File->New->Project, čime se otvara Project Wizard.U njemu se odabere tip projekta (Standard application), odabere ime i odredi lokacija. U
izborniku Select processor odabere se ADSP-BF533 iz Blackfin obitelji procesora. U
Application settings prozoru odabere se opcija Add template source code to the
application, a kao željeni jezik se postavi Assembly. Kao željena izlazna datoteka projekta
odabere se Executable (.dxe) i klikne Finish. Time se završava kreiranje novog projekta
kojem je automatski dodana i prva datoteka za izvorni kod.
).(.
Do!avanje novih i postojeih !atoteka projektu
Postojeće datoteke s izvornim kodom aktivnom se projektu mogu dodati tako da se nakonklika na Project->Add to project->File(s) odabere jedna ili više datoteka koje želimo dodati.
-
8/18/2019 SDOS_lab01
11/13
-
8/18/2019 SDOS_lab01
12/13
12
Budući da je prethodno odabrana opcija Load executable after build, po završetku uspješnog
bildanja započet će izvršavanje programa.
Možete primijetiti da se na početku funkcije main nalaze smeđi krug i žuta strelica. Smeđi
krug (●) govori da je na toj naredbi postavljena točka prekida (eng. breakpoint ), a žuta strelica(➨) označava da je procesor trenutno zaustavljen na promatranoj naredbi. Kada
VisualDSP++ učita vaš program u ciljani uređaj (simulator ili stvarni procesor), obično
automatski postavi nekoliko točaka prekida, na primjer na početku i na kraju koda koji se
izvršava.
Moguće je postavljati vlastite točke prekida na željenim naredbama tako što se kursor postavi
na tu naredbu i pritisne F9.
Kada program zastane s izvođenjem zbog dolaska do točke prekida moguće je opet pokrenuti
njegovo izvršavanje i to naredbu po naredbu (pritiskanjem F11) ili do sljedeće točke prekida
(pritiskom F5).
)./.
*raenje vrije!nosti u re%istri&a i &e&orijiPrilikom debagiranja programa moguće je pratiti promjene vrijednosti u registrima i memoriji
Blackfina.
U izborniku Register->Core nudi se mogućnost prikaza sadržaja podatkovnih, pokazivačkih i
drugih registara Blackfin procesora. Također, moguće je vrijednosti u registrima prikazati kao
binarne, decimalne ili heksadecimalne vrijednosti, 8-, 16- ili 32-bitne cijele ili frakcionalne
brojeve sa ili bez predznaka... Potrebno je samo nakon desnog klika u prozor s promatranom
grupom registara odabrati željeni prikaz vrijednosti:
Sadržaj memorije može se prikazati odabirom Memory->BLACKFIN memory. Za prikaz
sadržaja neke memorijske lokacije potrebno je, u za to predviđen text-box, utipkati adresu
lokacije (npr. 0xFF900008) ili ime varijable koja je pohranjena na toj lokaciji (npr. varijabla
rijec iz gornjeg primjera asemblerskog programa).
-
8/18/2019 SDOS_lab01
13/13
13
/. 0a!atak
Potrebno je napisati asemblerski program u kojem se:
a) deklarira i inicijalizira jedna 32-bitna i jedna 16-bitna varijabla
b)
sadržaj 32-bitne varijable upisuje u registar R0 (load)c) sadržaj registra R0 kopira u registar R1 (move)
d) sadržaj 16-bitne varijable upisuje u gornju polovicu registra R2 i donju polovicu
registra R3 (load + load)
e) u 16-bitnu varijablu upisuje gornja polovica 32-bitne varijable (store)
Po završetku kodiranja bildajte projekt i pokrenite ga. Sve naredbe izvršavajte korak po korak
(F11), prateći pritom promjene u sadržaju registara (P i R) i memorije.