UNIVERZITET "Sv. Kiril i Metodij"

Prirodno matemati~ki Fakultet - Skopje

Institut za Informatika

 

SEMINARSKA RABOTA

 

SPIM S20: MIPS R2000 Simulator

Predmet: Mikroprocesori i mikrokompjuteri


Izrabotil: Vladimir Stamenov

Mentor: dr. Marjan Gu{ev




Skopje, noemvri 1997

 

  1. VOVED
  2. SPIM
    1. EDITOROT SPIM
    2. TERMINALSKO KORISNI^KO OKRU@UVAWE
    3. X-WINDOWS OKRU@UVAWE
    4. IZNENADUVA^KI OSOBINI
  3. ASEMBLER
    1. SINTAKSA NA ASEMBLER
    2. SISTEMSKI POVICI
    3. OPIS NA MA[INATA
    4. PODREDUVAWE NA BAJTITE
    5. ADRESNI MODOVI
    6. LOAD I STORE INSTRUKCIITE
    7. INSTRUKCII ZA ISKLU^OCI I STAPICI
    8. INSTRUKCII ZA MANIPULIRAWE SO KONSTANTI
    9. ARITMETI^KI I LOGI^KI INSTRUKCII
    10. INSTRUKCII ZA SPOREDUVAWE
    11. INSTRUKCII ZA RAZGRANUVAWE I SKOK
    12. INSTRUKCII ZA PRENOS NA PODATOCI
    13. INSTRUKCII ZA BROEVI SO PODVI@NA ZAPIRKA
  4. KORISTEWE NA MEMORIJA
    1. KONVENCII ZA POVIK

REZIME

Ova seminarska rabota pretstavuva kratok prira~nik za koristewe na SpimSim. SpimSim e programski paket namenet za podobro razbirawe na gradbata i mehanizmite koi se koristat kaj RISC procesorskata arhitektura. So ovaa seminarskata rabota opfaten e i kratok prira~nik za asembler koristen kaj MIPS R2000, kako i nekoi raboti od gradbata na toj procesor koi olesnuvaat razbirawe na arhitekturata na istiot.

ABSTRACT

This document is basic user's guide for application software for SpimSim programming. With SpimSim, it is easier to understand all mechanisms and technics implemented in creation of RISC processors architecture. The document also consists short MIPS R2000 assembly language guide and all elements required necessery for easier understanding of hardware mechanisms of the processor.





VOVED

RISC arhitekturata pretstavuva op{t trend vo razvitok na kompjuterskata tehnologija. So Spim simulatorot se razjasnuvaat osnovnite na~ela za RISC tehnologija preku primerot na RISC procesorot MIPS R2000.

SPIM S20 e softverski simulator koj izvr{uva programi napi{ani za MIPS R2000/R3000 procesori. Samoto ime SPIM pretstavuva MIPS ~itano odnazad. SPIM mo`e da ~ita i neposredno da gi izvr{uva programite napi{ani vo assembler ili (na nekoi sistemi) MIPS izvr{nite programi. SPIM sodr`i svoj sistem za startuvawe na MIPS programi. Sodr`i dibager i ovozmo`uva nekolku servisi od operartiven sistem. SPIM e mnogu pobaven od klasi~en kompjuter (100 ili pove}e pati). No, zaradi svojata niska cena i {irokata primena e nesporedliv so realniot hardver.

Arhitekturata na MIPS kompjuterite e ednostavna i pravilna, {to ja ~ini lesna za u~ewe i za razbirawe. Procesorot sodr`i 32 registri za op{ta namena i dobro dizajnirano instrukcisko mno`estvo {to go pravi porazbirliv pri generirawe kod od strana na kompajlerite.

Simulatorite pretstavuvaat prakti~na alatka za razbirawe na procesorskite mehanizmi. Tie mo`at da obezbedat podobra sredina za programirawe od aktuelnite ma{ini poradi nivnata mo`nost za detektirawe gre{ki. Isto taka, simulatorite se korisna alatka za izu~uvawe na kompjuterite i programite koi se izvr{uvaat na niv. Zaradi nivnata softverska implementacija, a ne hardverska, simulatorite mo`at lesno da se modificiraat so dodavawe novi instrukcii, za izgraduvawe novi sistemi (multiprocesori) ili ednostavno za sobirawe na podatoci.

Arhitekturata MIPS, kako i kaj pove}eto RISC kompjuteri, e problemati~na za direktno programirawe zaradi zadocneto razgranuvawe, zadocnetoto `itawe i ograni~enite adresni modovi. Ovie ma{ini se dizajnirani da bidat programirani so jazici na povisoko nivo i poseduvaat interfejsi posoodvetni za kompajlerite, a ne za programerite. Dobar del od programskata celina e implementirana so pomo{ na zadocneti instrukcii. Delayed branch se izvr{uva vo dva ciklusi. Vo vtoriot ciklus - instrukcijata {to sleduva po graneweto se izvr{uva. Instrukcijata za granewe na toj na~in izvr{uva rabota koja vo normalnite uslovi bi se izvr{uvala pred granewe ili bi bila nop (operacija "ne raboti ni{to"). Sli~no, delayed loads ima dva ciklusi, taka {to po tekovno ~itawe na instrukcijata koja sleduva neposredno, ne mo`e da se koristat vrednostite od memorijata.

MIPS pametno ja prikriva ovaa kompleksnost so asemblerski implementirana viruelna ma{ina (virtual machine). Ovoj virtuelen kompjuter ima ne-zadocneti razgranuvawa i v~ituvawa, kako i pobogato instrukcisko mno`estvo za popolnuvawe na slotovite za zadocnuvawe. Taka, asembler gi reorganizira instrukciite so cel da gi popolni tie praznini. Pokraj ova simulira dopolnitelni psevdoinstrukcii preku kratki sekvenci na vistinskite instrukcii.

Predefinirano, SPIM simulira pobogata virtuelna ma{ina, no mo`e da simulira i ~ist hardver. Vo ovaa prilika, }e ja prika`eme virtuelnata ma{ina no i }e gi spomneme opciite koi ne pripa|aat na vistinskiot hardver. ]e gi koristime konvenciite na MIPS asemblerskiot jazik. Instrukciite ozna~eni so () se psevdo instrukcii.

SPIM

Vo ovoj del, podetalno e objasneto rakuvaweto so simulatorot i so site negovi komponenti. Dadeni se i komandi koi se od internoto mno`estvo na simulatorot, kako i opis na nekoi specifi~nosti koi se javuvaat pri rabota sa simulatorot.

3.1 EDITOROT SPIM

SPIM doa|a vo dve verzii. Poednostavnata verzija e nare~ena spim. Se izvr{uva na terminal od bilo koj tip. Deluva kako i pove}eto programi od ovoj tip: se vnesuva tekstualna linija, se pritiska kop~eto return i spim ja izvr{uva va{ata komanda. Pomodernata verzija na SPIM e nare~ena xspim. Koristi X-window system, taka da e neophoden bit-mapiran prikaz za da mo`e da se startuva. Xspim e polesen za u~ewe i koristewe zaradi prikazot na komandite na ekranot, i zaradi posledovatelniot prikaz na ma{inskite registri.

So ogled na toa deka xspim e vo pogolema upotreba, vo prodol`enie se razgleduva samo ovaa programa.

Koga }e se startuva xspim se otvora golem prozorec na va{iot ekran. Prozorecot e podelen na pet dela:

Najgorniot del se narekuva register display. Gi poka`uva vrednostite na site registri vo MIPS CPU i FPU. Ovoj prikaz e a`uriran sekoga{ koga programata prestanuva da se izvr{uva.
Delot koj sleduva gi sodr`i kontrolnite kop~iwa (control buttons) za rabotewe so xspim. Ovie }e bidat objasneti ne{to podocna.
Sledniot del se narekuva tekstualni segmenti (text segments), i gi prika`uva instrukciite od programata i sistemskiot kod koj avtomatski se ~ita so startuvaweto na xspim. Sekoja instrukcija e prika`ana so linija koja izgleda vaka:

[0x00400000] 0x8fa40000 lw $4 , 0($29) ; 89; lw $a0 , 0($sp)

Prviot broj vo zagradata pretstavuva heksadecimalna memoriska adresa na instrukcija. Vtoriot broj e isto taka vo heksadecimalen oblik i pretstavuva instrukciski numeri~ki kod. Tret del e instrukciski mnemoni~ki prikaz. Sledniot del e tekovnata linija od asemblerskata programa koja ja inicira instrukcijata. Brojot 89 go poka`uva brojot na linijata vo programata.
^etvrtiot del od prozorecot se narekuva data segments, i gi prika`uva podatocite v~itani vo programskata memorija i podatocite od programskiot stek.
Posledniot del se porakite SPIM ( SPIM messages ) koj go koristi Xspim za ispi{uvawe na porakite.

Sleduva opis kako se v~ituva i startuva dadena programa. Prvata rabota koja {to treba da se napravi e da se pritisne kop~eto LOAD ( vtoroto vo prviot red kop~iwa ), so levoto kop~e na gluv~eto. So vakvo kop~e xspim otvora mal prozorec so ramka i dve ili tri kop~iwa. So pomestuvawe na gluv~eto se doa|a so kursorot preku ramkata i se vnesuva ime na asemblerski kodirana datoteka. Potoa se koristi kop~e ozna~eno so ASSEMBLY FILE. Dokolku se promeni misleweto, se pritiska kop~eto nare~eno ABORT COMMAND i xspim go zatvora odzivniot prozorec. Koga }e se pritisne na ASSEMBLY FILE, xspim go zatvora prozorec sa odziv, ja v~ituva programata i povtorno go ispolnuva ekranot so instrukcii i podatoci. Potoa se pomestuva gluv~eto taka da kursorot ima pozicija vrz beliot del na scrollbar-ot levo na tekst segmentot, i povtorno se pritiska levoto kop~e na gluv~eto. So ova kop~e mo`e da se dvi`i nadolu niz tekstot.

Za da se startuva programata se pritiska kop~eto RUN vo xspim-oviot del nare~en control button. Se pojavuva prozorec za odziv so dve poliwa i dve kop~iwa. Pogolem del od vremeto, ovie poliwa gi sodr`at vistinskite golemini za startuvawe na programata taka {to treba da se ignoriraat i ednostavno da se pritisne kop~eto OK. Ova kop~e uka`uva na xspim da ja startuva programata. Koga programata se startuva, xspim go prazni register display zaradi postojano menuvawe na vrednostite na registrite. Za da se prekinete programata, se proveruva dali kursorot na gluv~eto e preku prozorec na xspim i se pritiska Ctrl-S. Ova rezultira so pojavuvawe na prozorec za odziv so dve kop~iwa. Pred da se napravi bilo {to so ovoj prozorec se nabquduvaat registrite i memorijata za da se bide vo tek {to rabotela programata. Toga{ mo`e da se prodol`i so programata so stiskawe na kop~eto CONTINUE, ili da se prekine so ABORT COMMAND.

Ako programata ~ita ili pi{uva od terminal, xspim otvora u{te eden prozorec nare~en console. Site karakteri koi programata gi pi{uva, se pojavuvaat na konzolata kako i site vrednosti vneseni po startuvawe na programata.

Vo slu~aj koga programata ne raboti onaka kako se o~ekuva, SPIM ima dve osobini koi pomogat dase otstranat gre{kite. Prvata e sekako najkorisna i ovozmo`uva postepeno nabquduvawe na instrukcii. So pritiskawe na kop~eto STEP se pojavuva u{te eden odziv, koj sodr`i dve ramki i tri kop~iwa. Prvoto pole pra{uva za brojot na instrukcii za postepeno prika`uvawe sekoj pat koga }e se stisne kop~e na gluv~eto. Vo pove}eto slu~ai - '1' e dobar izbor. Vtoroto pole pra{uva za argumenti za preminuvawe vo programa koga }e po~ne da se izvr{uva. Obi~no se ignorira zatoa {to ja sodr`i soodvetnata vrednost. Kop~eto STEP ja startuva programata za onolkav broj instrukcii kolku se navedeni vo prvoto pole. Kop~eto ozna~eno so CONTINUE go prekinuva postepenoto izvr{uvawe i prodol`uva so kontinuirana rabota. Sekako, kop~eto ABORT COMMAND gi prekinuva ~ekorite i ja ostava programata prekinata.

No, {to se slu~uva ako programata se izvr{uva mnogu pred da se pojavi gre{ka. Sekako deka so posledovatelni ~ekori mo`e da se stasa do odredeno mesto vo programata no vo op{t slu~aj ova mo`e da odzeme mnogu vreme. Podobra alternativa e da se iskoristi breakpoint, koj na xspim uka`uva da ja prekine programata vedna{ pred izvr{uvawe na odredena instrukcija. Se pritiska kop~e vo vtoriot red ozna~eno so BREAKPOINTS. Xspim otvora prozorec za odziv so edna ramka i pove}e kop~iwa. Vo ovaa ramka se vnesuva adresata na instrukcija za zastanuvawe Ako instrukcijata ima globalna labela ednostavno mo`e da se vnese imeto na labelata. Ova e osobeno prakti~en na~in da se zastane kaj prvata instrukcija vo procedura. Za da se postavi breakpoint se pritiska kop~eto ADD, a potoa mo`e da se startuva programata. Koga SPIM ja izvr{uva instrukcijata breakpoint, xspim pojavuva odziv so instrukcioni adresi i dve kop~iwa. Kop~iwata CONTINUE i ABORT COMMAND gi imaat istite ulogi. Za da se izbri{e breakpoint se koristi kop~eto DELETE. Kone~no, naredbata LIST ovozmo`uva pe~atewe (na najdolniot del) lista na site postaveni breakpoint-i.

Sleden ~ekor posle locirawe na gre{kite e popravkata so pomo{ na editorot. Za povtorno da se startuva programata treba "sve`" primerok na SPIM, koj se dobivaa na dva na~ini. Mo`e da se izleze od xspim so kop~eto QUIT, ili da se is~isti i povtorno da se pro~ita programata. Dokolku povtorno se ~ita zadol`itelno se ~isti i memorijata za da se eliminiraat ostatoci od starata programa. Ova se postignuva taka {to prvo se koristi kop~eto CLEAN; se dr`i levoto kop~e na gluv~eto stisnato i }e se otvora meni. So pomestuvawe na kursorot na MEMORY&REGISTERS se otpu{ta kop~eto na gluv~eto. Ova doveduva do ~istewe na memorijata i registrite na xspim i vra}awe na procesorot vo sostojba vo koja bil so prvoto startuvawe na xspim. Toga{ mo`e da se pro~ita i startuva novata programa.

KOMANDI NA SPIM

Sleduvaat nekoi od SPIM komandite (da spomneme deka va`at za dvete verzii na SPIM):

-bare : Simulira prazna MIPS ma{ina bez psevdoinstrukcii ili dodatni adresni modovi ovozmo`eni so assembler. Ozna~uva i -quiet.

-asm : Simulira virtualna MIPS ma{ina so pomo{ na asembler. Ova e predefinirano.

-notrap : Ne polni standarden upravuva~ na prekini (trap handler). Toj ima dve funkcii koi korisni~kata programa mora da gi prezeme. Prvo - toj rakuva so prekini. Koga prekin se pojavuva, prekin skoka na lokacija 0x80000080, na koja treba da bide kod za uslu`uvawe na prekinot. Vtoro, ovaa programa sodr`i kod za po~etok koj ja povikuva rutinata main. Bez upravuva~ na prekini, izvr{uvaweto po~nuva so instrukcijata ozna~ena so labelata __start.

-trap : Polni standarden trap - handler. Ova e predefinirano.

-noquiet : Pe~ati poraka koga }e se pojavi prekin. Ova e predefinirano.

-quiet : Ne pe~ati poraka.

-nomapped_io : Onevozmo`uva memoriski mapirani vlezno-izlezni edinici. Ova e predefinirano.

-mapped_io : Sprotivno od prethodnoto.

-file : Polni i izvr{uva asemblerski kod vo datotekata.

-execute : Polni i izvr{uva kod vo MIPS izvr{na datoteka a.out. Programata ne mo`e da povikuva sistemski servisi (vlezni ili izlezni) zatoa {to SPIM ne simulira prekini na MIPS-jadroto na operativniot sistem.

-s seg size : Postavuva po~etna golemina na memoriski segment seg da bide size bajti. Memoriskite segmenti se imenuvani kako: text, data, stack, ktext, kdata. Text segment gi sodr`i instrukciite od programata. Data segment gi sodr`i programskite podatoci. Stack segment go sodr`i negoviot runtime stek. SPIM isto taka go izvr{uva sistemskiot kod koj upravuva so prekini. Kodot se nao|a na oddelni mesta vo adresen prostor nare~en kernel. Na primer, parot argumenti -sdata 2000000 go zapo~nuva korisni~kiot podato~en segment na 2000000 bajti. Ktext segment gi sodr`i ovie kodirani instrukcii, a kdata nivnite podatoci.

-lseg size : Ja ograni~uva goleminata na memoriskiot segment seg na size bajti. Memoriskite segmenti koi mo`at da se zgolemuvaat se: data, stack, kdata.

3.2 TERMINALSKO KORISNI^KO OKRU@UVAWE

Poednostavnata verzija na SPIM e nare~ena spim. Ne bara bitmapiran prikaz i mo`e da se startuva od bilo koj terminal. Mo`ebi u~eweto na spim e malku pote{ko, no funkcionira isto kako xspim i ja ovozmo`uva istata funkcionalnost. Terminalskiot interfejs na spim gi ovozmo`uva slednite komandi:

exit : Izlez od simulatorot.

read "file" : Pro~itaj ja asemblerskata datoteka "file" vo SPIM. Ako ve}e e pro~itana vo SPIM sistemot, mora da se is~isti inaku globalnite simboli }e bidat pove}e pati definirani.

load "file" : Sinonim za read.

execute "a.out" : Pro~itaj ja MIPS izvr{nata datoteka a.out vo SPIM. Ovaa komanda e dostapna samo ako SPIM e startuvan na sistem koj sodr`i MIPS procesor.

run <addr> : Go zapo~nuva startuvaweto na programata. Ako e obezbedena opcionalna adresa addr, programata po~nuva od taa adresa. Inaku programata po~nuva kaj globalniot simbol __start, koj obi~no e predefiniran na startup code koj ja povikuva rutina kaj globalniot simbol main.

step <N> : Ja izvr{uva programata postepeno za ~ekor N (po difolt: 1). Gi pe~ati instrukciite po redosled na nivnoto izvr{uvawe.

continue : Prodol`uva izvr{uvawe na programata bez ~ekori.

print $N : Go pe~ati registerot N.

print $fN : Pe~ati floating point register N.

print addr : Ja pe~ati sodr`inata na memorijata so po~etna adresa addr.

print_sym : Pe~ati ja tabelata so simboli t. e. adresite na globalnite (ne lokalni) simboli.

reinitialize : Ja ~isti memorijata i segmentite.

breakpoint addr : Postavuva to~ka na prekin na adresa addr (addr mo`e da bide memoriska adresa ili simboli~ka labela).

delete addr : Gi bri{e site to~ki na prekin od adresata addr.

list : Gi lista site to~ki na prekin.

. : Ostatok od linijata e asemblerska instrukcija skladirana vo memorija.

<nl> : Novata linija povtorno ja izvr{uva prethodnata komanda.

? : Pe~ati pomo{na poraka. Pove}e komandi mo`at da bidat skrateni ili prodol`eni za nivniot edinstven prefiks npr. re, l, ru, s, p. Pova`nite naredbi kako reinitialize, pobaruvaat podolg prefiks.

3.3 X-WINDOWS SREDINA

Pokraj standardnite naredbi (ve}e spomnati) za xspim postojat i drugi korisni naredbi. Verzijata xspim vo osnova operira kako i spim. X prozorecot ima pet delovi od koi najgorniot gi prika`uva registrite. Ovie vrednosti postojano se obnovuvaat, osven koga programata se startuva. Sledniot del od prozorecot gi sodr`i kop~iwata koi go kontroliraat simulatorot:

quit izlez od simulatorot
load ja ~ita izvornata ili izvr{nata programa vo SPIM
run ja startuva programata
step postepeno nabquduvawe na programata
clear vr{i povtorna inicijalizacija na registrite ili memorijata
set value postavuva odredena vrednost vo register ili na memoriska lokacija
print ja pe~ati vrednosta na registerot ili na memoriskata lokacija
breakpoint postavuva ili bri{e to~ki na prekin ili gi lista site
help pe~ati pomo{na poraka
terminal go otvora ili go zatvora konzolniot prozorec
mode postavuva SPIM operativen mod

Slednite dva paneli ja prika`uvaat memorijata. Gorniot gi prika`uva instrukciite na korisnikot i najbitnite tekst segmenti. (Ovie instrukcii se realni - ne se psevdo-MIPS instrukcii. SPIM preveduva asemblerski instrukcii vo 1-3 MIPS instrukcii. Sekoja izvorna instrukcija se pojavuva kako komentar na prvata instrukcija vo koja e prevedena.) Prvite nekolku instrukciii vo tekst segmentot se predefiniran start-up kod (__start) koj ~ita argc i argv vo registri i ja povikuva main rutinata. Dolniot od ovie dva paneli gi prika`uva podato~niot i stek segmentite. So sekoe izvr{uvawe na programata se obnovuvaat dvata paneli.

Posledniot panel se koristi za prika`uvawe na SPIM porakite. Ne gi prika`uva izleznite podatoci na programata. Koga programata ~ita ili zapi{uva vlezno-izleznite podatoci se pojavuvaat vo oddelni prozorci nare~eni konzoli koi se pojavuvaat po potreba.

3.4 IZNENADUVA^KI OSOBINI

Iako SPIM verno go simulira MIPS kompjuterot, SPIM e simulator i odredeni raboti ne se identi~ni so vistinskite kompjuteri. Najo~igledni razliki se vo neidenti~nosta na instrukciskiot tajming i memoriskiot sistem. SPIM ne simulira ke{ ili skriena memorija nitu pak precizno gi odrazuva operaciite so podvi`na to~ka ili umno`uva i deli instrukciski zadocnuvawa.

U{te edna nevoobi~aenost (koja se javuva i kaj realnite ma{ini) e toa {to psevdoinstrukcijata se {iri vo pove}e ma{inski instrukcii. Ako postepeno se nabquduva ili se ispituva memorijata instrukciite {to se pretstaveni ne se razlikuvaat mnogu od izvornata programa. Soodvetstvoto pome|u dvata seta instrukcii e golemo zatoa {to SPIM ne gi reorganizira instrukciite za da gi popolni delay slotovite.