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

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

1. задатак

Поставка

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

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

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

2. задатак

Поставка

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

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

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

Решење

Напомена Уместо инструкције SUB Rb, Rb, #0 се могла користити инструкција CMP Rb, #0, али она не одговара формату инструкција који је задат текстом задатка, такође важи и за ADD Ra, Rtemp0, #0 могло се искористити MOV Ra, Rtemp0, али уколико се користе овакве инструкције (које не одговарају формату инструкције у тексту задатка) морају се са стране написати реализације датих инструкција тако да одговарају задатом процесору.

    LOAD Ra, a
    LOAD Rb, b
    LOAD Rc, c
    LOAD Rd, d
    LOAD Re, e
    ...
    SUB Rtemp0, Ra, Re
    SUB Rtemp1, Rc, Rd
    ADD Rb, Rtemp0, Rtemp1
    STORE Rb, b
    SUB Rb, Rb, #0
    JLE else
    ADD Ra, Rtemp0, #0
    JMP end
    else: ADD Ra, Rtemp1, #0
    end: STORE Ra, a
    ...

3. задатак

Поставка

[5п] Написати оптималну секвенцу инструкција која одговара следећој стандардној библиотечкој С функцији која проналази прво појављивање низа карактера src2 у низу карактера src1:

char *strstr(const char *src1, const char *src2)

Функција као резултат враћа показивач на прво појављивање низа карактера src2 у низу карактера src1 или 0 уколико се низ карактера src2 не појављује у низу карактера src1. Функција приликом поређења не узима у обзир терминални '\0' карактер. Формати инструкција и података су као у задатку 2. На располагању стоје и сложене инструкције.

Решење

    strstr:
    PUSH BP 
    MOV BP, SP
    PUSH R1
    PUSH R2
    PUSH R3
    PUSH R4
    LOAD R1, (BP)2 // src1
    LOAD R2, (BP)3 // src2
    XOR R0, R0, R0 // clear R0
    //strlen(src1)
    LOAD R4, #maxValue 
    //locc len, addr, char
    LOCC R4, R1, '\0'
    SUB R1, R1, #1
    LOAD R4, (BP)2
    SUB R3, R1, R4 // R3 = strlen(src1)
    //strlen(src2)
    LOAD R4, #maxValue
    LOCC R4, R2, '\0'
    SUB R2, R2, #1
    LOAD R4, (BP)3
    SUB R4, R2, R4 // R4 = strlen(src2)
    //matchc src1len, src1addr, src2len, src2addr
    LOAD R1, (BP)2 // src1
    LOAD R2, (BP)3 // src2
    MATCHC R3, R1, R4, R2
    JNZ end // z == 1 not found src2 in src1
    MOV R0, R1
    end: POP R4
    POP R3
    POP R2
    POP R1
    POP BP
    RTS

Реализација непостојећих инструкција (без овога се задатак не признаје са пуним бројем поена):

    PUSH BP -> STORE BP, -(SP)
    POP BP -> LOAD BP, (SP)+
    MOV BP, SP -> ADD BP, SP, #0
    LOAD R4, #maxValue -> ADD R4, R0, #maxValue // R0 = 0

4. задатак

Поставка

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

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

   PER0_CONTROL   F000h   DMA_PER1_CONTROL   F110h
   PER0_STATUS    F001h   DMA_PER1_STATUS    F111h
   PER0_DATA      F002h   DMA_PER1_DATA      F112h
   PER1_CONTROL   F100h   DMA_PER1_ADDR      F113h
   PER1_STATUS    F101h   DMA_PER1_COUNT     F114h
   PER1_DATA      F102h

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

Периферија PER0 континуирано шаље петнаестобитне вредности за које процесор треба да одреди бит парносто тако да број јединица у новој шеснаестобитној вредности буде паран. Бит парности је најстарији бит шеснаестобитне вредности. Вредности примљене од периферије PER0 (надаље подаци) се смештају у кружни бафер капацитета 100h који почиње од адресе 2000h. Након уписа податка у последњу адресу која припада баферу, наредни податак се уписује на прву адресу бафера. Уколико је бафер пун, периферија привремено престаје са радом док се не појави слободна локација на коју се може уписати нови податак. Процесор треба да одреди бит парности за сваки податак позивом функције int calcParity(int value). Функција као параметар прима вредност једног податка, док повратна вредност представља шеснаестобитну вредност у којој је податку придодат бит парности као најстарији бит.

Упоредо са пријемом и обрадом података (рачунањем бита парности за примљене податке) потребно је слати претходно обрађене податке на излаз периферији PER1. Слањем податка на периферију PER1 се ослобађа његово место у баферу. Уколико периферија PER1 ради превише споро, што је случај уколико постоји барем 10х података у баферу који су већ обрађени и чекају слање на периферију PER1, укључује се ДМА контролер у блоковском режиму рада који се користи за слање података. Ради смањења оптерећености ДМА контролера, периферија ПЕР1 се враћа у режим рада без ДМА контролера уколико је број података у баферу који су обрађени и чекају слање мањи од 8х. Обезбедити да сваки податак који је послала периферија ПЕР0 буде успешно обрађен и прослеђен периферији ПЕР1.

Написати главни програм, функцију calcParity и прекиде рутине којима се обавља описани сценарио. Примање података са периферије PER0 реализовати техником програмираног улаза са прекидом, а операцију излаза на периферију PER1 без придруженог DMA контролера техником програмираног излаза са испитивањем бита спремности.

Процесор има регистре SP и BP. Регистар BP се може користити за регистарско индиректно адресирање. Функција локалне променљиве алоцира на стеку. Сматрати да је тип int ширине 16 бита.

Дозвољено је користити додатне променљиве, али њихове називе треба писати описно и семантички исправно. Обавезно је писање концизних коментара над семантичким целинама у оквиру главног програма и прекидне рутине.

Напомена: На испиту нису дозвољена никаква помоћна средства, ни калкулатори, ни литература. Испит траје 120 минута. Студент је дужан да пише читко и уредно.