Documente Academic
Documente Profesional
Documente Cultură
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
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
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;
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
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
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
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
imm(rs)
eticheta
eticheta imm
eticheta 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:
Instruciune
lw rt, imm(rs)
Operaia efectuat
Load Word
Format Exemplu
I
lw $t2,3($t1)
rt memory[rs + imm]
lb rt, imm(rs)
lb $t2, 3($t1)
rt memory[rs + imm]
rt memory[rs + imm]
lh rt, imm(rs)
lh $t2, 3($t1)
rt memory[rs + imm]
rt memory[rs + imm]
lui $t1, 7
rt imm || 016
sw rt, imm(rs)
sw $t1, 2($t0)
sb rt, imm(rs)
sb $t1,0($t0)
memory[rs + imm] rt
sh rt, imm(rs)
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
la $t1,var1
rt address(eticheta)
move rt,rs
10
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.
11
12