Архитектура рачунара/Септембар 2022
- Овај рок није решен. Помозите 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. На располаганју стоје и сложене инструкције.
Решење
;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 за рачунање целобројног дељења и рачунање остатка при дељењу.
Дозвољено је користити додатне променљиве.