Assembly Language: Class Project 1
CS 301 Lecture, Dr. Lawlor
From the syllabus:
PROJ: A
sizable class project--one big program written in or relating to
assembly.
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 2009
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 <- Describe your topic in-class
25 26 27 28 29 30 31 <- Turn in rough draft code
November 2009
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14 <- Turn in final draft code
The project topic
(see ideas below) should be easy to describe in 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.
Project Topic Ideas
Or, pick your own! As long as it's
assembly-related, it counts! You're also welcome to begin with a
homework problem from this class, some program you wrote earlier, or
even some code you found on the net--but be sure to cite your sources,
so I can grade you on what you've added, not what you started
from. 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.4.
- 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 any existing program, and speed it up using the techniques
we will be describing in class (timing and profiling, strength
reduction, cache-friendly transformations, SIMD).