Be sure you have read, or at least skimmed, all assigned sections of Chapter 2 and Appendix A.
Answer the following questions. You may write out your answers by hand or using a word processor or other program, but please submit hard copy, either in class or in one of my mailboxes (outside my office or in the ASO).
For this problem your mission is to reproduce by hand a little of what an assembler and linker would do with two fairly meaningless1 pieces of MIPS assembly code. The textbook has an example starting on p. 127 illustrating more or less what I have in mind here, and we reviewed the example in class, but on reflection it doesn't seem that clear to me, so for this assignment I want you to approach the problem a little differently.
First, the two files, one containing a main procedure:
.text .globl main main: addi $sp, $sp, -4 sw $ra, 0($sp) jal subpgm lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra .end main .data .globl dataX local: .word 0 dataX: .word 1, 2and another a procedure it calls:
.text .globl subpgm subpgm: addi $sp, $sp, -4 sw $ra, 0($sp) # copy data (two "words") from dataX to dataY la $s0, dataX la $s1, dataY lw $t0, 0($s0) sw $t0, 0($s1) lw $t0, 4($s0) sw $t0, 4($s1) lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra .end subpgm .data .globl dataY dataY: .space 8
For the ``assembly'' phase, I don't want you to actually translate the instructions into machine language, but I do want you to construct for each file a table with information as listed below. Note that you will need to expand the two la pseudoinstructions. The example in the textbook doesn't really show how to do this; they instead show how to deal with lw and sw referencing a symbol and assembled into something using the $gp register.2 Instead I want you to expand these instructions in the way SPIM does: each as a lui followed by a ori. (You can see examples of this by loading any of the sample programs that use la into SPIM and looking at what it shows for code.)
(Hint: Before going further, you'll probably find it useful to write down, for each of the two files, what's in its text segment (a list of instructions and their offsets, remembering to expand any pseudoinstructions), and what's in its data segment (a list of variables/labels and their offsets and sizes).)
Then produce, for each of the two source files, a table with the following. (Use hexadecimal to represent addresses and offsets.)
Next, ``link'' these two files to produce information for an executable for the SPIM simulator. Since programs in this simulator always have their text segments at 0x00400024 and their data segments at 0x10010000, absolute addresses into either segment can be based on these values. (Normally an executable file might include ``relocation information'' for any instructions containing absolute addresses that would need to be changed when the program is loaded into memory, but we'll skip that.)
(Hint: Note that the text segment of the executable is just the text segment for the first file followed by the one for the second file, and similarly for the data segment. So you'll probably find it useful to come up with a list of what's in each segment, similar to what you did in the first step, but with addresses rather than offsets.)
The information I want is this:
For an example of what I have in mind, look at the files in this directory. File 0readme.txt explains what's what3.
Do the following programming problems. You will end up with at least one code file per problem. Submit your program source (and any other needed files) by sending mail to bmassing@cs.trinity.edu with each file as an attachment. Please use a subject line that mentions the course and the assignment (e.g., ``csci 2321 hw 4'' or ``computer design hw 4''). You can develop your programs on any system that provides the needed functionality, but I will test them on one of the department's Linux machines, so you should probably make sure they work in that environment before turning them in.
Include the Honor Code pledge or just the word ``pledged'', plus at least one of the following about collaboration and help (as many as apply).4Text in italics is explanatory or something for you to fill in. For programming assignments, this should go in the body of the e-mail or in a plain-text file honor-code.txt (no word-processor files please).
Include a brief essay (a sentence or two is fine, though you can write as much as you like) telling me what about the assignment you found interesting, difficult, or otherwise noteworthy. For programming assignments, it should go in the body of the e-mail or in a plain-text file essay.txt (no word-processor files please).