\documentclass[12pt]{article}
\usepackage{fullpage}

\newcommand{\tm}{\mbox{\sc tm}}

\begin{document}

\title{Computer Science 371 \\
Systems I}

\author{Dr. Stephen Bloch \\
office 112 Alumn\ae\ Hall \\
phone 877-4483 \\
email \texttt{sbloch@boethius.adelphi.edu} \\
office hours: Monday, Wednesday, and \\ 
4:20-5:00 on Tuesday and Thursday. \\
Other times by appointment.}

\maketitle

\section{Subject Matter}
According to the course bulletin, this course covers computer
organization and architecture, including how computer operations are
implemented in hardware.  Also according to the course bulletin, CSC 174
(Assembly Language) is a prerequisite for the course.  However, CSC 174
hasn't been offered in the past several years, so this course will actually
cover assembly language, computer representation of data, and the
low-level mechanisms of branching and procedure calling, and only touch
briefly on how all this is implemented in hardware.  Systems II, next
semester, will then concentrate on hardware implementations.

This course should be useful for several types of students.
Those with an interest in designing computer hardware can use this
course as a basis for more advanced study;
those primarily interested in writing high-level computer software can 
use the knowledge of how low-level software and hardware interact
to make better-informed decisions about software design; and those
who just want to understand how a computer works can gain this
understanding.

I assume, in all three cases, that students have
a year or two of programming experience in a high-level language.
By the end of the semester, you should have an understanding of
assembler language (at least that for the MIPS machine
we'll study) and be able to write small programs and subroutines in
assembler language.  You should also understand how both programs and
the data on which they operate are represented inside a computer.

\pagebreak

\section{Textbook}
We'll use the textbook \emph{A Programmer's View of Computer
Architecture},
by Goodman and Miller,
for reading and homework assignments.  
We'll read at least ten chapters of the book by the end of the
semester; this amounts to about 20 pages per week.
\textbf{You are responsible for everything
in the reading assignments, whether or not I discuss it in a lecture.}

\section{Grading}
As I write this (a week before classes start), I envision five homework
assignments, each worth 10\% of the semester grade,
a midterm worth 20\%, and a final exam worth 30\%.
I may change this somewhat as the semester unfolds.

% These numeric grades will be converted to letter grades as follows:
% I'll draw a curve showing the distribution of numeric grades, and look
% for naturally-occurring ``clumps''.  For each clump, especially the
% top and bottom ones, I'll examine some exam and
% homework papers to decide what letter grade seems appropriate.  This
% method corrects for excessively hard or excessively easy assignments
% while not penalizing anybody for having genius classmates.

Exams must be taken at the scheduled time, unless arranged in advance
or prevented by a documented medical or family emergency.  If you have
three or more exams scheduled on the same date, or
a religious holiday that conflicts with an exam or assignment due date,
please notify me in writing within the first two
weeks of the semester in order to receive due consideration.
% (and I'd
% prefer it if you let me know earlier --- you should know within the
% first week of class when all your exams are).
Exams not taken without one of
the above excuses will be recorded with a grade of 0.

Homework and programming
assignments will be accepted late, with a penalty of 1/3 per 24 hours
or portion thereof after they're due.  An hour late is 33\% off, 25
hours late is 67\% off, and after 48 hours don't bother turning it in.
It's still a good idea to do as much of it as you can, however,
because I'll assume on the exams that you've done the homework.

Some of the homework assignments will require that you write programs in
assembly language.
Programs are not abstract works of art,
they are supposed to run and solve real problems.  So if I get a program
that doesn't assemble, or a program that has little or nothing to do with
the problem I assigned, I will give it a zero, no matter how much
time you put into it.  Don't bother turning in a program you haven't
tested yourself.

\section{Ethics}
Most of the assignments in this class are to be done individually.  You
may \emph{discuss general approaches} to a problem with classmates, but
you \emph{may not copy} large pieces of programs or homework solutions.
If you do, \emph{all} the students involved will be penalized.

All work on an exam must be entirely the work of the one
person whose name is at the top of the page.  If I have evidence that
one student copied from another on an exam, \emph{both} students will be
penalized; see above.

\section{Schedule}
This class meets every Tuesday and Thursday from 3:05 to
4:20 PM, except on University holidays or if I cancel class.
%
% \subsection{Floating Events}
All dates in the following schedule are tentative, except those fixed
by the University; if some topic listed here as taking one lecture in
fact takes two lectures to cover adequately, or {\em vice versa},
the schedule will shift.

