Simulator procesor DLX - Despre program.


Pagina introductiva
Despre program - folosire
Despre resursele procesorului
Despre procesor - operatii
Despre intreruperi
Specificatii de program
Contactati-ne pe web !




               Realizarea programului: S-a cerut de catre utilizator crearea unui produs program care sa simuleze functionarea unui procesor DLX. Programul va primi ca date de intrare un fisier de tip text care contine instructiuni apartinand setului de instructiuni in asamblare al procesorului DLX. Fisierul de intrare va fi introdus de catre utilizator in momentul rularii. Programul va efectua citirea acestui fisier si va executa continutul sau atat "hardware" (adica se vor obtine rezultate practice ca si procesorul real) cat si "software" (adica se vor afisa pe ecran resursele procesorului).

               Fisierul sursa: Un exemplu de fisier sursa este dat aici (ATENTIE: instructiunile trebuie sa fie CORECT DATE in limbajul de asamblare al procesorului DLX):

     LOAD R0,10;     //pune 10 in registrul R0
     LOAD R1,27;     //pune 27 in registrul R1
     LOAD R2,20;     //pune 20 in registrul R2
     LOAD R3,31;     //pune 31 in registrul R3
     SW 0(R2),R0;     //copiaza in M[0+20] valoarea gasita in R0 (adica 10)
     SW 0(R3),R1;     //copiaza in M[0+31] valoarea gasita in R1 (adica 27)
     LW R4,(R2);     //pune in R4 valoarea gasita in M[20]
     LW R5,(R3);     //pune in R5 valoarea gasita in M[31]
     ADD 6,4,5;     //aduna valoarea gasita in registrul R[4] cu valoarea gasita in registrul R[5] si pune rezultatul in R[6]
     SW 25,R6;     //stocheaza cuvantul gasit in R[6] in in memorie M[25]
     BEQZ R6,15;     //daca valoarea gasita in R[6] este zero, sare la linia 15 din fisierul sursa
     END;     //EOF

Iata un alt exemplu:

     LOAD R0,11;
     SW 10(R31),R0;
     LW R1,10(R31);
     LB R2,10(R31);
     LBU R3,10(R31);
     LH R4,10(R31);
     ADD R5,R4,R3;
     ADDI R6,R5,#43;
     LOAD R7,185925733;
     SH 1(R1),R7;
     LW R8,1(R1);
     J 18;
     SB 2(R1),R7;
     LW R9,2(R1);
     LHI R10,#185925733;
     SLLI R11,R7,#2;
     SLT R12,R10,R7;
     SLT R13,R7,R10;
     SLLI R14,R7,#2;
     LOAD R15,22;
     JALR R15;
     LOAD R14,8;
     LOAD R14,0;
     BEQZ R14,26;
     LOAD R15,1;
     LOAD R16,8;
     LOAD R15,2;
     END;

               Daca presupunem ca fisierul sursa ar contine si instructiuni gresite, proiectul s-ar complica substantial, in sensul ca ar trebui construit (cel putin) un analizor lexical de tip: DLXLEX care sa precizeze pe acest fisier sursa daca instructiunile sunt valide sau nu. Validarea lor va fi de doua tipuri: in primul rand o validare sintactica (numele instructiunii trebuie sa fie corect: adica daca in loc de LBU cineva scrie LBV, trebuie sa se prezinte eroarea) si in al doilea rand trebuie sa fie o validare morfologica (adica parametrii instructiunii trebuie sa fie corecti: LW R1,30(R2) este o instructiune corecta in timp ce LB R1,30(R2) este o instructiune eronata pentru ca nu putem da Load Byte si sa precizam o lungime de cuvant de 32 de biti). Mai mult, daca presupunem ca in fisierul sursa avem erori, pe langa un analizor lexical va fi nevoie si de un compilator care sa precizeze unde s-a produs eroarea (linie si coloana in spatiul ecran) si eventual variante de corectie. Deci, dupa cum se vede din aceasta scurta analiza, de comun acord cu coordonatorul proiectului s-a decis faptul ca fisierul de intrare este dat corect.

               Rularea programului: 
     1)Se downloadeaza arhiva DLX.zip din pagina principala gasita aici.
     2)Se merge in directorul unde a fost plasata arhiva si se decomprima.
     3)Programul este deja compilat si se da doar comanda: "appletviewer cn_ip.html"
     4)Din applet se aleg: numele fisierului, durata clock-ului in secunde (pentru executia pas cu pas), rularea pas cu pas alegand butonul "run2" sau rularea bloc alegand butonul "run1".
     5)Se citesc rezultatele din fereastra non-grafica.

               Diagramele de flux de date arata acest circuit al rularii:


               Pentru a rula pagina la inceput (la meniu) dati un click aici.