Topic
Assignment Instructions
The topic for the term project this semester is to develop a mini-disassembler for MIPS-32 ISA. Note that this is an extension to homework 3.
Optional: you can work with another student in the class on this term project. If you work with another student EACH OF YOU must submit a ZIP le because some contents will be di erent, see the submission requirements below.
The program prompts the user for a text le containing MIPS-32 instructions in hexadecimal, i.e. a string of 8 characters. An example of the input le is shown below:
24020004
3c011001
34240000
0000000c
24020005
0000000c
00022021
If the le does not exist the program displays an error message and prompts the user to input again.
If the le exists, the program reads the le and dis-assembles each instruction into a MIPS-32 assembly language statement (refer to session 03 for the composition of a MIPS-32 assembly language statement), displays the statements on the terminal AND writes them to a le named ‘output.asm’. The output should be one line for each statement.
Submission Requirements:
At the end of the semester, EACH STUDENT must submit a ZIP le containing 1. A project report (in Word format) covering
a) a description of the program,
b) the challenges that you (and your partner, if you work with another student) had and how did you overcome them, c) what you have learned by doing the project,
d) a discussion of algorithms and techniques used in the program,
e) If you work with another student, work done by each of you,
f) any suggestions you may have (optional).
2. A short video clip demonstrating the program in action. (If the video is too big you can post it on a website,
e.g. youTube, and submit the link). The video should have audio narration explaining a test run of your program. You must show the content of the input le AND the ‘output.asm’ le after a successfully execution of your program.
3. All MIPS assembly language modules that are needed to run your program.
4. A user manual on how to run and how to use the program.
5. The input le that was used in the video and the corresponding ‘output.asm’ le.
Minimum requirements while implementing the mini-disassembler:
1. The program MUST support the following instruction categories: – Data transfer: lw, sw
– Integer arithmetic and logical: add, sub, mul, div, addi, srl, slr, and, or, nor, slt
– Branching: bne, beq,
– Jumping: j, jal, jr
2. If an input string does not have a valid opcode, the program prints out “ERROR: unrecognized opcode” and the input string on the same line.
3. For branching instruction the distant (i.e. number of instructions from PC to branching destination) is used as label. If the branching is backward a negative number should be used, e.g. bne 3, beq -6.
4. For jumping instructions the 32-bit address of jumping destination in hexadecimal should be used as the label, e.g. j 0040312C. Assumption: the text segment starts from address 0x00400000.
5. Register numbers should be in decimal and start with ‘$’, e.g. $15
Extra credits:
Extra credits will be given if extra features of the disassembler were implemented, e.g. branching and jumping labels are in text instead of number (examples: beq Next, jal factorial), generating a sound when an error is encountered, including the line number of an erroneous statement, etc…
Please document these extra credit features in your report and explain well to unlock these extra credits. Feel free to contact the grader or the instructor if more information is needed.
Happy coding!