% In no case will an assignment be due earlier than indicated in the
% following schedule, but some may be due later; this will be announced
% in class a reasonable time in advance.  I'll try to keep an updated
% version of this schedule available online.  

I expect you to have read the specified chapters in the textbook
\emph{before} the lecture that deals with that topic; this way I can
concentrate my time on answering questions and clarifying subtle or
difficult points in the textbook, rather than on reading the textbook
to you, which will bore both of us.  \textbf{Please read the textbook!}

% \pagebreak

\begin{tabbing}
{\bf Date(s) \hskip10pt} \=
{\bf Assignment \hskip10pt} \=
{\bf Reading \hskip10pt} \=
{\bf Subject} \kill
{\bf Date(s)} \>
{\hskip-10pt \bf Assignment} \>
{\bf Reading} \>
{\hskip40pt \bf Lecture Subject} \\
2 Sept \> \> \> Administrivia, introduction, SPIMSAL \\
4 Sept \> \> chap. 1 \> Levels of abstraction, instruction execution \\
9 Sept \> HW1 \> 2.1--2.3 \> Declarations and arithmetic \\
11 Sept \> \> 2.4 \> Control flow in assembly language \\
12 Sept \> \> \> Last day to add courses \\
16 Sept \> \> 2.5--2.6 \> I/O and program example, using SPIMSAL \\
18 Sept \> \> 2.7--2.8 \> Procedures and another program example \\
23 Sept \> HW1 due \> chap. 3 \> Representing numbers in binary \\
25 Sept \> HW2 \> 4.1--4.2 \> Representing integers on a computer \\
26 Sept \> \> \> Last day to drop courses \\
30 Sept \> \> 4.3--4.4 \> Representing characters and reals on a computer \\
2 Oct \> \> \> Rosh Hashanah, no classes \\
7 Oct \> HW2 due \> 5.1--5.3 \> Boolean operations, integer addition and subtraction \\
9 Oct \> \> 5.4 \> Integer multiplication \\
14 Oct \> HW3 \> 5.5 \> Integer division \\
16 Oct \> \> \> Catch up and review for midterm \\
21 Oct \> \> \> Midterm exam \\
23 Oct \> \> \> Discuss midterm exam \\
28 Oct \> \> 6.1--6.3 \> Floating-point addition, subtraction, multiplication \\
30 Oct \> \> 6.4--6.6 \> Floating-point division, rounding, overflow,
\emph{etc.} \\
31 Oct \> \> \> Last day to withdraw from classes \\
4 Nov \> HW3 due \> 7.1--7.2 \> Memory and arrays \\
6 Nov \> HW4 \> 7.3--7.4 \> Implementing data structures in assembly language \\
11 Nov \> \> 8.1--8.2 \> MAL, registers, and addressing \\
13 Nov \> \> 8.3--8.4 \> MAL, registers, and addressing \\
18 Nov \> \> 9.1--9.3 \> Procedure calling in assembly language \\
20 Nov \> HW4 due \> 9.4--9.5 \> Parameters and local variables \\
25 Nov \> HW5 \> 9.6--9.7 \> Register usage and example \\
27 Nov \> \> \> Thanksgiving --- no classes \\
2 Dec \> \> 10 \> What an assembler does \\
4 Dec \> \> 11? 12? \> Interrupts, exceptions, and I/O \\
9 Dec \> \> 13? 14? \> Catch up and review for final \\
11 Dec \> HW5 due \> 13? 14? \> Catch up and review for final \\
18 Dec \> \> \> 3:30--5:30 PM, Final Exam
\end{tabbing}

\end{document}

