Sunteți pe pagina 1din 8

DMD Consultatii

Exemplu subiecte de teorie:

Compare RISC with CISC.


La partea de teorie nu avem voie cu cursurile, subiectele o sa fie punctuale.

Describe why bus demultiplexing is needed for some processors, for example for 8086
processors.
Procesoarele acestea au magistrala de adrese si date multiplexata, aceste linii sunt
folosite si pentru trimiterea adreseleor si datelor. Exterior procesorului e nevoie de o solutie de
demultiplexare prin care sa se extraga inapoi adresele si datele.
Ca in curs.

Define the concept of memory segmentation. Advantages and disadvantages. Impartirea


memoriei in blocuri, cum anume se formeaza adresele, cand folosim segmentare de
memorie etc.

Ultimele 2 subiecte n-am prea facut la curs si n-o sa avem.


- Intelegerea conceptelor de adresare, modul de adresare, spatiul de adrese, decodificare
la ce se refera.
Mai avem machine cycles si wait states. Aici n-o sa ne ceara sa reproducem diagram,
trebuie doar sa intelegem si sa stim sa explicam.
Trebuie sa stim cum arata un decodificator si cum functioneaza, trebuie sa stim
conceptiile de demultiplexare si decodificare.

- Concepte mai practice: setul de instrictiuni, tipuri de date, pointeri etc. Si de aici o sa
avem subiecte. Cumva sa citim si partea asta.

- Modurile de adresare,conceptul de pipeline, asta ar fi incadrata in partea de baza, apoi


subiecte mai practice, pointeri tipuri de date set de instructiuni. Si apoi ar mai fi chestiuni
mai avansate, gen interrupts, instruction level parallelism etc.

La aplicatii, o sa primim o problema de rezolvat in o ora jumate. La partea de aplicatii


avem voie sa folosim materialele de curs si cartile de bibliografie. Fara material electronic, doar
listat, si fiecare cu propriile materiale. Avem voie si cu notitele, de la laborator sau de la curs.
Exemplele ce le-am facut iar putem sa le luam.

In lista de subiecte avem la sfarsit un gen de exercitiu la sfarsit.


Design an 8086 microprocessor based system using the following memory and IO
requirements:
128 kB of EPROM starting at address 00000H using 64K x 16 bits memory circuits
64 kB Static RAM using 16K x 8 bits
256 kB DRAM using 64K x 8 bits
1 LED connected to input output space

Requirements:
- establish the memory map, including the number of memory circuits required by the
design, the number of 16 bits memory blocks and their sizes
- design the LED connection logic both hardware and software in order to make the LED
blinking when the system is initializing its state and the LED is powered on when the
system is running and it goes off when the system is powered off
- write a routine which will copy 2 KB of memory from physical address 00100H to the
beginning of SRAM. During this initialization we have to make the LED blinking, after the
copy routine is ended, well let the LED switched ON
- considering the following variables definitions in C language, determine the memory size
and memory content used by a 16 bits compiler (that means integer and pointers are
stored on 16 bits), the variables are located at the beginning of DRAM. Here are the
variables:
int a = (int) 0xF0FF
int b;
int *p = &a;
int s[10] = { 1, 2, 3 };
The memory variables are declared as lower variables?

Avem 4 puncte de realizat. La memorie aici de exemplu nu se cere tabelul de


decodificare, etc. Doar harta memoriei, aici noi o sa facem tot ca sa vedem tot exemplul.
Trebuie sa citim problema sa vedem ce se cere. Daca se cere doar harta memoriei nu trebuie
sa facem tot la problema.

