Архитектура рачунара/Јул 2021 — разлика између измена
(Решење 3. задатка) |
м (формат) |
||
Ред 35: | Ред 35: | ||
=== Решење ===<syntaxhighlight lang="asm"> | === Решење === | ||
<syntaxhighlight lang="asm"> | |||
! stek raste nanize, SP pokazuje na poslednju zauzetu | ! stek raste nanize, SP pokazuje na poslednju zauzetu | ||
! rezultat se vraca kroz Rres | ! rezultat se vraca kroz Rres |
Верзија на датум 14. јун 2022. у 23:27
- Овај рок није решен. Помозите SI Wiki тако што ћете га решити.
1. задатак
Поставка
- Нацртати структуру контролера улазно/излазне периферије са директним приступом меморији.
- Објаснити функцију свих делова контролера.
- Објаснити којим битовима и у којим регистрима се задају могући режими рада контролера и добијају информације како се одвија пренос података.
2. задатак
Поставка
Контролер излазне периферије и излазна периферија за међусобно повезивање користе паралелни интерфејс који се састоји од линија података, једне статусне линије и једне управљачке линије. Статусном линијом излазна периферија даје индикацију контролеру периферије да ли је спремна да прими податак који је доступан на линијама података, док контролер периферије управљачком линијом обезбеђује читање податка са линија података у свој интерни регистар. Навести по ком редоследу се наведене линије користе за синхронизацију и слање података из контролера периферије на периферију. Одговор дати табеларно. Назначити која је почетна вредност на овим линијама.
Редослед | Линија(статусна/управљачка/подаци) | Вредност | Значење | Ко поставља |
3. задатак
Поставка
Написати оптималну секвенцу инструкција која одговара следећој стандардној библиотечкој C функцији која надовезује низ src
на крај низа dest
:
char *strcat (char *dest, const char *src);
Функција као резултат враћа показивач на резултујући низ dest
. Претпоставити да је низ dest
довољне величине да се у њега може сместити резултујући низ, као и да нема преклапања између src
и dest
. Ha располагању је процесор код кога аритметичке, логичке и померачке инструкције имају формат: OC reg, reg, reg/imm где је ОС код операције, одредишни операнд и морају бити у регистру (reg), док други може бити или у регистру или дат непосредно (reg/imm). Инструкција LOAD има формат: LOAD reg, mem где је првим операндом дат одредишни регистар (reg), a другим извориште. Инструкција STORE има формат: STORE reg, mem где је првим операндом дат изворишни регистар (reg), а другим одредиште. На располагању стоји 8 регистара опште намене. Претпоставити да су сви подаци и адресе исте дужине која је једнака адресибилној јединици. На располагању стоје и сложене инструкције.
Решење
! stek raste nanize, SP pokazuje na poslednju zauzetu
! rezultat se vraca kroz Rres
! *src +3
! *dst +2
! PCret +1
! BP +0
ST BP, -(SP)
ADD BP, SP, #0
!backup registara
ST Rd, -(SP)
ST Rl, -(SP)
ST Rs, -(SP)
!pronadji kraj dst
LD Rd, (BP)2
LD Rl, #MAX_VAL
LOCC Rl, Rd, '\0'
SUB Rd, Rd, #1
!pronadji kraj src (radi brojanja karaktera)
LD Rs, (BP)3
LD Rl, #MAX_VAL
LOCC Rl, Rs, '\0'
LD Rres, (BP)3
SUB Rl, Rs, Rres
SUB Rres, Rs, Rres
LD Rs, BP(3)
!kopiranje niza
MOVEC Rl, Rs, Rres, Rd, '\0'
LD Rres, (BP)2
!restauracija registara
LD Rs, (SP)+
LD Rl, (SP)+
LD Rd, (SP)+
LD BP, (SP)+
RTS
...
4. задатак
Поставка
У рачунарском систему се налази једноадресни процесор, меморија и периферије PER0, и PER1. Периферији PER0 је придружен DMA0 контролер. Све компоненте рачунара су повезане системском магистралом са 16 битном адресном и 16 битном магистралом података. Адресирање је на нивоу 16 битних речи. Сви подаци и адресе су ширине 16 бита. Узети да је тип података int дужине 16 бита. Улазно-излазни адресни простор и меморијски адресни простор су преклопљени. Адресе релевантних регистара периферија PER0 и DMA0 контролера су:
PER0_CONTROL | F000h | DMA0_CONTROL | F003h | PER1_CONTROL | F010h |
PER0_STATUS | F001h | DMA0_STATUS | F004h | PER1_STATUS | F011h |
PER0_DATA | F002h | DMA0_DATA | F005h | PER1_DATA | F012h |
DMA0_ADDR | F006h | ||||
DMA0_CNT | F007h |
У управљачким регистрима бит 0 је Start којим се дозвољава почетак операције, бит 1 одређују тип преноса података (1 - улаз (input), 0-излаз (output)), бит 2 је Enable којим се дозвољава прекид. Бит 3 управљачког регистра контролера DMA0 се задаје режим рада (0-блоковски (burst), 1-циклус по циклус (cycle stealing)). Битови од 4 до 7 управљачког регистра DMA0 контролера садрже вредност за колико се увећава адресни регистар након сваког пренетог податка. У статусним регистрима бит 0 је Ready који сигнализира спремност контролера периферије.
Написати главни програм, одговарајући потпрограм и прекидне рутине којима се обавља следећи пренос.
Са периферија PER0 и PER1 упоредо се шаљу елементи низа. Низ се смешта у меморију почев од адресе 1000h и има 100h елемената. Периферија PER0 шаље елементе које треба смештати на места у низу са парним индексом, а елементе са PER1 треба смештати на места са непарним индексом.
Након пријема низа, периферији која је прва завршила слање шаље се комплетан неопадајуће сортирани низ. За сортирање низа потребно је имплементирати и на одговарајућем месту у програму позвати функцију
void sort (int* arrAddr, int length)
Где је arrAddr
адреса низа, а length
дужина низа. Не треба водити рачуна који алгоритам се користи за сортирање.
Примање елемента са периферије PER0 реализовати коришћењем DMA0 контролера у блоковском режиму рада, а евентуално слање сортираног низа коришћењем DMA0 контролера у режиму циклус по циклус. Примање елемената са PER1 и евентуално слање сортираног низа на PER1 реализовати коришћењем механизма прекида.
Сматрати да су доступни регистри XR, BP и SP приликом писања потпрограма, као и да је дозвољено регистарско индиректно адресирање са регистром XR. Обратити пажњу да потпрограм не сме да користи глобалне променљиве, већ само параметре потпрограма и локалне променљиве. Позивалац потпрограма је дужан да уклони параметре са стека. Процесор не поседује регистре опште намене, као ни регистар IMR. Стек расте од виших ка нижим локацијама, а SP указује на последњу заузету локацију. Дозвољено је користити додатне променљиве, али њихове називе треба писати описно и семантички исправно.