Recti cultus pectora roborant

CS 216, System Programming languages

Course Outline

Professor: Lin Jensen
Office: Johnson 115. Oops, not during pandemic!
Office hours are on my website,

Land Acknowledgement

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

My supplementary Course notes  are on line at the course webpage,

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 correctly.


Grading scheme:

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) 60%
Written assignments (about 3) 10%
Midterm exam - 21/22 February 2022
Final exam 20%

Exams will be on-line, with a 24 hour period in which to start. The midterm can be started between noon Monday and noon Tuesday. The final exam will be scheduled similarly by the university.

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,, on which you will all have accounts. We must verify this before the first lab!
the course directory is: /home/COURSES/cs216
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.

General Expectations

Policy on assignments and labs.

Timely submission

  1. Written assignments must be handed in on the date due.
  2. 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.

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  $t1, $t2, $t3

poor: #  add t2 to t3, and store in t1
poor and incorrect: #  add t1 to t2, and store in t3
good: #  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,, 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.

Back to Lin Jensen