Course Description

This course introduces the student to programming and computing systems below that of the high-level language. Students will become proficient a programming in C and in assembly language programming. Students will examine the x86 instruction set to reveal how programs are executed, how data is stored and manipulated and how programs are compiled and linked. Students will also examine the basic architecture of the computer hardware.

Programming projects for this course will use the C programming language and x86 assembly language.

Prerequisites for this course are CMSC 202 and CMSC 203.


By the end of this course, the student will be able to


Computer Systems : A Programmer's Perspective by Randal E. Bryant and David R. O'Hallaron
Prentice Hall Publishing, 2003, ISBN: 0-13-034074-X

Recommended Books

The C Programming Language (2ed) by Brian W. Kernighan and Dennis M. Ritchie
Prentice Hall Publishing, 1998, ISBN: 0-13-11036208 (Paperback), 0-13-110370-9 (hardback)
This is the C programmer's "bible" written by the inventors of the C language.
Advanced Programming in the Unix Environment (2ed) by W. Richard Stevens and Stephen A. Rago
Addison-Wesley, 2008, ISBN-10:0321525949 (paperback), ISBN-13: 978-0321525949 (hardback)
This is an update of the original Stevens book published in 1993. This is definitive reference book for the serious Unix programmer.

Lectures and Readings

You are expected to attend all lectures for this course.

You are responsible for all material covered in class even if not found in the class presentation materials available on-line. If you should happen to miss a lecture, you are responsible for getting any missed notes or announcements from a classmate.


The schedule includes lecture topics, lecture notes, recommended reading, suggested practice problems, midterm and final exam dates, and project due dates.

Grading Criteria

Your grade in this course is based on projects, lab assignments and exams, which are discussed in more detail below.
      3 Exams (15% each)	=  45%
      6 Projects		=  55%

Your semester average will be calculated according to the following formula:

	Average = (sum of your exam scores) / (total possible exam points ) * 45
           + (sum of your project scores) / (total possble project points) * 55

Letter grades will follow the standard scale:

			100 >= A >= 90
			 90 >  B >= 80
			 80 >  C >= 70
			 70 >  D >= 60
			 60 >  F
Your grade is based on timely work accomplished during the semester; incomplete grades will only be given for medical illness or other such dire circumstances (almost never).

All exam and project grades will be posted on the course Blackboard site

Lab Office Hours

TAs from CMSC 313 and other courses will hold drop-in office hours in ITE 240. During these times TAs will be available for assistance on projects or just to answer your questions. These labs are available to all CMSC 313 students and operate on a first-come, first-serve basis. Check the open lab schedule for hours of operation.

This lab is open to all students enrolled in any course where programming is taught or programming projects are required such as CMSC 201, 202, 313, 341, 421, and possibly others. While most TAs can assist you with C questions, only the CMSC 313 TAs will have specific knowledge about your programming assignments and x86 assembly language. We recommend that you plan to use ITE 240 when CMSC 313 TAs are scheduled. Note that instructional activties have priority and may cause the cancellation of some office hours.

Students using the lab must observe all the rules below:

  1. Observe all the University and Departmental policies regarding the use of the University's and the Department's computer and laboratory facilities.
  2. No Food or Drinks Allowed in the Lab. Absolutely! Never!
  3. Do not log in to multiple machines, especially when there are students waiting for access to the lab.
  4. Be respectful of others working in the lab. DO NOT create disturbances (e.g. don't be noisy, don't play audible music, etc).
  5. CMSC 421 related activities have priority. This is because they have special requirements that limit them to this lab, while there are designated OIT Labs across campus that provide general computer access.
  6. Observe the TA hours in the lab. Students are only allowed to work during the TA lab hours. Sign in with the TA when you arrive. You must leave the lab by when the TA goes off duty - no excuses, no exceptions!
  7. Report offenders of lab rules to the instructional staff.
  8. Report any suspicious activity to the instructional staff or the Campus police, as appropriate.
  9. The lab is provided to you by the University for your benefit. Take good care of it! Do not abuse it!
  10. Repeated offenses might result in shutting down the laboratory for everybody.
Failure to observe all the lab rules will result in suspending your lab access, as well as further disciplinary actions as determined by Departmental and University policy.


The critical programming skills cannot be learned simply by attending the lectures. You should budget enough time to work on the projects as well. The due date and time for each assignment will be include with the project description. Please see the late project submission policy.

To be assigned a grade a project much show substantial effort. Projects which do not show a substantial effort (at the discretion of the grader) will recieve a score of 0.

There will be six graded projects totaling 55% of your final grade.

Network and computer failures at UMBC are a fact of life. They are out of your control and out of our control. However, they are not an excuse for a project to be submitted late, nor are they a reason for project deadlines to be extended, even if the outage occurs on the due date. Plan accordingly. Waiting to submit your project until 5 minutes before your project is due is a recipe for disaster. In the event of network outages or computer failures you are still responsible for submitting your projects on time. There are labs on campus even if your dialup or ResNet connections are down. Also, it is your responsibility to take care of any problems with your account, such as quota overages, which interfere with your ability to complete and submit projects for the course. Project extensions will not be given for such problems.


There will be three (3) exams -- two midterm exams and a final exam. The midterm exams will be given in class. A common final exam will be given to all CMSC 313 students at the same time (see the course schedule for the time and place of your final). Make-ups for exams are given under only the most dire circumstances (such as hospitalization).

A picture ID is required to take/hand-in an exam.

Course BlackBoard

The course blackboard for CMSC 313 is available to all students in all sections. Blackboard will be used to post student grades and to support course discussion boards. Discussion boards will be created for general questions about course material, C, assembly language, and for general questions. A disscussion board will be created for each project in this course.

If you have difficulty accessing the course blackboard site, you can "self enroll" as a student in the course. To enroll for the course click on the courses tab in the Blackboard web site, and then select the Computer Science hyperlink under the Course Catalog section. Then select the enroll button for the current semester's course. Refer to this link for more information. If you're still having difficulty, email Mr. Frey. Be sure to include your UMBC user name.

Academic Conduct Policies

By enrolling in this course, each student assumes the responsibilities of an active participant in UMBC's scholarly community in which everyone's academic work and behavior are held to the highest standards of honesty. Cheating, fabrication, plagiarism, and helping others to commit these acts are all forms of academic dishonesty, and they are wrong. Academic misconduct could result in disciplinary action that may include, but is not limited to, suspension or dismissal. To read the full Student Academic Conduct Policy, consult the UMBC Student Handbook, the Faculty Handbook, or the UMBC Policies section of the UMBC Directory. The UMBC Student Academic Conduct Policy is also online.

Your project will be checked for similarities with all other student projects. If your project is found to be "substantially similar" to that of another student, or if it is determined that someone else wrote your project for you, then at a minimum you and the other student (if applicable) will receive a grade of zero for that project and 10 point deduction (one letter grade) in your semester average. Furthermore, all parties concerned will have their prior projects re-checked for cheating. Any second incident will result in a grade of 'F' for the semester.

Also, checking for cheating may occur at any time during the semester. Therefore, if you cheated on Project 1, you may be confronted about that at any time; receiving a grade for a project does not mean you are "in the clear".

Any act of dishonesty WILL BE reported to the University's Academic Conduct Committee for further action, which may include, but is not limited to, academic suspension or dismissal from the university.

Email Policies

Email is great -- much better than voice mail. If you need to contact your instructor about this class outside of lecture and office hours, email is much better than the telephone. You should, however, observe the following etiquette:

In addition, due to the volume of student email during each semester, please note the following: