Laborator3 MIPS

12
Arhitectura Sistemelor de Calcul (ROL) - Laborator 3 1 MEMORIA. DECLARAREA DATELOR. INSTRUCŢIUNI DE TRANSFER 1. Memoria principală Memoria principală (Main Memory) este locul în care se păstrează instrucţiunile maşină corespunzătoare unui program şi datele necesare acestuia pentru procesare. În cazul procesorului MIPS32, numărul locaţiilor de memorie este 2 32 . Fiecare locaţie de memorie este adresabilă printr-o adresă pe 32 de biţi şi conţine 8 biţi (1 byte). În mod similar, un procesor pe 64 de biţi poate adresa 2 64 adrese de memorie, folosind 64 de biţi. Memoria principală a procesorului MIPS32 poate fi considerată asemenea unui tablou de octeţi, fiecare locaţie de păstrare a unui astfel de octet fiind indicată de o secvenţă de 32 de biţi: 0xFFFFFFFF 10001000 0xFFFFFFFE 00010010 0xFFFFFFFD 01010101 0xFFFFFFFC 00110011 0xFFFFFFFB 00110011 ……………. ………… 0x00000003 00100010 0x00000002 00101010 0x00000001 00000100 0x00000000 01101001 Figura 1. Memoria principală Întrebări: 1) Câţi GB de memorie pot accesa procesoarele MIPS32 (2 32 bytes de memorie)? 2) Câţi GB de memorie pot accesa procesoarele MIPS64 (2 64 bytes de memorie)? Ideal, locaţiile de memorie ar trebui să se găsească în RAM. Însă întrucât aceasta conduce la capacităţi destul de ridicate, o parte a memoriei logice se găseşte pe hard disk. Modalitatea de a asigura întregul spaţiu de memorie prin împărţirea ei între RAM şi hard disk poartă denumirea de memorie virtuală. Avantajul metodei constă în posibilitatea utilizării întreg spaţiului de memorie, făcând însă un compromis de viteză: accesarea informaţiilor de pe hard disk se realizează mai lent. Pentru estomparea acestei diferenţe, părţi din memoria principală care sunt intens folosite în execuţie se păstrează în memoria cache, un tip de memorie accesat mult mai rapid de către procesor. Memoria cache este transparentă pentru program. Din punct de vedere al programelor, există numai

description

MIPS

Transcript of Laborator3 MIPS

  • Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

    1

    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 10001000 0xFFFFFFFE 00010010 0xFFFFFFFD 01010101 0xFFFFFFFC 00110011 0xFFFFFFFB 00110011 . 0x00000003 00100010 0x00000002 00101010 0x00000001 00000100 0x00000000 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

    2

    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

    3

    0xFFFFFFFF 0x80000000

    Memorie rezervat pentru Kernel (2GB)

    0x7FFFFFFFF 0x7FFFF000

    Memorie inaccesibil (4KB)

    0x7FFFEFFF $sp

    Segmentul de stiv (Stack Segment)

    ...

    $gp 0x10000000

    Segmentul de date (Data Segment)

    0x00400000

    Segmentul program (Text Segment)

    0x003FFFFF 0x00000000

    Memorie rezervat (4MB)

    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

    4

    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

    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

    6

    4. Declararea datelor

    Datele se declara n cadrul programului imediat dup directiva .data. Declararea se realizeaz dup urmtorul format:

    :

    unde:

    Nume 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.

    Tip 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);

    Valori 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

    7

    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 Descriere (rs) - adresa o reprezint coninutul registrului rs;

    - codul registrului se pstreaz n biii corespunztori lui rs din instruciunea de tip I.

    imm - adresa este dat direct de valoarea imm; - valoarea adresei se pstreaz n biii corespunztori imm din instruciunea de tip I.

  • Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

    8

    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)).

    eticheta - adresa este cea asociat la compilare etichetei; - se stocheaz n cmpul imm din formatul I.

    eticheta imm - adresa este cea asociat la asamblare etichetei valoarea imediat imm; - aceast adres se stocheaz n cmpul imm n formatul I.

    eticheta imm(rs) - 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

    9

    Instruciunile de transfer sunt prezentate n tabelul urmtor:

    Instruciune Operaia efectuat Format Exemplu lw rt, imm(rs) Load Word

    rt memory[rs + imm] n registrul rt se ncarc valoarea pstrat n memorie pe 1 word (4 octei) ncepnd cu adresa rs+imm.

    I lw $t2,3($t1)

    lb rt, imm(rs) Load Byte rt memory[rs + imm] Valoarea stocat la adresa rs + imm este considerat cu semn

    I lb $t2, 3($t1)

    lbu rt, imm(rs) Load Byte Unsigned rt memory[rs + imm] Valoarea stocat la adresa rs + imm este considerat fr semn

    I lbu $t2, 0($t1)

    lh rt, imm(rs) Load Halfword rt memory[rs + imm] Valoarea stocat pe 16 bii (2 octei) ncepnd cu adresa rs + imm este considerat cu semn;

    I lh $t2, 3($t1)

    lhu rt, imm(rs) Load Halfword Unsigned rt memory[rs + imm] Valoarea stocat pe 16 bii (2 octei) ncepnd cu adresa rs + imm este considerat fr semn;

    I lhu $t2, 3($t1)

    lui rt, imm Load Upper Immediate rt imm || 016

    Valoarea imediat imm este shiftat cu 16 bii la stnga i plasat n rt.

    I lui $t1, 7

    sw rt, imm(rs) Store Word memory[rs + imm] rt n memorie, pe un word (4 octei) ncepnd de

    I sw $t1, 2($t0)

  • Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

    10

    la adresa address se stocheaz valoarea din registrul rt;

    sb rt, imm(rs) Store Byte memory[rs + imm] rt n memorie, pe 1 byte (1 octet) la adresa address se stocheaz ultimii 8 bii din rt.

    I sb $t1,0($t0)

    sh rt, imm(rs) Store Halfword memory[rs + imm] rt n memorie, pe 2 bytes (2 octei), ncepnd cu adresa address se stocheaz ultimii 16 bii meninui n rt.

    I sh $t1, 2($t0)

    Tabelul 1. Instruciuni de transfer

    Pseudoinstruciunile de transfer sunt prezentate n tabelul urmtor:

    Pseudoinstruciune Operaia efectuat Exemplu li rt, imm Load Immediate

    rt imm n registrul rt se ncarc valoarea imm;

    li $t0,1

    la rt, eticheta Load Address rt address(eticheta) n registrul rt se ncarc adresa asociat variabilei etichet;

    la $t1,var1

    move rt,rs Move rt rs Coninutul registrului rs este copiat n registrul rt.

    move $t1, $t2

    Tabelul 2. Pseudoinstruciuni de transfer

    Modurile de adresare utilizate sunt cele prezentate n paragraful precedent.

  • Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

    11

    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

  • Arhitectura Sistemelor de Calcul (ROL) - Laborator 3

    12

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