Архитектура рачунара/Септембар 2022

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
Овај рок није решен. Помозите SI Wiki тако што ћете га решити.

1. задатак

Поставка

[5] У посматраном рачунарском систему процесор има 2 пара линија по којима улазно/излазни уређаји могу процесору да шаљу захтеве за прекид и од процесора добијају сигнале потврда. У датом систему има 6 улазно/излазних уређаја које треба некако повезати помоћу та 2 пара линија на процесор и омогућити за сваки улазно/излазни уређај скок на одговарајућу прекидну рутину векторисаним механизмом прекида.

  1. Нацртати како тих 6 улазно/излазних уређаја треба повезати пооћу та 2 пара линија на процесор.
  2. Објаснити како тих 6 улазно/излазних уређаја шаљу захтеве за прекид и добијају дозволе, и како се реализује скок на одговарајућу прекидну рутину.

Решење

2. задатак

Поставка

[5] Написати оптималну секвецу инструкција неопходних за срачунавање израза:

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

На располагању је процесор код кога аритметичке, логичке и померачке инструкције имају формат: ОС reg, reg, reg/imm где је ОС код операције, одредишни операнд и први операнд маорају бити у регистру (reg), док други може бити или у регистру или непосредно (reg/imm). Инструкција LOAD има формат: LOAD reg, mem где је првим операндом дат одредишни регистар (reg), а другим извориште. Инструкција STORE има формат: STORE reg, mem где је првим операндом дат изворишни регистар (reg), а другим одредиште. A, B, C, D, E и F су глобалне променљиве које одговарају симболичким ознакама адреса меморијских локација у којиа се налазе операнди. Садржај меморијских локација означених адресама B, C, D и E треба да остане непромељен, садржај одговарајућих регистара је дозвољено мењати. На располагању стоји 8 регистара опште намене. Претпоставити да су сви подаци и адресе исте дужине која је једнака адресибилној јединици.

Решење

3. задатак

Поставка

[5] Написати оптималну секвенцу инструкција која одговара следећој стандардној библиотечкој С функцији која пореди првих n бајта низа str1 и низа str2:

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

Функција као резултат враћа лексикографски поредак ова два низа: вредност мању од 0 ако је str1 мањи од str2, вредност већу од 0 ако је str1 већи од str2 и вредност 0 ако су str1 и str2 једнаки. Формати инструкција и података су као у задатку 2. На располаганју стоје и сложене инструкције.

Решење

;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
	
	locc 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. задатак

Поставка

[15] У рачунарском систему се налази једноадресни процесор, меморија и периферије PER0 и PER1 са придруженим контролером са директним приступом меморији DMA. Све копонентерачунара су повезане системском магистралом са 16 битном адресном и 32 битном магистралом података. Адресирање је на нивоу 32 битних речи. Улазно/излазни адресни простор и меморијски простор су раздвојени. Адресерелевантних регистара су:

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

У управљачким регистрима бит 31 је Start којим се дозвољава почетак операције, бит 0 одређују тип преноса података (1 - улаз, 0 - излаз), бит 1 је Enable којим се дозвољава прекид, а у статусним регистрима бит 0 је Ready који сигнализира спремност контролера периферије. Бит 2 управљачког регистра DMA контролера задаје режим рада (0 - блоковски, 1 - циклус по циклус).

Периферија PER0 шање низ A[i] дужине 50h података који се смештају у меморију почев од адресе 1000h. Подаци су целобројне величине које представљају датум кодиран тако да битови A[i]4..0 представљају дан, битови A[i]8..5 представљају месец, A[i]19..9 представљају годину. Након пријема података потребо је да се сваи елемент (датум) конвертује у текстуални облик и да се такав текст пошаље периферији PER1. За конвертовање датума представљен бројем у текстуални облик користити функцију void convert(int intDate, int* stringDate). Ова функција конвертује задати датум intDate у текстуални датум облика "yyyymmdd" и уписује га као резултат на меморијску локацију која је одређена параметром stringDate (сваки карактер је дужине 8 бита, па се користе само две узастопне адресе - прва адреса за yyyy и друга за mmdd). Слање текстуалног датума периферији PER1 треба реализовати слањем два податка: yyyy и mmdd, респективно. Програм треба да се изврши само једном.

Написати главни програм, прекидну рутину DMA и функцију convert којима се обнавља описани пренос. Примање података са периферије PER0 реализовати коришћењем придруженог DMA контролера у блоковском режиму рада, а слање података на периферију PER1 испитивањем бита спремности. За резултат функције convert користити меморијски простор 100h и 101h.

Процесор има регистар SP и BP. Стек расте према вишим адресама и указује на последњу заузету локацију. Регистар BP се може користити за базно адресирање са померајем. Функција локалне променљиве алоцира на стеку и није дозвољено коришћење глобалних променљивих унутар функције. Сматрати да је тип int ширине 32 бита. Карактери су дужине 8 бита и кодирају се ASCII8 таблицом, где је ASCII8('0') = 30h, ASCII8('1') = 31h итд. Дозвољено је коришћење инструкција DIV и MOD за рачунање целобројног дељења и рачунање остатка при дељењу.

Дозвољено је користити додатне променљиве.

Решење