1. La harta memoriei trebuie sa luam fiecare circuitele si sa ne uitam la numele lui. Trebuie
sa avem grija ca se poate specifica la ce adrese ca inceapa. 8086 procesor pe 16 bits
asta inseamna ca toate bocurile de memorie din sistem trebuie sa poata fi accesate pe
16 bits.
64K x 16 bits = 64K * 2B = 128KB
Avem nevoie de un singur circuit de memorie pentru a avea 128KB de EPROM
In cate blocuri se impart circuitele acestea? Fiind un singur circuit pe 16 bits o sa avem nevoie
de un singur bloc de memorie. Selectie circuitelor se face la nivel de blocuri in cazul lui 8086. La
examen o sa avem tot pe 16 bits exemple, n-o sa ne dea pe 32bits.
Primul caz:
B1 128KB 00000H
Ar trebui sa calculam care e spatiul de memorie ocupat de acest bloc?
128 = 2^7
1K = 2^10
=> 2^10 * 2^7 = 2^17
Ultima adresa ar fi 2^17 - 1 scris in hexa:
1 1111 1111 1111 1111
1 F F F F

=> Adresa de sfarsit este 1FFFF H daca incepe de la adresa 00000 H

Avem un singur bloc de memorie, blocul contine un singur circuit.

Al doilea caz:
16K * 8bits = 16K * 1B = 16KB
64KB / 16KB = 4 circuite de memorie
Grupam cate 2 circuite pe bloc, pentru ca trebuie sa avem 16 bits intr-un bloc (avem 16K
* 8bits si ne trebuie 16 bits per bloc)

B2 2*16KB = 32KB (nu se cere, dar daca ar fi 00000 H, adresa de sfarsit ar fi


2^15 - 1 si calculam, si ar fi 07FFF H)
B3 32KB (la fel si pentru asta, desi nu se cere aici)
In total B2, B3 satisfac cerinta de 64KB.

In cazul al treilea:
B4 128KB (spatiul de adrese ar fi 00000H - 1FFFFH)
B5 128KB (aici la fel)

DRAM-ul de obicei poate fi si pe mai putini bits. Ca paranteza sa luam cazul in care
avem 64K * 1bit. Daca am avea circuite asa, atunci ar trebui sa le grupam intr-un block 16 astfel
de circuite, 16 * 64K * 1bit, deci o sa avem 2 * 8 * 64K * 1bit => 2 * 64KB, deci avem 2 blocuri a
cate 16 circuite fiecare.

Regula impartirii pe blocuri, intr-un bloc de memorie se pun atatea circuite cate sunt
necesare pentru a acoperi numarul de bits din magistrala de date.

Pasul urmator ar fi harta memoriei:


La harta memoriei trebuie sa luam fiecare bloc si sa il punem in spatiul unic de adrese a
procesorului. Procesorul 8086 in cazul nostru poate adresa 1Mega de meorie.
Blocurile sa nu se suprapuna, blocurile sa inceapa de la adrese multiplu de capacitatea
procesorului.
Adresa de sfarsit este adresa de inceput plus capacitatea - 1. Adica ce am calculat mai
sus. Primul bloc il punem la inceput ca asa ni se cere. Urmatoarele blocuri le putem pune unde
vrem noi. In cazul blocului 2 adresa de inceput trebuie sa fie multiplu de 2 ^ 5 ( 32 ). Il putem
pune imediat dupa blocul B1 pentru ca 20000H e multiplu de 8000H.
Pentru B3 putem lua 28000H, care e multiplu de 8000H. Vom lua de la 30000H ca sa
vedem ce se intampla daca facem decodificare incompleta.

In cazul lui B4, adresa de inceput trebuie sa fie multiplu de 20000H. B4 il punem la
80000H si B5 la C0000H. Putem alege orice adrese vrem noi unde se poate.
Asta a fost pasul 2. Acum pasul 3.
Aici s-ar incheia prima cerinta.
Dar noi continuam si facem tabelul de decodificare sa vedem cum arata.
Aici ne putem verifica, pentru primul bloc avem 128 K => ne trebuie 17 linii de
decodificare, adica e numarul de ranguri care se modifica.
De la stanga la dreapta grupam coloanele care nu se modifica. Valoarea rangurilor ce
raman trebuie sa fie egala cu dimensiunea in biti a blocului. Ex pentru Blocul 1 ne raman de la
A16 la A0 => 17 bits.

