## Exercises

- Powers of Two - a browser game to practice them
- MIPS mini-exercises - prompts to write very short pieces of code, with answers

## Reference

- MIPS style guide - how to write asm that doesn’t look terrible.
- MIPS instructions - common instructions and what they do.
- MIPS cookbook - micro-tutorials on how to do common things in MIPS.
- MIPS ⬄ C correspondences - you write asm by pretending to be a compiler. These are the rules.

## Lecture Recordings (hosted on YouTube)

You can speed up the video playback… listening to myself at 1x speed is agonizing lmao

- Lecture 1 - Introduction
- Lecture 2 - Programs, Instructions, and Registers
- Lecture 3 - Memory and Addresses
- Lecture 4 - Control Flow
- Lecture 5 - Arrays
- Lecture 6 - Functions
- Lecture 7 - The Stack and Saved Registers
- Lecture 8 - Numerical Representation
- Lecture 9 - (Signed Integers and) Bitwise Operations
- Lecture 10 - Bitfields and Fixed-point math
- Lecture 11 - Floats, Addition, and Overflow
- Lecture 12 - Multiplication and Division
- Exam 1 Review
- Lecture 13 - CPU Intro
- Lecture 14 - Gates and Wires
- Lecture 15 - Arithmetic and Decisions
- Lecture 16 - Sequential Logic, Registers, and Clocking
- Lecture 17 - FSMs, Multiplication, and Division
- Lecture 18 - The Register File, ALU, and Memory
- Lecture 19 - The PC and Interconnect
- Lecture 20 - Decoding and Control
- Lecture 21 - Performance
- Lecture 22 - Multicycle and Microcode

## Examples

Right-click and save to download the asm and circuit files.

Safari users: Safari sometimes changes file extensions. Do not trust it.

MIPS examples | |
---|---|

goto in C |
C has goto. Here's a dumb way to write a for loop. Looks a lot like asm... |

01_variables.asm | Declaring and accessing variables. |

02_arrays.asm | Different ways to declare arrays, and using a for loop to modify one. |

Numerical examples | |

Bitwise.java | Shows several bitwise operators and oddities. |

Bitfields.java | Using shifting, masking, and ORing to encode colors. |

Bitflags.java | Bitflags are a special case of bitfields. They're like a set or array of booleans. |

Logisim Basics | |

constant_gates.circ | Constants going into gates are pointless! Simplify! |

tunnel_tutorial.circ | Why you should use tunnels. THEY'RE GOOD OKAY |

splitter_tricks.circ | Using splitters more effectively. |

splitter_bitfields.circ | Using splitters to take apart/put together bitfields. |

Combinational Circuits | |

full_adder.circ | A 1-bit full adder made of gates. |

fast_mult_4x4.circ | A fast (combinational) 4x4 multiplier. |

Sequential Circuits | |

RS_latch.circ | An RS latch made of NOR gates. |

Circuit.js RS Latch | Circuit.js can simulate it at a lower level, so you can see the current and voltages. |

D_latch.circ | A D latch made from an RS latch. |

D_flipflop.circ | A D flip-flop made from 2 D latches. |

register_4bit.circ | A 4-bit register made from D flip-flops. |

simple_counter.circ | A register paired with an adder can count up each clock tick. |

slow_mult_4x4.circ | An FSM that multiplies numbers using the slow (sequential) method. |

fan_controller.circ | A simple FSM for controlling a ceiling fan. |

reg_file.circ | The (tiny) register file I made in class. |

pc_fsm.circ | The "MIPS" PC FSM I made in class. |

decoding.circ | Some examples of decoding an instruction. |