Sunteți pe pagina 1din 12

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

MEMORIA. DECLARAREA DATELOR. INSTRUCIUNI DE TRANSFER

1. Memoria principal
 Memoria principal (Main Memory) este locul n care se pstreaz
instruciunile main corespunztoare unui program i datele necesare acestuia pentru
procesare.
n cazul procesorului MIPS32, numrul locaiilor de memorie este 232. Fiecare
locaie de memorie este adresabil printr-o adres pe 32 de bii i conine 8 bii (1 byte).
n mod similar, un procesor pe 64 de bii poate adresa 264 adrese de memorie, folosind 64
de bii.
Memoria principal a procesorului MIPS32 poate fi considerat asemenea unui
tablou de octei, fiecare locaie de pstrare a unui astfel de octet fiind indicat de o
secven de 32 de bii:
0xFFFFFFFF
0xFFFFFFFE
0xFFFFFFFD
0xFFFFFFFC
0xFFFFFFFB
.
0x00000003
0x00000002
0x00000001
0x00000000

10001000
00010010
01010101
00110011
00110011

00100010
00101010
00000100
01101001

Figura 1. Memoria principal


 ntrebri:
1) Ci GB de memorie pot accesa procesoarele MIPS32 (232 bytes de memorie)?
2) Ci GB de memorie pot accesa procesoarele MIPS64 (264 bytes de memorie)?
 Ideal, locaiile de memorie ar trebui s se gseasc n RAM. ns ntruct
aceasta conduce la capaciti destul de ridicate, o parte a memoriei logice se gsete pe
hard disk. Modalitatea de a asigura ntregul spaiu de memorie prin mprirea ei ntre
RAM i hard disk poart denumirea de memorie virtual. Avantajul metodei const n
posibilitatea utilizrii ntreg spaiului de memorie, fcnd ns un compromis de vitez:
accesarea informaiilor de pe hard disk se realizeaz mai lent. Pentru estomparea acestei
diferene, pri din memoria principal care sunt intens folosite n execuie se pstreaz n
memoria cache, un tip de memorie accesat mult mai rapid de ctre procesor. Memoria
cache este transparent pentru program. Din punct de vedere al programelor, exist numai

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

memoria principal. Virtualizarea sau memoria cache nu prezint interes, aplicaiile


cunoscnd doar conceptul de memorie principal.

2. Coninutul memoriei

Informaia este pstrat n memorie sub form binar (0 si 1). Aceasta
poate reprezenta instruciuni de program, date (ntregi, caractere, etc.), etc. Dei toate
aceste informaii se reprezint identic din punct de vedere hardware, n memorie exist
seciuni separate pentru pstrarea diferitelor tipuri de informaii. Modul de structurare al
memoriei este evideniat n subcapitolul urmtor.
ntr-o locaie de memorie se memoreaz numai 8 bii. Dar asta nu nseamn c nu
se pot memora secvene de dimensiuni mai mari : intruciuni (care ocup 32 de bii) sau
numere mari, etc. n cazul n care trebuie memorat o secven de bii de mai mult de 8
bii, atunci se utilizeaz mai multe locaii de memorie, attea cte sunt necesare pentru
pstrarea ntregii secvene.
 ntrebri:
1) Cte locaii de memorie sunt necesare pentru pstrarea unei instruciuni?
2) La mutarea unei valori dintr-un registru general n memorie cte locaii sunt
necesare pentru a nu se pierde informaie?
3. Organizarea memoriei


Memoria este organizat astfel nct s pstreze separat instruciunile i

datele.
0 x 8000 0000 0 x FFFF FFFF: Memorie rezervat pentru Kernel
Jumtatea superioar a memoriei (n ordinea adreselor) nu este accesibil
programelor utilizatorilor. Aceasta este rezervat pentru sistemul de operare i
ROM.
0x7FFF F000 0x7FFF FFFF: Memorie inaccesibil
4KB de memorie ntre memoria rezervat pentru Kernel i Segmentul de
stiv este inaccesibil;

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

0xFFFFFFFF

Memorie
rezervat
pentru Kernel
(2GB)

0x80000000
0x7FFFFFFFF
Memorie inaccesibil
(4KB)

0x7FFFF000
0x7FFFEFFF

Segmentul de stiv
(Stack Segment)

$sp
...

$gp

Segmentul de date
(Data Segment)

0x10000000
Segmentul program
(Text Segment)
0x00400000
0x003FFFFF

Memorie rezervat
(4MB)

0x00000000
Fig.2. Organizarea memoriei principale

- 0 x 7FFF EFFF: Stack Segment (Segmentul de stiv)


Partea de sus a memoriei accesibile este pentru stiv. Variabilele locale,
parametrii, etc. sunt introduse/eliminate din stiv prin instruciuni de tip push/pop
pe msur ce se apeleaz o/se iese dintr-o subrutin.
Stiva nu are alocat o memorie fix, ci ea ocup memorie ncepnd de la
adresa 0 x 7FFF EFFF. De fiecare dat cnd necesit o locaiei de memorie se
folosete adresa cea mai mare neocupat, adres care este mai mic dect ultima
utilizat de stiv. De aceea se spune c stiva crete n jos.
Adresa de memorie al vrfului stivei este indicat de registrul general sp
(Stack Pointer).
0 x 1000 0000 - : Data Segment (Segmentul de date)

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