Acum o sa continuam si o sa facem decodificatorul.


Daca avem un rang care nu se modifica peste tot atunci avem o decodificare
incompleta.
Finally, punctul 2. Ni se cere sa mai conectam un LED in spatiul de intrare iesire. Nu ni
se specifica nimic legat de adrese deci putem sa-l conectam unde vrem noi. Acest led trebuie
sa palpaie atunci cand il initializam si sa fie aprins cand sistemul este running.

Adresa o alegem pe 8 biti sau pe 16 biti. (Acolo dupa rezistenta vine si o dioda, my
drawing skills are awesome)

Punctul 3.
Rutina de copiere a blocului de memorie. La intrebarile astea treubie sa vem grija la
urmatorul lucru, ce tip de adrese avem, s-ar putea sa primi adrese fizice sau logice. Adresa
fizica este cea care apare in harta de memorie si este adresa de pe liniile de adrese ce merg la
memorie.
Adresa logica este adresa cu care lucrez in program care in mod general la 8086 este
formata din segment pe 16 bits si offset tot pe 16 bits.
In modul real:
adresa fizica = segment * 16 + offset
Daca avem adresa logica si trebuie sa calculam adresa fizica atunci calculam invers.

0 : 0100H
0100H : 0H

cx <- nr iteratii
LOOP eticheta

DS:[SI] -> ES:[DI]

Acum scriem programul:

MOV SI, 00100H ; offset


MOV AX, 0 ; segment
MOV DS, AX

MOV DI, 00000H ; offset


MOV Ax, 20000H ; segment
MOV ES, AX

MOV cx, 1024 ; asta in cazul in care copiem cate 16bits deodata
next: MOV AX, DS:[SI] ; am luat 2 octeti de la adresa asta
MOV ES:[DI], AX ; i-am scris la adresa cealalta
ADD SI, 2
ADD DI, 2
CALL led_on ; astea le putem pune oriunde in interiorul buclei
CALL led_off
LOOP next

Punctul 4.
Aici ar trebui sa vedem cat spatiu ocupa un compilator cand aloca spatiu pentru
variabilele alea statice in zona de memorie pentru variabilele globale. Trebuie sa avem grija la:
sa vedem daca variabilele sunt globale sau locale, variabilele globale se aloca pe segmentul de
date, iar cele local pe stiva. In cazul nostru sunt variabile globale astfel incat ele sunt puse in
segmentul de date. Pentru variabilele locale avem in curs cum se aloca pe stiva.

Se cere daca aceste variabile sunt alocate la inceputul DRAM-ului sa vedem cati octeti
sunt alocati si sa vedem care ar fi continul acelor octeti.
Cel mai simplu e sa facem in format grafic.
Ca observatie daca ne da adresa vrea sa vada daca stim si endieness-ul procesorului.
La b specificam daca e initializat de compilator sau putem spune ca nu stim ce e acolo.
Trebuie sa specificam asta, depinde de compilator.

int a = (int) 0xF0FF


int b;
int *p = &a;
int s[10] = { 1, 2, 3 };

Sunt 26 de octeti de memorie alocati pentru ca avem cate 2 octeti pentru fiecare
variabila, variabila a are 2 octeti, b la fel, p la fel, s e un array ce contine 10 elemente si
fiecare are cate 2 octeti, deci in total 26.

Poate sa ne ceara care din variabile sunt aliniate cu adresele de memorie sau nu. Ce
inseamna asta? Inseamna ca adresa de inceput pentru o variabila este multiplu pentru
dimnesiunea in octeti a unui element in adresa respectiva. In exemplul nostru toate sunt aliniate
pentru ca sunt multipli.
Daca am fi avut un char ch intre a si b, atunci nu ar mai fi fost aliniate. Daca ni se cerea
sa aliniam variabilele atunci trebuia sa mutam b-ul mai jos incat sa fie aliniat sau sa mutam
char-ul la sfarsit.

S-ar putea să vă placă și