Arhitektura računara/Jun 2024

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

1. zadatak

Ovaj zadatak nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.

Postavka

[5p] U posmatranom računarskom sistemu procesor ima 1 par linija po kojima ulazno/izlazni uređaji mogu procesoru da šalju zahteve za prekid i od procesora dobijaju signal potvrde. U datom sistemu ima 5 ulazno/izlaznih uređaja koje treba nekako povezati pomoću tog 1 para linija na procesor i omogućiti za svaki ulazno/izlazni uređaj skok na odgovarajuću prekidnu rutinu vektorisanim mehanizmom prekida.

  1. Nacrtati kako tih 5 ulazno/izlaznih uređaja treba povezati pomoću tog 1 para linija na procesor.
  2. Objasniti kako tih 5 ulazno/izlaznih uređaja šalju zahteve za prekid i dobijaju dozvole, i kako se realizuje skok na odgovarajuću prekidnu rutinu.

2. zadatak

Postavka

[5p] Hapisati optimalnu sekvencu instrukcija neophodnih za sračunavanje izraza:

int a, b, c, d, e;
...
b = a + c - d - e;
if (b > 0) a = a - e;
else a = c - d;
...

Na raspolaranju je procesor kod koga aritmetičke, logičke i pomeračke instrukcije imaju format: OS reg, reg, reg/imm gde je OS 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, V, S, D, i E su globalne promenljive koje odgovaraju simboličkim oznakama adresa memorijskih lokacija u kojima se nalaze operandi. Sadržaj memorijskih lokacija označenih adresama S, D i E 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.

Rešenje

Napomena Umesto instrukcije SUB Rb, Rb, #0 se mogla koristiti instrukcija CMP Rb, #0, ali ona ne odgovara formatu instrukcija koji je zadat tekstom zadatka, takođe važi i za ADD Ra, Rtemp0, #0 moglo se iskoristiti MOV Ra, Rtemp0, ali ukoliko se koriste ovakve instrukcije (koje ne odgovaraju formatu instrukcije u tekstu zadatka) moraju se sa strane napisati realizacije datih instrukcija tako da odgovaraju zadatom procesoru.

    LOAD Ra, a
    LOAD Rb, b
    LOAD Rc, c
    LOAD Rd, d
    LOAD Re, e
    ...
    SUB Rtemp0, Ra, Re
    SUB Rtemp1, Rc, Rd
    ADD Rb, Rtemp0, Rtemp1
    STORE Rb, b
    SUB Rb, Rb, #0
    JLE else
    ADD Ra, Rtemp0, #0
    JMP end
    else: ADD Ra, Rtemp1, #0
    end: STORE Ra, a
    ...

3. zadatak

Postavka

[5p] Napisati optimalnu sekvencu instrukcija koja odgovara sledećoj standardnoj bibliotečkoj S funkciji koja pronalazi prvo pojavljivanje niza karaktera src2 u nizu karaktera src1:

char *strstr(const char *src1, const char *src2)

Funkcija kao rezultat vraća pokazivač na prvo pojavljivanje niza karaktera src2 u nizu karaktera src1 ili 0 ukoliko se niz karaktera src2 ne pojavljuje u nizu karaktera src1. Funkcija prilikom poređenja ne uzima u obzir terminalni '\0' karakter. Formati instrukcija i podataka su kao u zadatku 2. Na raspolaganju stoje i složene instrukcije.

Rešenje

    strstr:
    PUSH BP 
    MOV BP, SP
    PUSH R1
    PUSH R2
    PUSH R3
    PUSH R4
    LOAD R1, (BP)2 ; src1
    LOAD R2, (BP)3 ; src2
    XOR R0, R0, R0 ; clear R0
    ;strlen(src1)
    LOAD R4, #maxValue 
    ;LOCC len, addr, char
    LOCC R4, R1, '\0'
    SUB R1, R1, #1
    LOAD R4, (BP)2
    SUB R3, R1, R4 ; R3 = strlen(src1)
    ;strlen(src2)
    LOAD R4, #maxValue
    LOCC R4, R2, '\0'
    SUB R2, R2, #1
    LOAD R4, (BP)3
    SUB R4, R2, R4 ; R4 = strlen(src2)
    ;MATCH src1len, src1addr, src2len, src2addr
    LOAD R1, (BP)2 ; src1
    LOAD R2, (BP)3 ; src2
    MATCHC R3, R1, R4, R2
    JNZ end ; z == 1 src2 not found in src1
    MOV R0, R1
    end: POP R4
    POP R3
    POP R2
    POP R1
    POP BP
    RTS

