CS611
Assembly Language Programming and Machine Organization
Fall 2004


Instructor: P. Hatcher
Office: Nesmith 310
Phone: 862-2678
E-mail: hatcher@unh.edu
Office Hours: MWF 9:00-10:00am, MWF 11:00-11:30am, or by appointment (send e-mail to request an appointment)

Teaching Assistant: Shilpa Kulkarni
Office: Nesmith 322
E-mail: sme5@cs.unh.edu
Office Hours: TuTh 1-3pm.

The prerequisite for this course is CS516.

The key goals for the course are to understand program and data representation, to become familiar with assembly language and machine language programming, to understand the impact on software of basic computer architecture concepts such as the memory hierarchy, and to study fundamental system software such as assemblers, linkers and debuggers.

An outline of the material covered by this course is given here.

Grading

The course requirements are to complete seven programming assignments, take a midterm exam, and take a final exam.

The programming assignments are (with tentative due dates):

  1. Convert Unicode to and from TUF-8: due Sept 12.

  2. Emulate IEEE double-precision floating-point addition: due Sept 26.

  3. Write an interpreter for vm611 programs: Oct 10.

  4. Perform just-in-time translation of vm611 programs for Intel IA-32 execution: due Oct 31.

  5. Implement a simple threads library: due Nov 14.

  6. Implement a simple file system: due Dec 1.

  7. Implement a memory allocator with a memory leak detector: due Dec 12.

The programming assignments must be done in C or Intel assembler.

Each programming assignment will be worth 100 points. Programming assignments may be handed in late at a penalty of 2 points for one day late, 5 points for two days late, 10 points for three days late, 20 points for four days late, and 40 points for five days late. No program may be turned in more than 5 days late. An assignment is not considered late unless turned in after 8am on the day after the due date.

The grading of programming assignments will be based primarily upon demonstrated correct functionality. That is, you will be awarded points for what your program actually does. Some test cases may be public but others will be hidden, so careful testing will be required.

Points will be deducted from your programming assignment grade if your work is not adequately documented and structured. You must follow the following guidelines:

In addition, lines should not exceed 80 characters when printed using a tabstop width of 8. It is best to not put tabs in your files. Have your editor automatically expand tabs into spaces. It is also best to use a small indentation amount, like 2.

If you have any questions about these rules for program layout, see me in advance, not after I turn your graded assignment back to you.

The midterm exam will be given during a normal class meeting, probably on Wednesday, October 13. A sample midterm is available as a PDF document on the CIS machines in ~cs611/public/sample-midterm.pdf.

The final exam will be comprehensive and will be given during finals week: Wednesday, December 15, 8-10am in Nesmith 329. A sample final exam is available as a PDF document on the CIS machines in ~cs611/public/sample-final.pdf.

Students receiving at least 65% of the course points are guaranteed at least a C-. Students receiving at least 75% of the course points are guaranteed at least a B-. Students receiving at least 85% of the course points are guaranteed at least an A-.

This course is designed to be a challenging one. The material can be low-level and confusing at times, but more importantly this course is designed to develop your skills at writing larger programs. Some students find it difficult to make the adjustment to writing slightly more complex programs and do not do well in this course. Here are the grade distributions for the past semesters when I have taught the course:

CS611 Grade History
Semester As Bs Cs Ds Fs
Fall 2003 5 4 6 3 6
Spring 2003 11 10 6 6 9
Fall 2002 5 7 6 1 12
Spring 2002 14 11 5 3 8
Fall 2001 3 1 0 1 1
Spring 2001 6 11 5 2 5
Fall 2000 8 2 2 0 2
Spring 1999 4 11 4 1 6
Fall 1998 2 7 4 1 4
Spring 1997 16 10 7 3 3
Spring 1996 1 6 3 4 10
Fall 1995 1 4 3 2 3
Spring 1995 7 15 11 5 13
Fall 1990 5 13 15 2 6
Fall 1988 6 9 8 1 6
Fall 1987 11 5 0 1 10
Total 105 126 85 36 104

Most often a student's failure in the course has very little to do with ability. Over the years I have made the following observations about students who fail and students who succeed in the course:

Succeed Fail
  • come to class
  • start thinking about assignments right away
  • ask questions in class
  • ask questions in office hours
  • ask questions via e-mail
  • follow class discussion
  • understand that programming is debugging
  • skip class
  • start assignments too late
  • afraid to ask questions
  • don't come to office hours
  • don't send me e-mail
  • don't know what is going on in class
  • think that programming is typing and praying
  • get caught cheating

Textbooks

There is no required textbook for this course.

On reserve in the Kingsbury library:

I do not think you need to purchase any of the above books. Access to the copies on reserve in the library should be sufficient. However, if you want to order your own copies of either of the books on reserve,I suggest Quantum Books or Amazon.com Books.

We will also use two manuals that I have downloaded from Intel's Developer Site:

Computer Accounts

The UNH CIS Linux server (turing.unh.edu) is the primary computing resource for this course. You should automatically be given an account on this machine. During the semester you may use any other machines that you have access to, but for grading purposes your programs must execute on a Intel IA-32 Linux machine.

Policy on Cheating

All students are expected to do their own work on the programming assignments. No collaboration is allowed, either with current or prior CS611 students, or anyone else. A general rule to follow is that you may discuss your programs with other students at the concept level but never at the coding level. If you are at all unclear about this general rule, don't discuss your programs with other students at all.

In addition, submitting programs that are based upon code retrieved from Internet sources is also explicitly forbidden and will be considered "cheating".

Because so much of your course grade is based upon the programming assignments, I will treat cases of cheating severely. If caught cheating on an assignment, you can expect to (at least) receive a failing grade for the course.

In addition, of course, collaboration is also not allowed on the midterm or final exams.


Last modified on September 3, 2004.

Comments and questions should be directed to hatcher@unh.edu