Архитектура рачунара/Јун 2021

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

1. задатак

Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.

Поставка

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

  1. Нацртати како тих 8 улазно/излазних уређаја треба повезати помоћу та 3 пара линија на процесор.
  2. Нацртати интерну структуру контролера периферије који дозвољава серијско слање прекида наредној периферији у ланцу.

2. задатак

Поставка

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

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

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

Решење

        LOAD R1, b
        LOAD R2, c
        ADD R1, R1, R2
        LOAD R2, d
        LOAD R3, e
        ADD R2, R2, R3
        SUB R3, R1, R2
        STORE R3, a
        JNZ else
        STORE R1, f
        JMP end
else:   STORE R2, f
end:    ...

3. задатак

Поставка

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

void *memсру (void *dst, const void *src, int n);

Функција као резултат враћа показивач на одредишни низ dst. Формати инструкција и података су као у задатку 2. На располагању стоје и сложене инструкције.

Решење

    PUSH BP
    MV BP, SP
    PUSH R0
    PUSH R1
    PUSH R2
    PUSH R3
    
    // Pretpostavka da SP ukazuje na prvu slobodnu lokaciju i da raste na dole
    LD R0, [BP]3 // dst
    LD R1, [BP]4 // src
    LD R2, [BP]5 // n
    LD R3, [BP]5 // n -> mora da bude drugi registar
                 // jer se srcLEN i dstLEN dekrementiraju u MOVC!

    // srcLen, srcAddr, fill, dstLen, dstAddr
    MOVC R2, R1, 'x', R3, R0

    POP R3
    POP R2
    POP R1
    POP R0
    POP BP
    RTS

4. задатак

Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.

Поставка

[25п] У рачунарском систему се налази једноадресни процесор, меморија и периферије РЕR0, PER1 до РERN. Cматрати да број N припада скупу од 1 до 15 и да може да се користи као непосредна вредност у програму (#N). Периферији РER0 jе придружен DMA0 контролер. Све компоненте рачунара су повезане системском магистралом са 16 битном адресном и 16 битном магистралом података. Адресирање је на нивоу 16 битних речи. Сви подаци и адресе су ширине 16 бита. Узети да је тип података іnt дужине 16 бита. Улазно-излазни адресни простор и меморијски адресни простор су преклопљени. Адресе релевантних регистара периферија РER0 и DМА0 контролера су:

PER0_CONTROL F000h DMA0_CONTROL F003h DMA0_ADDR F006h
PER0_STATUS F001h DMA0_STATUS F004h DMA0_CNT F007h
PER0_DATA F002h DMA0_DATA F005h

Адресе релевантних регистара периферија РER1 до РERN се добијају као резултат потпрограма

int* getPеrRegAddr (unsigned int N, unsigned int typе);

где N представља број периферије, type представља тип регистра (1 - ENTRY, 2 - CONTROL, 3 - STATUS, 4 - DATA). Потпрограм getPerRegAddr не треба имплементирати, већ само позивати на одговарајућем месту у програму.

У управљачким регистрима бит 0 је Start којим се дозвољава почетак операције, бит 1 одрeђују тип преноса података (1 - улаз (input), 0 - излаз (output)), бит 2 је Enable којим се дозвољава прекид. Бит 3 управљачког регистра контролера DMA0 се задаје режим рада (0-блоковски (burst), 1-циклус по циклус (сусle stealing)). У статусним регистрима бит 0 је Ready који сигнализира спремност контролера периферије.

Написати главни програм, одговарајући потпрограм и прекидну рутину којима се обавља следећи пренос.

Периферија РER0 шаље низ од 100h означених целих бројева који се смештају у меморију почев од адресе 5000h. Hакон учитаног низа у меморију потребно је проследити максималну вредност низа периферијама РER1 до РЕRN. Пренос максималне вредности периферијама треба обављати у паралели, чим периферија буде спремна да прими податак. Након што је свака периферија примила максималну вредност, потребно је да РER0 учита нов низ (од 100h означених целих бројева који се смештају у меморију почев од адресе 5000h), да се проследи нова максимална вредност низа периферијама РER1 до PERN и тако циклично да ради програм.

Периферије PER1 до РERN када се једном укључе, није дозвољено да се потом искључе. Ради евиденције којoј периферији је прослеђена тренутна максимална вредност низа потребно је увести променљиву mask. Bредност бита maski треба да има вредност 1 уколико је тренутна максимална вредност низа прослеђена периферији РERi, a да има вредност 0 уколико тренутна максимална вредност низа није још прослеђена периферији РERi. Након прослеђене максималне вредности свим периферијама, вредност променльиву mask треба ресетовати на 0.

Потребно је имплементирати и у програму на одговарајуhем месту позвати потпрограм

int max (int* arrAddr, unsigned int length);

Који враћа максималну вредност низа задатом почетном адресом аrrAddr и дужине length eлемената.

Примање података са периферије РERO реализовати коришћењем DMА0 контролера у блоковском режиму рада. Слање података на периферије РER1 до РERN peализовати испитивањем бита спремности.

Сматрати да су доступни регистри ВР и SP приликом писања потпрограма. Обратити пажњу да потпрограм не сме да користи глобалне променљиве, већ само параметре потпрограма и локане променљиве. Позивалац потпрограма је дужан да уклони параметре са стека. Резултат потпрограма се враћа кроз акумулатор. Процесор не поседује регистре опште намене, као ни регистар IМR. Стек расте од виших ка нижим локацијама, а SP указује на последњу заузету локацију. Дозвољено је користити додатне променљиве, али њихове називе треба писати описно и семантички исправно. Обавезно је писање концизних коментара над семантичким целинама.