Realizacija nepostojećih instrukcija (bez ovoga se zadatak ne priznaje sa punim brojem poena):

    PUSH BP -> STORE BP, -(SP)
    POP BP -> LOAD BP, (SP)+
    MOV BP, SP -> ADD BP, SP, #0
    LOAD R4, #maxValue -> ADD R4, R0, #maxValue ; R0 = 0

4. zadatak

Ovaj zadatak nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.

Postavka

[15p] U računarskom sistemu se nalazi jednoadresni procesor, memorija i periferija PER0 i periferija PER1 sa pridruženim kontrolerom sa direktnim pristupom memoriji DMA. 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. Ulazno-izlazni adresni prostor i memorijski adresni prostor su razdvojeni. Adrese relevantnih registara su:

   PER0_CONTROL   F000h   DMA_PER1_CONTROL   F110h
   PER0_STATUS    F001h   DMA_PER1_STATUS    F111h
   PER0_DATA      F002h   DMA_PER1_DATA      F112h
   PER1_CONTROL   F100h   DMA_PER1_ADDR      F113h
   PER1_STATUS    F101h   DMA_PER1_COUNT     F114h
   PER1_DATA      F102h

U upravljačkim registrima bit 4 je Start kojim se dozvoljava početak operacije, bit 0 određuje tip prenosa podataka (1 - ulaz (input), 0 - izlaz (output)), bit 1 je Enable kojim se dozvoljava prekid, a u statusnim registrima bit 8 je Ready koji signalizira spremnost kontrolera periferije. Bit 2 upravljačkog registra DMA kontrolera zadaje režim rada (0-blokovski (burst), 1-ciklus po ciklus (cycle stealing)).

Periferija PER0 kontinuirano šalje petnaestobitne vrednosti za koje procesor treba da odredi bit parnosto tako da broj jedinica u novoj šesnaestobitnoj vrednosti bude paran. Bit parnosti je najstariji bit šesnaestobitne vrednosti. Vrednosti primljene od periferije PER0 (nadalje podaci) se smeštaju u kružni bafer kapaciteta 100h koji počinje od adrese 2000h. Nakon upisa podatka u poslednju adresu koja pripada baferu, naredni podatak se upisuje na prvu adresu bafera. Ukoliko je bafer pun, periferija privremeno prestaje sa radom dok se ne pojavi slobodna lokacija na koju se može upisati novi podatak. Procesor treba da odredi bit parnosti za svaki podatak pozivom funkcije int calcParity(int value). Funkcija kao parametar prima vrednost jednog podatka, dok povratna vrednost predstavlja šesnaestobitnu vrednost u kojoj je podatku pridodat bit parnosti kao najstariji bit.

Uporedo sa prijemom i obradom podataka (računanjem bita parnosti za primljene podatke) potrebno je slati prethodno obrađene podatke na izlaz periferiji PER1. Slanjem podatka na periferiju PER1 se oslobađa njegovo mesto u baferu. Ukoliko periferija PER1 radi previše sporo, što je slučaj ukoliko postoji barem 10h podataka u baferu koji su već obrađeni i čekaju slanje na periferiju PER1, uključuje se DMA kontroler u blokovskom režimu rada koji se koristi za slanje podataka. Radi smanjenja opterećenosti DMA kontrolera, periferija PER1 se vraća u režim rada bez DMA kontrolera ukoliko je broj podataka u baferu koji su obrađeni i čekaju slanje manji od 8h. Obezbediti da svaki podatak koji je poslala periferija PER0 bude uspešno obrađen i prosleđen periferiji PER1.

Napisati glavni program, funkciju calcParity i prekide rutine kojima se obavlja opisani scenario. Primanje podataka sa periferije PER0 realizovati tehnikom programiranog ulaza sa prekidom, a operaciju izlaza na periferiju PER1 bez pridruženog DMA kontrolera tehnikom programiranog izlaza sa ispitivanjem bita spremnosti.

Procesor ima registre SP i BP. Registar BP se može koristiti za registarsko indirektno adresiranje. Funkcija lokalne promenljive alocira na steku. Smatrati da je tip int širine 16 bita.

Dozvoljeno je koristiti dodatne promenljive, ali njihove nazive treba pisati opisno i semantički ispravno. Obavezno je pisanje konciznih komentara nad semantičkim celinama u okviru glavnog programa i prekidne rutine.

Napomena: Na ispitu nisu dozvoljena nikakva pomoćna sredstva, ni kalkulatori, ni literatura. Ispit traje 120 minuta. Student je dužan da piše čitko i uredno.