Assembly Language: Class Project 1
CS 301 Lecture, Dr. Lawlor
From the syllabus:
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 2010The 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.
Su Mo Tu We Th Fr Sa
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
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 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
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