Arhitektura računara/Septembar 2020
- Ovaj rok nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.
1. zadatak
Postavka
[5p] Kontroler izlazne periferije i izlazna periferija za međusobno povezivanje koriste paralelni interfejs koji se sastoji od linija podataka, jedne statusne linije i jedne upravljačke linije. Statusnom linijom izlazna periferija daje indikaciju kontroleru periferije da li je spremna da primi podatak koji je dostupan na linijama podataka, dok kontroler periferije upravljačkom linijom obezbeđuje čitanje podataka sa linija podataka u svoj interni registar. Navesti po kom redosledu se navedene linije koriste za sinhronizaciju i slanje podataka iz kontrolera periferije na periferiju. Odgovor dati tabelarno. Naznačiti koja je početna vrednost na ovim linijama.
| Redosled |
Linija (statusna/upravljačka/podaci) | Vrednost | Značenje |
Ko postavlja |
|---|---|---|---|---|
2. zadatak
Postavka
[5p] Napisati optimalnu sekvencu instrukcija neophodnih za sračunavanje izraza:
int *a, *b, c, i;
...
i = c-1;
while (i >= 0) {
if (b[i] > 0) a[i] = 1;
else a[i] = 0;
i -= 1;
}
...
Na raspolaganju je procesor kod koga aritmetičke, logičke i pomeračke instrukcije imaju format: OC reg, reg, reg/imm gde je OC kod operacije, odredišni operand i prvi operand moraju biti u registru (reg), dok drugi može biti ili u registru ili dat neposredno (reg/imm). Instrukcija LOAD ima format: LOAD reg, mem gde je prvim operandom dat odredišni registar (reg), a drugim izvorište. Instrukcija STORE ima format: STORE reg, mem gde je prvim operandom dat izvorišni registar (reg), a drugim odredište. A, B, C i I su globalne promenljive koje odgovaraju simboličkim oznakama adresa memorijskih lokacija u kojima se nalaze operandi. Sadržaj memorijskih lokacija označenih adresama A, B i C treba da ostane nepromenjen, sadržaj odgovarajućih registara je dozvoljeno menjati. Na raspolaganju stoji 8 registara opšte namene. Pretpostaviti da su svi podaci i adrese iste dužine koja je jednaka adresibilnoj jedinici.
3. zadatak
Postavka
[5p] Napisati optimalnu sekvencu instrukcija koja odgovara sledećoj standardnoj bibliotečkoj C funkciji koja pronalazi prvo pojavljivanje karaktera c u prvih n bajta niza str;
void *memchr(const void *str, int c, int n);
Funkcija kao rezultat vraća pokazivač na pronađeni karakter ili 0 u slučaju da karakter nije pronađen. Formati instrukcija i podataka su kao u zadatku 2. Na raspolaganju stoje i složene instrukcije.
4. zadatak
Postavka
[25p] U računarskom sistemu se nalazi jednoadresni procesor, memorija i periferije PER0, PER1 do PERN. Smatrati da je[sic] broj N pripada skupu od 0h do FFh i da može da se koristi kao neposredna vrednost u programu (#N). Sve komponente računara su povezane sistemskom magistralom sa 16 bitnom adresnom i 16 bitnom magistralom podataka. Adresiranje je na nivou 16 bitnih reči. Svi podaci i adrese su širine 16 bita. Ulazno-izlazni adresni prostor i memorijski adresni prostor su mapirani. Adrese relevantnih registara se formiraju na sledeći način:
| PERXX_CONTROL | FXX0h |
| PERXX_STATUS | FXX1h |
| PERXX_DATA | FXX2h |
gde XX pripada skupu od 0h do N. Npr. za periferiju PER5 adresa kontrolnog, statusnog i registra podataka bile bi F050h, F051h i F052h, respektivno. U upravljačkim registrima bit 0 je Start kojim se dozvoljava početak operacije, bit 1 određuju tip prenosa podataka (1 - ulaz (input), 0 - izlaz (output)), bit 2 je Enable kojim se dozvoljava prekid, a u statusnim registrima bit 0 je Ready koji signalizira spremnost kontrolera periferije. Napisati glavni program, odgovarajući potprogram i prekidne rutine kojima se obavlja sledeći prenos. Periferija PERN šalje beskonačan niz podataka koji se smešta u kružni bafer veličine 100h u memoriju počev od adrese 1000h. Prijem podataka od periferije PERN prestaje kada se napuni bafer i počinje opet kada se u istom oslobodi prostor. U paraleli sa primanjem podataka sa periferije PERN, iz kružnog bafera je potrebno slati podatke na periferije PER0 do PERN-1. Podatke treba slati tako da sve periferije prime tekući podatak pre slanja sledećeg podatka iz bafera. Npr. podatak na adresi 1000h treba poslati periferijama PER0 do PERN-1 pre slanja podataka na adresi 1001h. Periferije PER0 do PERN-1 prestaju sa radom kada se isprazan[sic] bafer, a počinju opet kada se u istom pojavi novi podatak. Primanje podataka sa periferije PERN realizovati korišćenjem mehanizma prekida. Slanje podataka sa periferija PER0 do PERN-1 realizovati ispitivanjem bita spremnosti. Za slanje jednog podatka iz bafera na periferiju XX, XX pripada skupu od 0 do N-1, potrebno realizovati potprogram
bool sendDataToPERX(int value, int x)
koji kroz akumulator vraća jedinicu ako argument value jeste poslat na periferiju PERX, gde argument x odgovara rednom broju periferije na koju se šalje podatak. U suprotnom vraća nulu. Argumenti value i x se prilikom poziva potprograma prenosi[sic] putem steka i pozivalac potprograma je dužan da argument skine sa steka nakon izvršavanja. Smatrati da su dostupni registri BP i SP prilikom pisanja potprograma.
Procesor ne poseduje registre opšte namene. Stek raste od viših ka nižim lokacijama, a SP ukazuje na poslednju zauzetu lokaciju. Dozvoljeno je koristiti dodatne promenljive, ali njihove nazive treba pisati opisno i semantički ispravno. Obavezno je pisanje konciznih komentara nad semantičkim celinama