Tuesday and Thursday: 1515-1700 and 1915-2000Note: I generally answer all email within 24 hours (except perhaps on weekends). If you have short, specific questions, email is your best bet. For more general issues, it is best to come to my office hours as listed above. I always welcome questions and comments of any kind at any time. If you are having trouble with any part of the course, the best approach is to ask many questions! While I sometimes must limit questions during class time, I always try to answer all questions, either in or out of class.
Also by appointment
Catalog Description: Instruction sets, assembly language and assemblers, linkers and loaders, data representation and manipulation, interrupts, pointers, function calls, and argument passing.
Prerequisite:
CS 46B (with a grade of "C-" or better)
Students may also take this course concurrently with CS 46B. I will enforce the prerequisite by looking at your transcripts; if I cannot verify that you have passed CS 46B (or are currently taking it), then I will ask you for proof in the form of a Course Equivalency Form, or other acceptable documentation. If you cannot produce documentation satisfactory to me, then I will drop you from the course.Text: Bryant and O'Hallaron, Computer Systems: A Programmer's Perspective, Prentice Hall, 2003.
Course Description:
This is a course about what goes on "under the hood" in a computer when
a program is compiled and executed. It includes a very brief introduction to the
C language, which is a great language to use to study the details of
machines, since it allows direct access to memory, including running
code. The course will also teach you the basics of programming in an
assembly language, how to understand the code output by a compiler
(such as a C compiler), basic data representations, memory layout, and
the details of
linking and loading.
Text Coverage:
I plan to cover most of six chapters from the text: 1-4, 7, 8.
If time remains, I will add a
few sections from one of the skipped chapters. I have not
specified an extra book for the C language.
However, if you want to buy a book on the C language, I recommend
getting Kernighan
and Ritchie, The C Programming
Language, Prentice Hall, 1988 (sometimes referred to
as the "white book," or "K&R"). While this book is almost 20
years old and does not include the revisions made to the language in
the 1990s, it is still the best concise introduction to the language,
from the people who invented it back in 1971.
Detailed coverage of the course, including the C introduction not in
the text proper, is as
follows (unless specified otherwise, all sections in each chapter will
be covered):
| Chapter 1: | A Tour of Computer Systems |
| (handouts): |
Introduction to C |
| Chapter 2: | Representing and Manipulating Information |
| Chapter 3: | Machine-level Representation of Programs |
| Chapter 4: | Processor Architecture (Sections 4.1 - 4.4 only) |
| Chapter 7: | Linking |
| Chapter 8: | Exceptional Control Flow (Sections 8.1 & 8.2 only) |
| Chapter 5: |
Optimizing Program Performance
(selected sections as time permits) |
Compiler/computer use. Although much of what we will study
will be system-independent, the assembly language and architecture that
we will use for homework and tests is the Intel x86 architecture of the
PC. In particular, the assembler we will use is the Gnu Assembler for the
x86, and the corresponding C compiler that we will use is the Gnu C compiler for the x86
(the C
compiler automatically comes with the assembler). In principle, these
should work seamlessly for either PC versions of Linux or Microsoft
Windows. Note, however, that you cannot use a Mac
for this course. The Dept. has a PC computer lab (with gcc
installed, I believe) available for students (WSQ 1), but you will need
to either sign up for CS 110L or pay a fee to the Dept. to have access to
these computers. The Dept. also has a few laptops for free short-term
loan to CS majors. There will be no requirement, however, that you
bring laptops to this class. For use at home, I strongly recommend
installing the djgpp
version of Gnu C. An alternative is Cygwin,
which is what the Dept. PCs have, and which provides Unix-like utilities in Windows.
There will two mid-term exams, on or about the following dates (subject to change with fair notice):
There will also be approximately seven homework assignments, to be handed in every two weeks or so. Some of these will be "paper and pencil" assignments, to be handed in the traditional way, others will be code to be handed in by email. Details for each assignment will appear in the class handouts).
There will be a mandatory final exam, which will be
cumulative
(i.e. it will cover all material in the course). The final exam for
each section is as follows:
Academic Integrity:
Your own commitment to learning, as evidenced
by your enrollment at SJSU, and the University's Academic Integrity
Policy requires you to be honest in all your academic course work.
Faculty members are required to report all infractions to the Office of
Student Conduct and Ethical Development. The
policy on academic integrity can be found at
http://sa.sjsu.edu/judicial_affairs/.
Please read and understand the policy referenced
above, particularly the sections on cheating and plagiarism.
General discussion of programs is encouraged, but you should
always hand in your own work. Copying of programs and/or exam
answers will result in an F in the
course.
Late assignments will not be accepted for credit.
Grading weights:
| Midterms (2): | 40% |
| Homework: | 20% |
| Final Exam: | 40% |
Additional Notes: