I expect you to do this lab in teams of two, with one exception if we have an odd number of students. Please form your own team of two, or contact me if you want to work alone or as a team of three; you may not work alone or as a team of three without my approval. If you are having trouble finding a partner (but want to work in a team), see me.
Your lab write up can be short and sweet, but it should be English. Specific details I will expect to see are the two programs you are asked to write, a description of how you tested your program (and/or test data and results) from those two programs. Your program should include enough comments or formatting to make it easily readable. Make sure your testing is systematic and thorough. Thorough doesn't mean using large quantities of weird numbers that still only test the same cases; rather, it means using carefully chosen tests to ensure that all cases are covered and all likely bugs exposed, while still allowing the answers to easily be hand-checked.
You will do this lab on one of the Linux PCs in OHS 326. You will use
xspim, as described in Appendix A of the book. To run it, you can
just type xspim
in a shell window. You can type
your programs in and edit them using either emacs or the "Text
Editor," both of which are found in the Applications sub-menu of the K
menu. Let me know if you have troubles with this or other
Linux/X-windows user interface stuff.
Your program should start with the label
main:This is because xspim automatically loads some "startup" code, which is what is run when you tell xspim to run the program. The startup code does a
jal main
instruction, transferring
control to your code. Note that this is a subroutine call. Thus your
code can end with jr $ra
, returning control back to
the startup code. If so, the startup code will then exit, using the
exit system call (number 10). Alternatively, your program can do the
exiting itself, by putting 10 in register $v0
and then
executing a syscall
instruction.
The xspim program displays register contents, data memory contents, and the addresses of instruction and data memory as hexidecimal (base 16) numerals instead of the decimal ones you are used to. (This uses a-f as additional digits with values 10-15, so that by having each digit of the numeral any of 0123456789abcdef it can be in the range from 0-15.)
If you want to convert any of these to decimal to help you understand
what is going on, here is one easy way. Run Scheme (as in MCS-177 and
178)
and then input the number, but starting with #x. For example if you
evaluate #x1a
, Scheme will return 26, showing that
that hexidecimal 1a converts to decimal 26.
Start by stepping through simple programs, like one to add two numbers. This part of the lab is to make sure you are comfortable with SPIM.
Now you have two programs to write and test and debug (if necessary). You can do these in whichever order seems more natural for you.
main
is
invoked are $sp
, $ra
, and
$zero
. Any other values you observe in xspim are just
luck, and shouldn't be counted on.