Assembly Language: Class Project 2
CS 301 Project, Dr. Lawlor
From the syllabus:
PROJ: Two
sizable class projects--big programs written in, or relating to
assembly, with a short in-class presentation.
Each project is 10% of your course grade, so it should have some pretty good stuff! Conversely, the total end-to-end time for the project is only a few weeks, so keep it manageable!
Project Deliverables
November 2011
Su Mo Tu We Th Fr Sa
13 14 15 16 17 18 19 <- Topic due in class
20 21 22 23 24 25 26 <- (thanksgiving break)
27 28 29 30
December 2011
Su Mo Tu We Th Fr Sa
1 2 3 <- Rough draft due on blackboard
4 5 6 7 8 9 10 <- Presentation in class
11 12 13 14 15 16 17 <- Final draft due (finals week)
On December 2 I'd like your rough draft code, which should work and do at least something, but not necessarily do everything you want to do, or be fully polished or tuned.
The presentation is a
short, 5-minute presentation in class on December 9. Your
presentation should clearly describe WHO you are, WHAT you did, HOW you
did it, and WHY you chose to do it that way. Bring a laptop to
project your code, demo, slides, and/or figures, or email me your presentation materials the day before if you'd like to present from my laptop.
The final code should
be fully debugged, polished, tuned, commented, and include at least a
short README
explaining what
it is, and what its results mean. You'll be graded on a
combination of ambition, correctness, completeness, and
comments/style. Due Friday, October 16 (the day of the final exam).
Typical grade breakdown: project grade = 5% topic + 20% rough draft + 30% presentation + 45% final code
Possible Project Topics
Or, pick your own! As long as it's
assembly-related, it counts! You can write your code in bare assembly, or write
C++/Java/whatever using assembly concepts (table-driven execution,
bitwise operators, etc). Your code can run totally inside NetRun, or be a standalone
executable, but it should run somewhere.
- Extend your project 1 project: make it faster, more interesting,
more parameterizable, or run on a different language or machine.
- Write or modify a program to do "something useful" in assembly language. Useful things include:
- Interact with the user in classic CS 201 style.
- Doing anything interesting in assembly, like bit-scan forward.
- Swapping bytes from big-endian input, like HW5.5.
- Switch between user-level threads.
- Create a PC Boot Block,
which is actually just up to 512 bytes of 16-bit mode x86 machine code at the start of
a (usually emulated) disk, that the (usually emulated) CPU loads and
runs on startup. You boot block can do anything it wants to the
machine at that point--it's effectively a tiny operating system!
- Design a new CPU instruction set, and write a little CPU emulator to execute that instruction set. This is easier than it sounds!
- Take off from any homework problem you like, and do something interesting with it.
- Embrace and extend some assembly-related code from the net--but be sure to cite your sources,
so I can grade you on what you've added, not what you started
from.
- Write or modify a program to do something high-performance in assembly language.
- Do something interesting with SSE. Almost any code where
different floats do different things very
interesting under SSE.
- Do something interesting on the graphics card: render a new image, or even use my gpgpu library to do something non-image related.
- Tune and benchmark any existing program. No assembly code is needed!