Locaiile ncepnd cu adresa 0x10000000 sunt utilizate pentru pstrarea


datelor necesare programelor. n funcie de necesiti, numrul locaiilor de
memorie utilizate n acest scop se extinde n sus. Creterea n sus a segmentului
de date, respectiv n jos a segmentului de stiv, este posibil atta timp ct
exist locaii de memorie disponibile.
O parte a datelor pot fi considerate statice n sensul c dimensiunea lor nu
se modific n timpul execuiei programului. Valorile coninute se pot modifica.
Acestea ocup locaiile de memorie adresate de adrese mai mici. Deasupra
acestora se memoreaz datele dinamice, adic cele care pot fi alocate i dealocate
n timpul programului.
0 x 0040 0000 0 x 1000 0000: Text Segment (Segmentul Program)
Locaiile de memorie sunt rezervate pentru pstrarea codului main al
programelor.
0 x 0000 0000 0 x 003F FFFF: Memorie rezervat
Primele locaii de memorie sunt rezervate.
 Exerciiu:
1. Deschidei QtSpim.
2. Observai n panoul DATA al ferestrei principale segmentul de stiv
(STACK).

3. Observai c valoarea registrului general sp este adresa vrfului stivei.


4. Observai n panoul DATA al ferestrei principale segmentul de date
(DATA):

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

5. Observai c adresa de la care ncepe segmentul de date este 0x1000 0000;


6. ncrcai un program. Observai c instruciunile main sunt ncrcate n
memorie ncepnd de la adresa 0x0040 0000:

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

4. Declararea datelor
 Datele se declara n cadrul programului imediat dup directiva .data.
Declararea se realizeaz dup urmtorul format:
<nume>: <tip> <valori>
unde:
Nume

Tip

Valori

Reprezint o etichet care indic locaia de memorie alocat la


asamblare.
Introducerea unei alte valori la respectiva locaie de memorie conduce la
modificarea valorii variabilei. Exist posibilitatea declarrii de date fr
atribuirea unei etichete.
Reprezint un tip de date. Poate fi:
- .byte (byte = 1 octet = 8 bii )
- .half (2 octei = 16 bii)
- .word (word = 4 octei = 32 bii)
- .float (32 bii) - numere reale n simpl precizie;
- .double (64 bii) - numere reale n dubl
precizie;
- .space - aloc memorie (se utilizeaz mpreun
cu .align n, care aliniaz urmtoarea valoare pe
2n octei);
Reprezint o lista de valori compatibile cu tipul indicat;
Valorile se stocheaz n zona de date, fiecare data ocupnd o locaie
corespunztoare tipului;
Valorile se pot scrie numeric zecimal (ex. 2, 10, -1), numeric hexa (ex.
0x21 care nseamn 33 zecimal), caracter (ex. 'A', 'b'), etc.

 Exerciiu:
1. ncrcai n QtSpim programul urmtor:
.data
var1: .word 17
x: .word'a', 'b'
y: .byte 'a', 'b'
z: .byte 102
.text
main:
li $v0,10
syscall

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

2. Observai cum se pstreaz datele n memorie:


2.1. De ce apare 0x00000011 pe primii 4 octei?
2.2. De ce apare 0x00000061 pe urmtorii 4 octei?
2.3. De ce apare 0x00000062 pe urmtorii 4 octei?
2.4. De ce apare 0x00666261 pe urmtorii 4 octei?

 ntrebri:
1) n ce baz se consider valoarea 17 asignat variabilei declarate astfel:
var1: .word 17 ?
2) Ce este o directiv? Ce directive identificai n programul ncrcat?

5. Metode de adresare

Format
(rs)
imm

Descriere
- adresa o reprezint coninutul registrului rs;
- codul registrului se pstreaz n biii corespunztori lui rs din
instruciunea de tip I.
- adresa este dat direct de valoarea imm;
- valoarea adresei se pstreaz n biii corespunztori imm din
instruciunea de tip I.
7

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

imm(rs)

eticheta
eticheta imm
eticheta imm(rs)

- adresa o reprezint coninutul registrului rs + valoarea imm;


- rs reprezint adresa de baz, iar imm offsetul;
- imm poate fi o valoare pozitiv, negativ sau 0 (cnd se
ajunge n primul caz (rs)).
- adresa este cea asociat la compilare etichetei;
- se stocheaz n cmpul imm din formatul I.
- adresa este cea asociat la asamblare etichetei valoarea
imediat imm;
- aceast adres se stocheaz n cmpul imm n formatul I.
- adresa este cea asociat la compilare + adresa obinut ca
imm(rs);

6. Instruciuni de transfer
Operanzii necesari n instruciunile aritmetice i logice trebuie adui din memorie
n regitri (load). Operaia invers, de scriere n memorie este store.
Instruciunile de transfer sunt n format I:

