Assembly Language: Class Project 1
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
October 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20 <- midterm exam
21 22 23 24 25 26 27 <- rough draft due
28 29 30 31 <- presentations & final draft
On October 24 I'd like your rough draft code,
which should work and do most of what you want, but not necessarily do
everything you want to do, or be fully polished or tuned.
The presentation is a
very short, 3-minute presentation in class on October 31. 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. Style and clean code count! Due Wednesday, October 31.
Typical grade breakdown: project grade = 30% rough draft + 20% presentation + 50% final code
Example Project Topics
- Write or modify a program to do "something useful" in assembly language. Useful things include:
- Interact with the user in classic CS 201 style. This means lots of string processing, like gets and puts.
- Doing anything interesting in assembly, like the bit rotate or bit-scan forward instructions. Add a nice callable interface.
- 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. Your boot block can do anything it wants to the
machine at that point--it's effectively a tiny operating system!
- Take off from any homework problem you like, and do something interesting with it.
- Start with any interesting C++ program. Disassemble it. Figure out and add comments to each line of the disassembly--every time I do this, I learn things I didn't know I didn't know!
- Design a new CPU instruction set, and write a little CPU emulator to execute that instruction set. This is easier than it sounds!
- 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.
Or pick your own topic!