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

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

1. задатак

Поставка

[5] У посматраном рачунарском систему процесор има 2 пара линија по којима улазно/излазни уређаји могу процесору да шаљу захтеве за прекид и од процесора добијају сигнале потврда. У датом систему има 6 улазно/излазних уређаја које треба некако повезати помоћу та 2 пара линија на процесор и омогућити за сваки улазно/излазни уређај скок на одговарајућу прекидну рутину векторисаним механизмом прекида. а) Нацртати како тих 6 улазно/излазних уређаја треба повезати пооћу та 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. На располаганју стоје и сложене инструкције.

Решење

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 за рачунање целобројног дељења и рачунање остатка при дељењу.

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

Решење