Last year's plan:
5 Sept \> \> \> Administrivia, introduction, SPIMSAL \\
10 Sept \> \> chap. 1 \> Levels of abstraction, instruction execution \\
12 Sept \> HW1 \> 2.1--2.3 \> Declarations and arithmetic \\
17 Sept \> \> 2.4 \> Control flow in assembly language \\
19 Sept \> \> 2.5--2.6 \> I/O and program example, using SPIMSAL \\
20 Sept \> \> \> Last day to add courses \\
24 Sept \> \> 2.7--2.8 \> Procedures and another program example \\
26 Sept \> HW1 due \> chap. 3 \> Representing numbers in binary \\
1 Oct \> HW2 \> 4.1--4.2 \> Representing integers on a computer \\
3 Oct \> \> 4.3--4.4 \> Representing characters and reals on a computer \\
4 Oct \> \> \> Last day to drop courses \\
8 Oct \> \> 5.1--5.3 \> Boolean operations, integer addition and subtraction \\
10 Oct \> HW2 due \> 5.4--5.5 \> Integer multiplication and division \\
15 Oct \> \> 6.1--6.3 \> Floating-point addition, subtraction, multiplication \\
17 Oct \> HW3 \> 6.4--6.6 \> Floating-point division, rounding, overflow,
\emph{etc.} \\
22 Oct \> \> 7.1--7.2 \> Memory and arrays \\
24 Oct \> \> 7.3--7.4 \> Implementing data structures in assembly language \\
29 Oct \> \> \> Catch up and review for midterm \\
31 Oct \> \> \> Midterm exam \\
5 Nov \> \> 8.1--8.2 \> Discuss midterm \\
7 Nov \> HW3 due \> 8.3--8.4 \> MAL, registers, and addressing \\
8 Nov \> \> \> Last day to withdraw from classes \\
12 Nov \> HW4 \> 9.1--9.3 \> Procedure calling in assembly language \\
14 Nov \> \> 9.4--9.5 \> Parameters and local variables \\
19 Nov \> \> 9.6--9.7 \> Register usage and example \\
21 Nov \> \> 10 \> What an assembler does \\
26 Nov \> HW4 due \> 11 \> I/O in assembly language \\
28 Nov \> \> \> Thanksgiving --- no classes \\
3 Dec \> HW5 \> 12 \> Interrupts, exceptions, and I/O \\
5 Dec \> \> 13 \> Measuring and improving computer speed \\
10 Dec \> \> 14.1--14.3 \> Different approaches to computer architecture \\
12 Dec \> HW5 due \> 14.4--14.6 \> Catch up and review for final \\
19 Dec \> \> \> 3:30--5:30 PM, Final Exam % \\

Last year's actuality:
10 Sept   chap. 1  Levels of abstraction, instruction execution 
12 Sept  HW1  2.1--2.3  Declarations and arithmetic 
17 Sept   2.4  Control flow in assembly language 
19 Sept   2.5--2.6  I/O and program example, using SPIMSAL 
20 Sept    Last day to add courses 
24 Sept   2.7--2.8  Procedures and another program example 
26 Sept  HW1 due  chap. 3  Representing numbers in binary 
1 Oct  HW2 
4.1--4.2  Representing integers on a computer 
3 Oct  
4.1--4.2  Representing integers on a computer 
4 Oct  
 Last day to drop courses 
8 Oct  
4.3--4.4  Representing characters and reals on a computer 
10 Oct  HW2 due 
5.1--5.3  Boolean operations, integer addition and subtraction 
15 Oct  
5.4--5.5  Integer multiplication 
17 Oct  
 Integer multiplication, cont'd. 
22 Oct  HW3 
 Integer division 
24 Oct  
6.1--6.3  Floating-point addition, subtraction, multiplication 
29 Oct  
6.4--6.6  Floating-point division, rounding, overflow, etc. 
31 Oct  
7.1--7.2  Memory and arrays 
5 Nov  
7.3--7.4  Implementing data structures in assembly language 
7 Nov  
 Midterm exam 
8 Nov  
 Last day to withdraw from classes 
12 Nov  
 Discuss midterm; arrays,
continued 
14 Nov  
7.3--7.4  Implementing data structures in assembly language 
19 Nov  HW3 due; HW4 
 Still implementing data structures in assembly language
21 Nov  
8.1--8.4  MAL, registers, and addressing 
26 Nov  
8.1--8.4  MAL, registers, and addressing 
28 Nov    Thanksgiving --- no classes 
3 Dec  
9.1--9.3  Procedure calling in assembly language 
5 Dec  
9.4--9.5  Parameters and local variables 
10 Dec  HW4 due 
9.6--9.7  Register usage and example 
12 Dec  
10  What an assembler does; catch up and
review 
19 Dec   
3:30--5:30 PM, Final Exam 

			Homework assignments

HW1: problems from chaps. 1,2: 1.8,1.11,1.12,1.14,2.3,2.10,2.12
HW2: problems from chaps. 3,4: 3.8,3.10,3.12,4.5,4.7,4.9
HW3: problems from chaps. 5,6: 5.2,5.3,5.4,5.6,5.13,sign of division?,
HW4: problems from chaps. 7,8,9
HW5: problems from chaps. 10,11,12,13
