smips.c
1092 spim2hex
smips
smips.c
$ mkdir smips
$ cd smips
$ unzip /web/dp1092/21T2/activities/smips/examples.zip
$ cat examples/42.s li $a0, 42
li $v0, 1
syscall
li $a0, ‘\n’
li $v0, 11
syscall
# printf(“%d”, 42);
# printf(“%c”, ‘\n’);
$ 1092 spim2hex examples/42.s 3404002a
34020001
c
3404000a
3402000b
c
smips.c
:selpmaxe dedivorp eht hctef dna , yrotcerid siht ot egnahc ,
:sdnammoc eseht gninnur yb dellac tnemngissa siht rof yrotcerid wen a etaerC
.setanimret margorp eht nehw seulav retsiger ehT ..snoitcurtsni SPIM eht gnitucexe nehw sllacsys yb decudorp tuptuo ehT edoc noitcurtsni hcae ot gnidnopserroc )relpmessa( noitcurtsni ehT
.snoitcurtsni SPIM rof sedoc xeh eht uoy evig lliw
.srebmun lamicedaxeh sa snoitcurtsni SPIM rof sedoc noitcurtsni tib-23 eht eb lliw
dnammoc ehT tupni ehT . SPIM eht fo tesbus elpmis llams rof rotalume na etirw ot si tnemngissa siht ni ksat ruoY tnemngissA ehT
eb dluohs
morf tuptuo ehT
.tnemngissa siht rof edoc gnitrats on si erehT
snoitarepo tib gnidulcni ,C gnisitcarP UPC elpmaxe na fo gnidnatsrednu etercnoc a gnidliub yllareneG snoitcurtsni SPIM fo scitnames gnidnatsrednU snoitcurtsni SPIM fo gnidocne gnidnatsrednU
smiA spiM elpmiS ,spims :2 tnemngissA
00 00 90 20-70-1202 :detadpu tsal 0.1 :noisrev
detratS gnitteG
:elpmaxe roF
$ cat examples/42.hex 3404002a
34020001
c
3404000a
3402000b
c
$ gcc -Wall -Werror -std=gnu99 smips.c -o smips $ ./smips examples/42.hex
Program
0: ori $4, $0, 42
1: ori $2, $0, 1
2: syscall
3: ori $4, $0, 10
4: ori $2, $0, 11
5: syscall
Output
42
Registers After Execution
$2 = 11
$4 = 10
1092 smips
:elpmaxe rof, sa elbaliava si noitatnemelpmi ecnerefer A noitatnemelpmi ecnerefeR
$ cat examples/triangle.hex 34080005
34090001
3402000b
340a0000
3404002a
c
214a0001
3404000a
149582a
140bfffb
3404000a
c
21290001
128582a
140bfff5
$ 1092 smips examples/triangle.hex Program
0: ori $8, $0, 5
1: ori $9, $0, 1
2: ori $2, $0, 11
3: ori $10, $0, 0
4: ori $4, $0, 42
5: syscall
6: addi $10, $10, 1
7: ori $4, $0, 10
8: slt $11, $10, $9
9: bne $0, $11, -5
10: ori $4, $0, 10
11: syscall
12: addi $9, $9, 1
13: slt $11, $9, $8
14: bne $0, $11, -11
Output
*
**
***
****
Registers After Execution
$2 = 11
$4 = 10
$8 = 5
$9 = 5
$10 = 4
:snoitcurtsni SPIM fo tesbus siht ylno tnemelpmi ot deen uoY tesbuS noitcurtsnI SPIM
.esac siht ni ruoivaheb s’noitatnemelpmi ecnerefer eht hctam ot deen ton od uoy taht etacidni ro ,gub eht xif yam ew ,gub a si ti fI .murof ssalc eht ni ti troper ,noitatnemelpmi ecnerefer eht ni gub a eb ot eveileb uoy tahw revocsid uoy fI
.tnemngissa eht fo trap yletarebiled si ruoivaheb s’noitatnemelpmi ecnerefer eht gnihctam dna gnirevocsiD
.ruoivaheb s’noitatnemelpmi ecnerefer eht hctam dluohs uoy noitacificeps siht ni denifednu si tnemngissa siht fo tcepsa yna erehW
.WSNU evael uoy retfa htiw krow ot deen ylekil lliw uoy gnihtemos s’ti dna ,noitacificeps lanoitarepo na enifed ro edivorp ot dohtem evitceffe dna tneiciffe ,nommoc a si noitatnemelpmi ecnerefer a fo noisivorP
add $d, $s, $t
d =s +t
000000ssssstttttddddd00000100000
sub $d, $s, $t
and $d, $s, $t
or $d, $s, $t
slt $d, $s, $t
mul $d, $s, $t
beq $s, $t, I
bne $s, $t, I
addi $t, $s, I
slti $t, $s, I
andi $t, $s, I
d =s -t
d =s &t
d =s |t
d = 1 if s < t else 0
d =s *t
if (s == t) PC += I
if (s != t) PC += I
t =s +I
t = (s < I)
t =s &I
t =s |I
t = I << 16
syscall
000000ssssstttttddddd00000100010
000000ssssstttttddddd00000100100
000000ssssstttttddddd00000100101
000000ssssstttttddddd00000101010
011100ssssstttttddddd00000000010
000100ssssstttttIIIIIIIIIIIIIIII
000101ssssstttttIIIIIIIIIIIIIIII
001000ssssstttttIIIIIIIIIIIIIIII
001010ssssstttttIIIIIIIIIIIIIIII
001100ssssstttttIIIIIIIIIIIIIIII
001101ssssstttttIIIIIIIIIIIIIIII
00111100000tttttIIIIIIIIIIIIIIII
00000000000000000000000000001100
ori $t,
lui $t,
syscall
$s, I
I
printf("%d")
exit(0)
printf("%c")
.tceffe on evah ti egnahc ot tpmetta hcihw snoitcurtsnI .0 syawla si 0 retsiger fo eulav ehT .snigeb noitucexe nehw orez eb ot tes era sretsiger 23 llA sretsigeR
.dehcaer si snoitcurtsni eht fo hsinif eht nehw stlah noitucexE .snoitcurtsni deificeps fo egnar eht dnoyeb noitucexe ekat dluow hcnarb a fi stlah noitucexE
C
tnirp ot regetni = 0a$ stnemugrA
:os,snoitcurtsni deificeps fo egnar eht dnoyeb dluow ti fi yltnelis stlah noitucexE noitucexE
tnirp ot retcarahc = 0a$
retcarahc tnirp 11 tixe 01 regetni tnirp 1 noitpircseD )0v$(
.sllac metsys fo tesbus siht tnemelpmi ot deen ylno uoY sllaC metsyS
rebmun retsiger tib-evif :t ,s ,r ,d )rebmun dengis tib-61( etaidemmI :I eno tib laretiL :1 orez tib laretiL :0
:noitcurtsni hcae seifitnedi yleuqinu 'nrettaP tiB' noitcurtsni ehT
nrettaP tiB C relbmessA yp
tseuqeR
1092 spim2hex
1092 spim2hex
smips.c
1092 spim2hex
$ echo 0 >0.hex
$ cat 0.hex
0
$ 1092 smips 0.hex
0.hex:1: invalid instruction code: 00000000
.s .hex
%08X
.hex
na detnirp eb dluohs egassem rorre na deilppus si rebmun llacsys dilavni na fI
.tesbus tnemngissa eht ni snoitcurtsni ylno sniatnoc selif gnidnopserroc ehT .eseht eldnah ot deen ton od uoY rj elpmaxe rof ,tesbus tnemngissa eht edistuo snoitcurtsni niatnoc )s.( relbmessa elpmaxe eht fo emoS
.tesbus tnemngissa eht ni snoitcurtsni ylno sniatnoc selif gnidnopserroc ehT .eseht eldnah ot deen ton od uoY il elpmaxe rof ,snoitcurtsni-oduesp niatnoc selif ) ( relbmessa elpmaxe eht fo emoS
.sedoc noitcurtsni hcnarb eht fo trap era hcihw tesffo evitaler eht otni eseht setalsnart xeh2mips 2901 .slebal hcnarb eldnah ot deen ton od uoY
.tnemngissa siht rof tesbus eht ni )wl .g.e( yromem ssecca hcihw snoitcurtsni on era erehT
.tnemngissa siht rof tesbus eht ni ton era yehT .)wl sa hcus yromem ssecca hcihw snoitcurtsni eldnah ot deen ton od uoY
.snoitarepo rehto ro citemhtira gnirud rucco ton seod wolfrevo emussa nac uoY
.meht rof egassem rorre na tnirp tonn od dna evoba tesbus eht dnoyeb snoitcurtsni SPIM artxe tnemelpmi uoy fi dezilanep eb ton lliw uoy ,revewoH
s’0 gnidael htiw deddap eb ton yam ro yam dna ,esac rewol ro reppu eb nac sedoc noitcurtsni dilavnI sedoc noitcurtsni dilavni tnirp ot sesu noitatnemelpmi ecnerefer ehT
.tesbus SPIM evoba eht ni noitcurtsni na ot dnopserroc ton seod hcihw rebmun lamicedaxeh a nevig fi egassem rorre na tnirp dluohs margorp ruoY
.evoba selbat eht ni denoitnem ylticilpxe ton era hcihw serutaef ro ,sllac metsys ,snoitcurtsni SPIM tnemelpmi ot evah ton od uoY
.srebmun 0001 tsom ta sniatnoc elif siht emussa nac uoY .enil rep eno srebmun lamicedaxeh tib-23 ylno sniatnoc elif siht emussa nac uoY tnemugra enil dnammoc a sa elif elgnis a nevig si emussa nac uoY .noitatnemelpmi ecnerefer eht fo tuptuo eht hctam ,tbuod ni fI .elbissop sa snoitpmussa wef sa ekam dluohs uoy ,sremmargorp doog lla ekiL snoitacifiralC dna snoitpmussA
.deteled si ti rj si noitcurtsni tsal eht ti elpmaxe roF .tnemngissa siht rof tesbus eht fo trap ton era hcihw snoitcurtsni nevig fi snoitalsnart ronim rehto emos ekam osla
.tnemngissa siht rof tesbus eht ni snoitcurtsni ot
yb detalsnart era esehT .il sa hcus snoitcurtsni-oduesp sniatnoc smargorp elpmaxe eht rof relbmessa eht etoN
. gnisu selpmaxe nwo ruoy tcutsnoc dna gnitset nwo ruoy od ot deen osla lliw uoY
elif piz a sa elbaliava era smargorp SPIM elpmaxe emoS selpmaxE
.detnirp era seulav orez-non htiw sretsiger ylno etoN .sretsiger gnitnirp nehw noitatnemelpmi ecnerefer eht hctaM
.)desu eb ton nacsretsiger emos erehw MIPS ekilnu( esoprup yna rof desu eb nac dna gninaem laiceps on evah sretsiger 13 rehto ehT
$ 1092 smips examples/bad_syscall.hex Program
0: ori $2, $0, 4242
1: syscall
2: ori $4, $0, 42
3: ori $2, $0, 1
4: syscall
5: ori $4, $0, 10
6: ori $2, $0, 11
7: syscall
Output
Unknown system call: 4242
Registers After Execution
$2 = 4242
stdio.h stdlib.h string.h
math.h assert.h system
gcc -Wall -Werror -std=gnu99 *.c -o smips
$a0
$ 1092 autotest smips smips.c [other .c or .h files]
$ give dp1092 ass2_smips smips.c [other .c or .h files]
give give
give
autotest
give
:htiw srevres ESC no noissimbus tsetal ruoy kcehc nac uoY .srerutcel ro srotut ot edoc ruoy gniliam-e yb skram niatbo tonnac uoY
.nwo ruoy yleritne eb tsum htiw timbus uoy krow eht ,esicrexe laudividni na si siht taht etoN .tnemngissa siht rof skram eht niatbo ot 95 95 32 1 tsuguA erofeb nur tsum uoY
: gninnur yb krow ruoy timbus tsum uoy ,tnemngissa eht no gnikrow dehsinif era uoy nehW noissimbuS
:stset detamotua elpmis emos nur ot
esu nac uoy ,gnikrow si margorp ruoy kniht uoy nehW tnemssessA
.noissimbus erofeb tuptuo gniggubed elbasid uoy erus ekam :stset gnikramotua liaf lliw ti ,tuptuo gniggubed tuo setirw margorp ruoy fI
liaf ot edoc ruoy esuac lliw C lagelli morf srorre emit-nuR .
htiw elipmoc tsum tI .snoitpo elipmoc artxe eriuqer ton tsum margorp ruoY
.sliated rof woleb eeS .tnemngissa ruoy fo snoisrev etaidemretni timbus ot deriuqer era uoY .murof ssalc eht ni ksa ,tnemngissa siht rof od ro esu tonnac dna nac uoy tahw no noitacifiralc deen uoy fI
;seirarbil rehto morf snoitcnuf esu ton yam uoY .smargorp lanretxe nur ot snoitcnuf C rehto ro esu ton yam uoY .segaugnal rehto ni edoc timbus ton yam uoY
. esu yam uoY .) ( yrarbil scitamehtam eht dna ).cte , , ,
morf snoitcnuf ,.g.e( yrarbil C dradnats eht morf snoitcnuf llac yam uoY .ylno C eb tsum edoc dettimbus ruoY
.dekram eb lliw noissimbus tsal ruoy ylnO .semit elpitlum nur nac uoY
)00 00 90 2-70-1202( .esaeler laitinI 0.1 noisreV
. fo )stib 8 tsewol( etyb wol eht tnirp dluohs 11 llacsyS
na detnirp eb dluohs egassem rorre na deilppus si rebmun llacsys dilavni na fI
goL egnahC
.gnikramotua
$ 1092 classrun -check ass2_smips
$ 1092 classrun -collect ass2_smips
$ 1092 classrun -sturec
.tnemngissa ruoy fo snoisrev etaidemretni timbus ot deriuqer era uoY kroW fo snoisreV etaidemretnI
.uoyrofkrowodotnosreprehtonagniyap ;tnesnoc rieht tuohtiw krow s’nosrep rehtona gnittimbus
tcudnocsim cimedaca
.krow tnioj sedulcni siht ;krow s’nosrep rehto yna gnittimbus
2901TSPD rof LF 0
.)enoyna yb( dettimbus yltneuqesbus si ti dna enoyna ot krow ruoy gnidivorp ylgniwonk
%0 )+05( SP )+06(
yltcerroc snoitcurtsni emos stnirp stnirpg
yltcerroc snoitcurtsni lla stnirp ,edoc elbadaer
RC/SP
smargorp emos rof yltcerroc sretsiger dna tuptuo stnirp ,yltcerroc snoitcurtsni lla stnirp ,edoc elbadaer yrev
)+07( ND/RC
smargorp lla rof yltcerroc sretsiger dna tuptuo ,yltcerroc snoitcurtsni stnirp ,edoc detnemucod lufituaeb
)+09( DH
:gniwollof eht ot ralimis yldaorb eb ot ylekil si ti tub ,snoissimbus tnemngissa eht gnitcepsni retfa emehcs tnemssessa eht yrav yam rerutcel ehT .swollof emehcs tnemssessa evitacidni nA
.margorp ruoy dnatsrednu dna daer ot namuh a rof si ti ysae woh no dessessa eb lliw uoy ,sdrow rehto nI .elyts dna ecnagele ,gnitnemmoc ,ytiralc fo sisab eht no dedrawa eb lliw skram esehT .gnikram dnah morf emoc lliw 2 tnemngissa rof skram eht fo %02
.stset fo seires egral a no edoc ruoy fo ecnamrofrep eht morf emoc lliw 2 tnemngissa rof skram eht fo %08 .kram 2901TSPD lanif ruoy ot skram 11 etubirtnoc lliw tnemngissa sihT emehcS tnemssessA
.emit taht ta eveihca nac ti kram mumixam eht ,%07 dedrawa eb dluow ti ,etal sruoh 51 dettimbus saw tnemngissa emas eht fI .tceffe on evah dluow noissimbus etal eht ,etal sruoh 01 dettimbus saw %47 htrow tnemngissa na fi ,elpmaxe roF .%2 yb eveihca nac ti kram mumixam eht secuder etal si ti ruoh hcae ,etad siht retfa dettimbus si tnemngissa ruoy fI
:enil dnammoc eht no gnipyt yb tnemngissa ruoy tcelloc nac uoy ,krow ruoy dessessa sah rotut ruoy retfA .woleb noitces tnemssessA eht ni debircsed sa ,ytilibadaer dna elyts rof kram lliw ohw ,rotut ruoy yb enod eb lliw gnikram launaM
.95 95 32 1 tsuguA eud ylevitatnet si tnemngissa sihT etaD euD
:gnipyt yb elbaliava eb osla lliw kram gnitluser ehT
give
.snoissimbus hcus rof ,yllaunam dna yllacitamotua htob ,denimaxe eb lliw snoissimbus tnemngissA
.asiv tneduts a fo ssol eht ni tluser osla yam sihT .pihsralohcs eht fo ssol a ni tluser yam siht ,spihsralohcs dloh devlovni stneduts fi :tcudnocsim tneduts rehto ro msiraigalp fo stca troper ot deriuqer osla era eW .enilpicsid cimedaca rehto ylbissop dna ,esruoc eht fo eruliaf citamotua ,skram evitagen edulcni yam seitlaneP .desilanep eb lliw snoitidnoc eseht etaloiv taht snoissimbuS
.yrotisoper etavirp a esu yam uoY .elbissecca yllacilbup si taht esle erehw yna ro buhtig sa hcus seirotisoper enilno ni krow tnemngissa ruoy ecalp ton oD
.egdelwonk ro tnesnoc ruoy tuohtiw nekat si krow ruoy fi dezilanep eb ton lliw uoY .uoy ot nwonknu ytrap driht a yb dettimbus si krow ruoy fi neve ylppa yam siht ;tnesnoc ro egdelwonk ruoy tuohtiw dettimbus saw krow taht fi neve ,dezilanep eb yam uoy ,dettimbus si ti morf devired krow dna ,nosaer yna rof nosrep rehtona ot krow tnemngissa ruoy wohs ro edivorp ylgniwonk uoy fI .2901TSPD fo ffats gnihcaet eht morf trapa ,)murof eht no ti gnitsop yb gnidulcni( nosrep rehto yna ot krow tnemngissa ruoy wohs ro edivorp ton oD
.2901TSPD fo )srotut dna )s(rerutcel eht( ffats gnihcaet eht morf ro ,snoisses pleh ,murof esruoc eht ni tnemngissa eht htiw pleh tseuqer ot dettimrep ylno era uoY
.dettimrep ton si nosrep rehto yna htiw nettirw yltnioj ro nosrep rehto yna morf devired yletelpmoc ro yllaitrap krow fo noissimbuS .evoba noitacificeps tnemngissa eht ni dedulcni ylticilpxe snoitpecxe yna morf trapa ,krow nwo ruoy yleritne eb tsum timbus uoy krow ehT
.dekram eb lliw tnemngissa ruoy fo noisrev dettimbus lanif eht ylnO .stset noissimbus liaf esiwrehto ro elipmoc ton od snoisrev etaidemretni fi enif si tI .woleb dnammoc eht gnisu ti timbus dna tnuocca ESC ruoy ot krow ruoy ypoc dluohs uoy ssergorp emos ekam dna tnemngissa eht no krow uoy emit yrevE
)00 00 90 20-70-1202( .esaeler laitinI 0.1 noisreV
goL egnahC
.tnemngissa laudividni na si sihT kroW fo noitubirttA