Labs 11 and 12: Your Own Mini-Project
This will be the last lab assignment. You are asked to propose your own mini-project, and complete it in about three weeks. You will demonstrate your working program on Friday, November 16 (C version), and during the week of November 26-30 (MIPS version). The demonstrations will take place during lab hours, and during additional times arranged for this purpose.
Here are a couple of examples to help you in proposing your own mini-project:
- Example 1: Design an RPN (reverse Polish notation) calculator. It must handle at the following operations: add, subtract, multiply and divide over integers. It should also have 5-10 memory locations for storing and recalling intermediate results (e.g., 5 3 - STORE 1 8 4 - RECALL 1 / should give you 2). You may shorten STORE to S, and RECALL to R, and make other simplifying assumptions, but your program must be able to handle multi-digit integers.
- Example 2: Implement a program that performs some interesting floating-point number crunching.
- Example 3: Implement a program that solves the Towers of Hanoi problem. Be sure the number of disks can be varied during the demo, and that the output is easy to understand.
- Example 4: Implement a program with sorting and searching capabilities beyond the basic sort of Labs 4 and 5.
- Example 5: Design a "malware" program (MIPS only, not C) which exploits buffer overflow vulnerability in your code and runs some "bad" code. You should sign up for this only if you are very comfortable with stack manipulation, and with machine coding (i.e., bit-level coding) of MIPS instructions. I will try to help you.
The above are just a few examples. You are encouraged to propose any other interesting problem you would like to solve. You will likely have a lot more fun with the project if you come up with your own idea. But, be sure that it can be completed within the time-frame! The work involved should be approximately equal to that of two lab assignments. As a general guide, in order to make your project be of adequate complexity/challenge, please try to incorporate at least one (or more) of the following:
- Recursion
- Data structures (e.g., stacks, queues, structures, multidimensional arrays, etc.)
- Fancy I/O (e.g., file I/O, or nicely formatted text output, ASCII art, etc.)
- Complex arithmetic (e.g., floating-point, matrix operations, etc.)
Your project will be graded on (i) adequacy of difficulty/challenge; and (ii) quality of implementation. You must first implement your mini-project as a C program, and only then in MIPS assembly. (The malware project is an exception.)
Timeline:
- November 7, 1pm: Submit a brief (1-2 paras only) proposal on what you intend to implement by beginning of class on Wednesday, November 7. Include enough detail so we can judge the level of difficulty and give you feedback.
- November 16, 1pm Submit your complete working C implementation of your project. You will demonstrate your C implementation during the lab hour on November 16; given the class size, additional times may be arranged for this purpose.
- November 30, 1pm Submit your complete working MIPS implementation of your project latest by this date/time. Note that this the deadline for submitting your project. You are encouraged to submit it at any time prior to this deadline. You may demonstrate your MIPS implementation during the lab hour on Nov. 30; however, that is the last opportunity for a demo. You are encouraged to arrange a time earlier than that to show us your working MIPS implementation.
What to submit: We will update the website with submission instructions and a schedule for demonstrations as we get closer to the deadline.
2 November 2012, Montek Singh, montek@cs.unc.edu