CS2 Architecture 2022

In Computer Science 201 Architecture, we cover a combined introduction to computer architecture and C programming. As originally designed, the course had a second component on C programming, which you can find in the full version of the book; course notes only include the first part, coding in MIPS assembly language and basics of machine architecture. You can still pick up an idea of how the machine layer relates to C.

The aim is to bridge the hardware-software divide. Many new and popular languages do a good job of hiding the underlying machine. As a computer scientist, you need to understand what is underneath so you can

And if you are more ambitious and want to be a technology leader:

Coverage of concepts in this course is designed to facilitate that kind of deeper understanding. It starts out a little like a computer organization course with an introduction to logic and machine code (expressed in assembly language). I use the MIPS instruction set because it is very simple and regular compared with most others in wide use, and the SPIM simulator, which is a convenient way of running programs while being able to see what is happening inside the simulated machine. I use C as a kind of pseudocode to document assembly language so if you shift to actual programming in C, it is not too much of a shock for those used to other styles of language.


Notes (PDF) contain only the architecture portion; you can find details of the previous version with a C section below. A printed copy is handed out to the class.
The full version (PDF) has the same first part. The PDF includes colour and hyperlinks. If you want a copy to print in which there is only colour that is required in pictures (hyperlinks are not coloured), download this version (PDF).

Updates (the published edition is the same as the 27 October 2020 PDF; the PDF edition remains free, and is exactly the same, other than a colour cover):

The PDF is formatted for A4; if your printer is unhappy with this and requires US Letter it should look fine rescaled for that paper size; the published version is printed this way.

If you spot any errors in the notes including anything that should be made clearer, please fill in this form. If you would like credit for fixing errors, please include your name and email, but this is optional: you may also comment anonymously.

More reading:


This is not primarily a course about machine code programming, but about how higher-level languages relate to the machine. The MIPS instruction set is one of the simplest found in any real machine. While it is not widely used in products you may think of as computers, it is in very wide use as part of other machines and devices, like network switches. In the past, MIPS processors were also used in high-performance Silicon Graphics machines, so they are a general-purpose design. MIPS also competes with ARM to sell in markets like tablets and smart phones, though ARM remains the major player in that market. Though MIPS was started in Silicon Valley by Stanford University professor John Hennessy, the design is now owned by UK company Imagination Technologies. Like ARM, MIPS designs are not made by the owner of the brand. Both companies license designs to others, unlike Intel who make their own chips and gain much of their competitive edge by class-leading fabrication technology.

A computer that is part of another machine is called an embedded system. Designs with a low energy footprint are popular in both embedded and mobile designs, which is why MIPS and ARM have a big presence in these markets. MIPS and ARM are both of a style of design called reduced instruction set computer (RISC), and are fairly similar in general design, though MIPS is the simpler design, hence its use in this course.

Why not Intel? The Intel instruction set is much harder to learn. If you understand the MIPS design, learning Intel's later will not be very hard, but it is easy to get lost in the detail of a more complex design. It is also a little more likely that you will need to code at the machine level for a design similar to MIPS, since RISC designs generally are more common in the kind of energy-sensitive market where specialist machine coding may be needed.

In January 2014, IC Insights reports the money made selling processors (MPUs, for microprosessor units) in phones and tablets is not far behind the total for conventional computers (Microprocessor Sales Growth Will Strengthen Slightly in 2014) with that fraction predicted to grow the next 4 years, as illustrated below:

That growth is in dollar terms – since each processor (particularly at the low end) in portable devices is cheaper than a desktop or server processor, phone and tablet sales have already overtaken desktop and server sales in number of units. The most recent comparative numbers for units sold I can find are from 2010 [Hennessy and Patterson 2012; p 5]:

Although it's not directly comparable because it's a different year, market share of number of units sold is a very different picture than the share by dollars:

More recently, the biggest growth has been in embedded systems, again in dollar terms, not units sold but note that embedded systems CPUs are much cheaper than desktop and mobile CPUs, so this shift is bigger than it looks (Total MPU Sales Surprise With Strong Gains in 2020, More Upside in 2021):

Why C?

The TIOBE Index shows that C is surprisingly popular at least among those who talk about their work on the web. This snapshot of their popularity measure (16 April 2021 – not much different since I first checked early 2014) shows that C is not only the single most popular language, but 4 of the top 5 languages are C-related. Of course choosing a language for a course just because it is popular is not where we start – the language must be good for learning, and C is very good for understanding the interface between the machine and higher-level languages, because it was designed from the start to be close to the machine. On the other hand its similarity to other popular languages of varying degrees of distance away from the bare machine (C#, Java, C++, Objective-C) helps to relate those higher-level languages to machine concepts once you understand how C works.

Further reading

Recommended book: Another approach: More advanced architecture:

C references

MIPS and SPIM resources

Some history:
CPU vs. GPU, Mythbusters style.