Fig. 3. Formatul instruciunilor

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

Instruciunile de transfer sunt prezentate n tabelul urmtor:

Instruciune
lw rt, imm(rs)

Operaia efectuat
Load Word

Format Exemplu
I
lw $t2,3($t1)

rt memory[rs + imm]

lb rt, imm(rs)

n registrul rt se ncarc valoarea pstrat n


memorie pe 1 word (4 octei) ncepnd cu
adresa rs+imm.
Load Byte
I

lb $t2, 3($t1)

rt memory[rs + imm]

lbu rt, imm(rs)

Valoarea stocat la adresa rs + imm este


considerat cu semn
Load Byte Unsigned
I

lbu $t2, 0($t1)

rt memory[rs + imm]

lh rt, imm(rs)

Valoarea stocat la adresa rs + imm este


considerat fr semn
Load Halfword
I

lh $t2, 3($t1)

rt memory[rs + imm]

lhu rt, imm(rs)

Valoarea stocat pe 16 bii (2 octei) ncepnd


cu adresa rs + imm este considerat cu semn;
Load Halfword Unsigned
I

lhu $t2, 3($t1)

rt memory[rs + imm]

lui rt, imm

Valoarea stocat pe 16 bii (2 octei) ncepnd


cu adresa rs + imm este considerat fr
semn;
Load Upper Immediate
I

lui $t1, 7

rt imm || 016

sw rt, imm(rs)

Valoarea imediat imm este shiftat cu 16 bii


la stnga i plasat n rt.
Store Word
I
memory[rs + imm] rt
n memorie, pe un word (4 octei) ncepnd de

sw $t1, 2($t0)

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

sb rt, imm(rs)

la adresa address se stocheaz valoarea din


registrul rt;
Store Byte
I

sb $t1,0($t0)

memory[rs + imm] rt

sh rt, imm(rs)

n memorie, pe 1 byte (1 octet) la adresa


address se stocheaz ultimii 8 bii din rt.
Store Halfword
I

sh $t1, 2($t0)

memory[rs + imm] rt
n memorie, pe 2 bytes (2 octei), ncepnd cu
adresa address se stocheaz ultimii 16 bii
meninui n rt.
Tabelul 1. Instruciuni de transfer
Pseudoinstruciunile de transfer sunt prezentate n tabelul urmtor:

Pseudoinstruciune
li rt, imm

Operaia efectuat
Load Immediate

Exemplu
li $t0,1

rt imm
la rt, eticheta

n registrul rt se ncarc valoarea imm;


Load Address

la $t1,var1

rt address(eticheta)

move rt,rs

n registrul rt se ncarc adresa asociat


variabilei etichet;
move $t1, $t2
Move
rt rs
Coninutul registrului rs este copiat n
registrul rt.
Tabelul 2. Pseudoinstruciuni de transfer

Modurile de adresare utilizate sunt cele prezentate n paragraful precedent.

10

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3


Datele se pot scrie sau citi din memorie doar la adrese care sunt multiplii
ai dimensiunii tipului respectiv. De exemplu, dac s-a declarat x de tip word, atunci se va
putea scrie n memorie la adresa indicat de x + 4, dar nu i la adresa indicat de x + 1.
 Problem rezolvat:
Declarai valoarea 23 cu eticheta x. Modificai valoarea corespunztoare etichetei
x la 5.
.data
x: .word 23
.text
main:
lw $t0,x
# incarca x in registrul t0
li $t1,5
# incarca valoarea 5 in t1
sw $t1,x
# memoreaza valoarea din t1 in x
li $v0,10
syscall
 Probleme propuse:
1) Introducei valorile 1, respectiv 2 n t1, respectiv t2 i interschimbai-le.
2) Scriei un program care calculeaz expresia var3= 8*var1-[var2/16], unde
var1=16 i var2=31.
3) Declarai 3 variabile x, y i z de tip word cu valorile 10, 11, 12.
a) ncrcai n registrul $t1 valoarea word aflat n memorie la adresa lui
x + 4, fr a utiliza o alt variabil n afara lui x. Ce valoare este
aceasta?
b) Stocai pe 2 octei, la adresa indicat de x + 8 valoarea 14.
4) Fie x eticheta la care se memoreaz valoarea 5, definit ca word. S se
memoreze la adresa lui x + 4 valoarea polinomului f = 2x2 4x + 12.

 Mai multe informaii


MIPS32 Architecture For Programmers -Volume II: The MIPS32 Instruction Set
http://www.cs.cornell.edu/courses/cs3410/2008fa/MIPS_Vol2.pdf
MIPS Instruction Coding
http://www.cs.sunysb.edu/~cse320/MIPS_Instruction_Coding_With_Hex.pdf

11

Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

MIPS Assembly Language Programmers Guide


http://www.cs.unibo.it/~solmi/teaching/arch_20022003/AssemblyLanguageProgDoc.pdf
Programmed Introduction to MIPS Assembly Language
http://chortle.ccsu.edu/AssemblyTutorial/index.html

12

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