Syllabus

Course Description

This course introduces the student to the low-level abstraction of a computer system from a programmer's point of view, with an emphasis on low-level programming. Topics include data representation, assembly language programming, C programming, the process of compiling and linking, low-level memory management, exceptional control flow, and basic processor architecture.

Prerequisites

You must have completed CMSC 202 and CMSC 203 with a grade of C or better. Additional experience from CMSC341 Data Structures would also be helpful. You must also be familiar with and be able to work with truth tables, Boolean algebra and modular arithmetic.

You should have a strong understanding of programming concepts and data structures. Experience with high-level programming languages (C++, Python) is required.

Objectives

The purpose of this course is to introduce computer science majors to computing systems below that of a high-level programming language. The material covered can be broadly separated into the categories of assembly language programming, C programming and digital logic. These topics prepare students to take CMSC411 Computer Architecture and CMSC421 Operating Systems which are required courses for the computer science major.

Required Textbook

Lectures and Readings

You are expected to attend all lectures for this course. Although all sections will cover the same general topics, you are responsible for the specifics given during your section.

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

You are required to prepare for each class by having read all of the assigned materials beforehand. Even though it sounds childish, the professor is not above giving a pop quiz if he has started to feel depressed about the level of preparedness among the students.

Schedule

The online schedule includes lecture topics/notes, reading assignments, midterm and final exam dates, and homework and project due dates. Except for the final exam date, the remainder of the timeline should be considered somewhat fluid in order to allow us to adapt to any unanticipated events. The specific dates will become much more firm as we get closer to the relevant time period.

Grading

Your grade in this course is based on exams, homework assignments, and projects, as follows:

ItemWeight
Midterm Exam20%
Comprehensive Final Exam25%
5 Homework Assignments15%
8 Projects40%

However, if some homework or programming assignments are canceled and not made up, the proportion of your grade from homework, projects and exams will remain the same. For example, if a programming assignment is canceled, then each programming assignment would be worth 5.714% (instead of 5%). That keeps programming assignments at 40% of your final grade.

Your final letter grade is based on the standard formula:

0 ≤ F < 60,    60 ≤ D < 70,    70 ≤ C < 80,    80 ≤ B < 90,    90 ≤ A ≤ 100

Depending upon the final distribution of grades in the class, there may be a curve in your favor, but under no circumstances will grades be curved downward.

Your grade is given for work done during the semester; incomplete grades will only be given for medical illness or other dire circumstances.

Due Dates

There will be a homework assignment or programming assignment due every week of class (except the week after Spring Break). Written homework assignments are due at the beginning of lecture. Programming assignments and logic simulations are submitted online and are due at 11:59pm of the due date.

Late Assignments

Assignments turned in one day late (either submitted online or in person) will incur a 5% penalty. Assignments turned in two days late will be penalized 10%. Those three days late, 15%. For example, for a programming project due on Tuesday at 11:59pm:

Submitted: Penalty:
Tuesday 11:59pm 0%
Wednesday 11:59pm 5%
Thursday 11:59pm 10%
Friday 11:59pm 15%
after Saturday 12:01am 100%
Late assignments will not be accepted after 3 days. However, each student may submit one assignment (of any kind) up to one week late without penalty using his/her one time late pass.

Project grades will be posted on Blackboard. The exams will be returned to you in class.

Project Compilation

All projects must compile and run on UMBC’s Linux system using the nasm assembler or gcc compiler, and run under GL’s Linux OS. To ensure you are accessing Linux, log on to linux.gl.umbc.edu. Do not develop your projects on other machines (e.g. irix.gl.umbc.edu, solaris.gl.umbc.edu). Different compilers may be installed on the two systems, and what compiles on one may not compile on the other. See the Program Compilation section of the Projects page for more details.

Exams

There will be two (2) exams — a midterm and a comprehensive final exam. Exams during the semester must be taken with your lecture section. Make-ups for exams are given under only the most dire circumstances (such as hospitalization).

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

Course BlackBoard, and Piazza

In addition to the course web pages, which will be the primary channel for disseminating information and course materials, Blackboard is available for all CMSC 313 students in all sections. Blackboard will be used to post student lab grades. We will be using the Piazza system to support course discussion forums. Discussion forums will be created for general questions about course material, C++, and for general questions about programming and tools. A discussion forum will also be created for each project in this course.

N.B.: Postings on the Piazza discussion forums are to be limited to specific technical and logistical discussions about the coursework; you may gripe about how unfair the workload is, discuss the personal habits of fellow students or the instructors, etc. on your own Facebook page or other personal resource, but we will monitor the Piazza forums to keep the signal-to-noise ratio at an acceptably high level.

If you have difficulty accessing the CMSC 313 Blackboard site or your Piazza account, e-mail your instructor.

Academic Conduct Policies

Read this section carefully! It describes what constitutes cheating for this course. If you have questions, ask the instructor. Ignorance will not be accepted as an excuse after the fact.

You are allowed to discuss the homework assignments with other students. However, circuit simulation exercises and programming projects must be completed by individual effort. (See the Academic Integrity Policy.) Furthermore, you must write up your homework independently. This means you should only have the textbooks and your own notes in front of you when you write up your homework --- not your friend's notes, your friend's homework or other reference material. You should not have a copy of someone else's homework or project under any circumstance. For example, you should not let someone turn in your homework.

When you submit your homework and programming assignments, you are stating that the work was created by your own individual effort.

Receiving help from this class's instructor, teaching assistants or from the Computer Science Help Center does not violate this academic integrity policy. You may also receive help from other sources. However, this help must be limited to:

The following is a non-exhaustive list of actions that clearly violate this academic integrity policy:

This policy recognizes that students can learn productively from many sources including from other students in the class. Thus, this policy allows small amounts of help but prohibits outright copying. Although, this leaves a gray area between "small amounts of help" and "outright copying", it is better that we live with some ambiguity than to have a clear-cut policy that deprives the students of productive learning opportunities. Students who have doubts about the propriety of an activity should consult the instructor.

Students who violate this academic integrity policy will receive a grade of 0 for that assignment. A second violation will also result in a reduction of one full letter grade in the student's final course grade.

In the case where one student copies the program of another student, both students are considered to have violated this policy. Here, copying includes not just programs that are verbatim copies, but also programs that are substantially similar and could not have been produced independently. Furthermore, all parties concerned will have their prior homework and programs checked. Violations of this policy may be reported to the University's Academic Conduct Committee for further action. Egregious cases of cheating will be written up as a "more serious" infraction. In this case, you will not be allowed to drop the course. Also, a "more serious" infraction would appear as a permanent part of your student record and would be seen by potential employers when they ask for an official copy of your transcript.

The UMBC Undergraduate Student Academic Conduct Policy is available at: http://www.umbc.edu/undergrad_ed/ai/documents/ACC2011.pdf