Bishop's University is located on traditional, unceded land of the Abanaki people.
K'wlipai8ba W8banakiak wdakiw8k
Textbook: "Introduction to RISC Assembly Language Programming" (ISBN 0
201 39828 1) by John Waldron. (reprinted by Bishop's,
in the bookstore) Available in print or PDF
Recommended: "The C Programming Language, 2nd edition," Brian W.
Kernighan, Dennis M. Ritchie,
Also in the bookstore
The purpose of this course is to become familiar with the way a
computer actually functions as a machine. So you write code for a
representative processor, to manipulate data in its registers and
memory. This is called Assembly
Language. You may even have occasion to program at this low
level sometime in your life, using these concepts, even though the
processor will most likely be different from whatever you study now. We
are currently using a simulator of the MIPS processor, a clean 32
bit RISC design.
A second purpose of the course
is then to learn the C programming language, which is generally
used in system programming, as it is the closest to assembly language.
In any case, we will be comparing programming concepts, such as loops,
in both assembly and C.
To pass this course, it is necessary to actually do the programming
assignments. You cannot expect to pass the exams simply by reading
programs written by others, however elegant. Normally I expect you to
first design and then type in your program prior to the lab period, so
you will be able to use that time for getting your program to run
Number systems: binary and hexadecimal - the way computers store
MIPS organization, assembly language format, and SPIM simulator
(or Mars simulator)
C, the lowest-level "high-level" language
Load and Store instructions
Control flow structures (IF and loops) -- C syntax, assembly
Addressing modes and machine language
"Bit fiddling:" Logical (boolean), shift and rotate instructions
Procedures and Stacks -- functions are primary in C, "the stack"
is involved in their implementation
Buffer Overflow ("Don't be careless")
compiling and linking: make and Makefiles
Floating point (real number) operations (optional, if time permits)
Intel processor assembly language (the processor inside the lab
machines) we will just look at a subset of this Complex Instruction Set
I expect you to participate in the
weekly labs. Please note that you will get a single mark for
the course including the lab, even though the lab is
registered separately as a matter of administrative convenience.
Lab. assignments (programs)
Written assignments (about 3)
Midterm exam - 24 February 2023
You must pass the final exam to pass the course. Supplemental exams
will not be allowed.
Please note that you will get a single mark for the course including
the lab, even though the lab is registered separately as a matter
of adminstrative convenience.
Work in this course will be done
on the linux server,
which you will all have accounts. We
must verify this before the first lab!
the course directory is:
Example programs from the text are to be found in /examples
Linux is best accessed as a "remote desktop," using X2GO Client,
in Bishop's labs, or with a very high speed connection, but
you can also use terminal commands ssh for a text interface,
and scp to transer files.
You will then want to download one of the graphical simulators, QtSpim or Mars,
to your computer. (see details in the "video list")
Programming questions, which can be evaluated by mipsmark software,
are located at /home/COURSES/cs216/quests.
Attend class, and be "present."
Please join any class metings or office hours, to ask questions, and get help with
Lab assignments should normally be completed during the
Programs must contain meaningful comments
Exams will be open book,
Policy on assignments and labs.
Written assignments must be handed in on the date due.
Labs should be done
weekly. Don't get behind.
2 delays allowed
Anyone can get sick, have conflicting family commitments, or
unexpected emergencies. Therefore, at most 2 assignments or labs may be
submitted up to one week late. This "grace" allowance is
intended to cover unexpected contingencies, and should not be used
frivolously early in the semester.
You must notify me if this is the case.
The grace assignments will not be marked promptly. You may not
get them back until the end of the semester.
Once you have used up your 2 grace submissions, further late
assignments will not be marked, and you will get no credit.
Meaningful Comments in programs
All programs written must contain comments. A program with no
comments is proof you don't understand it and cannot have written it,
after all. However, your comments must also explain what the program
does, and why. They should not simply repeat the instruction. For
example, comment an add instruction to explain why it's there:
# add t2 to t3, and store in t1
poor and incorrect:
# add t1 to t2, and store in t3
# t1 is now the sum of the 2 input values
Explaining the code in your own words is the best way to establish your authorship.
All exams in this course will be "open book," that means you may consult
the textbook, my on-line notes, and
other sources of help.
Do your own work. Helping others vs. cheating
It is important for you to do all the lab exercises. Only by
actually doing the work will you learn enough to pass the exams. It
can't hurt to do additional ones. All the "question" files listed in
the book are on our linux system, linux.ubishops.ca, in /home/COURSES/cs216/quests.
You may discuss the questions with each other, and help each other
to get your programs working. It is a great feeling to get your program
working finally. If you are asked for help, and are willing to give it,
the best way to start is to have the other student explain how their
program works. It may use a different approach than yours. Do not mail or give a copy of your program to other students.
There is no satisfaction for them in running a program they did not
create. You will all receive a mark of 0 for duplicated programs, as a
first warning. After that, the procedures set forth in the University
Calendar (p. 19) will need to be followed.