Assembly Language: Class Project 1
CS 301 Lecture, 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 three weeks, so keep it manageable! Here's the schedule:
October 2010
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 21 22 23
24 25 26 27 28 29 30 <- Describe your topic in-class
November 2010
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 <- Rough draft code due
7 8 9 10 11 12 13 <- Final draft due, presentations
14 15 16 17 18 19 20
21 22 23 24 25 26 27 <- Thanksgiving
The project topic
(see ideas below) should be easy to describe in one or two sentences.
You'll say those sentences in class, partly so that I hear them, and
partly so that other people in class that are interested in the same
thing have a chance to join your group. Group work is optional,
but not required for this project.
The rough draft code should work, but not necessarily do everything you want, or be polished or tuned.
The final code
should be fully debugged, tuned, commented, and include a short README
explaining what
it is, and what its results mean. You'll be graded on a
combination of ambition, correctness, and comments/style. You'll
also give a *very* short (literally *two* minute) in-class presentation
of your results on November 12.
Project Topic Ideas
Or, pick your own! As long as it's
assembly-related, it counts! Your code can run totally inside NetRun, or be a standalone
executable, but it should run somewhere.
- 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.