Arhitektura računara/Septembar 2022

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu
Ovaj rok nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.

1. zadatak

Postavka

[5] U posmatranom računarskom sistemu procesor ima 2 para linija po kojima ulazno/izlazni uređaji mogu procesoru da šalju zahteve za prekid i od procesora dobijaju signale potvrda. U datom sistemu ima 6 ulazno/izlaznih uređaja koje treba nekako povezati pomoću ta 2 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 6 ulazno/izlaznih uređaja treba povezati pooću ta 2 para linija na procesor.
  2. Objasniti kako tih 6 ulazno/izlaznih uređaja šalju zahteve za prekid i dobijaju dozvole, i kako se realizuje skok na odgovarajuću prekidnu rutinu.

Rešenje

2. zadatak

Postavka

[5] Napisati optimalnu sekvecu instrukcija neophodnih za sračunavanje izraza:

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

Na raspolaganju 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 maoraju biti u registru (reg), dok drugi može biti ili u registru ili 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, D, E i F su globalne promenljive koje odgovaraju simboličkim oznakama adresa memorijskih lokacija u kojia se nalaze operandi. Sadržaj memorijskih lokacija označenih adresama B, C, D i E treba da ostane nepromeljen, 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

3. zadatak

Postavka

[5] Napisati optimalnu sekvencu instrukcija koja odgovara sledećoj standardnoj bibliotečkoj S funkciji koja poredi prvih n bajta niza str1 i niza str2:

int memcmp(const void *str1, const void *str2, int n);

Funkcija kao rezultat vraća leksikografski poredak ova dva niza: vrednost manju od 0 ako je str1 manji od str2, vrednost veću od 0 ako je str1 veći od str2 i vrednost 0 ako su str1 i str2 jednaki. Formati instrukcija i podataka su kao u zadatku 2. Na raspolaganju stoje i složene instrukcije.

Rešenje

;int memcmp(const void *str1, const void *str2, int n);
;https://cplusplus.com/reference/cstring/memcmp/
;izgled steka:
;|   n   |
;|  str2 |
;|  str1 |
;| retPC |
;|  BP   |
;|  R1   | <--- BP nakon mov BP, SP
;|  R2   |
;|  R3   |

memcmp:
	push BP
	mov BP, SP
	
	push R1
	push R2
	push R3

	
	load R0, (BP)3 ; str1
	load R1, (BP)4 ; str2
	load R2, (BP)5 ; n za src1len
	load R3, (BP)5 ; n za src2len
	
	cmpc R2, R0, '\0', R3, R1 ;CMPC src1len, src1ADDr, fill, src2len, src2ADDr
	
	jnz notSame
	clr R0
	jmp end
	
notSame:
	blssu less; str1 < str2, C = 1
	;str1>str2 , C = 0
		load R0, #-1
		jmp end
	less:
		load R0, #1
		
end:pop R3
	pop R2
	pop R1
	pop BP
	rts

4. zadatak

Postavka

[15] U računarskom sistemu se nalazi jednoadresni procesor, memorija i periferije PER0 i PER1 sa pridruženim kontrolerom sa direktnim pristupom memoriji DMA. Sve koponenteračunara su povezane sistemskom magistralom sa 16 bitnom adresnom i 32 bitnom magistralom podataka. Adresiranje je na nivou 32 bitnih reči. Ulazno/izlazni adresni prostor i memorijski prostor su razdvojeni. Adreserelevantnih registara su:

PER0_CONTROL F000h DMA_PER0_CONTROL F010h PER1_CONTROL F100h
PER0_STATUS F001h DMA_PER0_STATUS F011h PER1_STATUS F101h
PER0_DATA F002h DMA_PER0_DATA F012h PER1_DATA F102h
DMA_PER0_ADDR F013h
DMA_PER0_CNT F014h

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

Periferija PER0 šanje niz A[i] dužine 50h podataka koji se smeštaju u memoriju počev od adrese 1000h. Podaci su celobrojne veličine koje predstavljaju datum kodiran tako da bitovi A[i]4..0 predstavljaju dan, bitovi A[i]8..5 predstavljaju mesec, A[i]19..9 predstavljaju godinu. Nakon prijema podataka potrebo je da se svai element (datum) konvertuje u tekstualni oblik i da se takav tekst pošalje periferiji PER1. Za konvertovanje datuma predstavljen brojem u tekstualni oblik koristiti funkciju void convert(int intDate, int* stringDate). Ova funkcija konvertuje zadati datum intDate u tekstualni datum oblika "yyyymmdd" i upisuje ga kao rezultat na memorijsku lokaciju koja je određena parametrom stringDate (svaki karakter je dužine 8 bita, pa se koriste samo dve uzastopne adrese - prva adresa za yyyy i druga za mmdd). Slanje tekstualnog datuma periferiji PER1 treba realizovati slanjem dva podatka: yyyy i mmdd, respektivno. Program treba da se izvrši samo jednom.

Napisati glavni program, prekidnu rutinu DMA i funkciju convert kojima se obnavlja opisani prenos. Primanje podataka sa periferije PER0 realizovati korišćenjem pridruženog DMA kontrolera u blokovskom režimu rada, a slanje podataka na periferiju PER1 ispitivanjem bita spremnosti. Za rezultat funkcije convert koristiti memorijski prostor 100h i 101h.

Procesor ima registar SP i BP. Stek raste prema višim adresama i ukazuje na poslednju zauzetu lokaciju. Registar BP se može koristiti za bazno adresiranje sa pomerajem. Funkcija lokalne promenljive alocira na steku i nije dozvoljeno korišćenje globalnih promenljivih unutar funkcije. Smatrati da je tip int širine 32 bita. Karakteri su dužine 8 bita i kodiraju se ASCII8 tablicom, gde je ASCII8('0') = 30h, ASCII8('1') = 31h itd. Dozvoljeno je korišćenje instrukcija DIV i MOD za računanje celobrojnog deljenja i računanje ostatka pri deljenju.

Dozvoljeno je koristiti dodatne promenljive.

Rešenje