UW CSE 351: The Hardware/Software Interface
CSE 351 explains how the software you write actually runs on hardware: binary and integer/floating-point representation, x86-64 assembly, the memory hierarchy and caching, the stack, and how C maps down to the machine. It's the bridge between high-level programming and the physical computer underneath.
Fennie is independent and not affiliated with University of Washington. This is an unofficial study guide.
Build my CSE 351 study planWhat makes it hard
The material is a flood of unfamiliar low-level detail — two's complement, IEEE floating point, assembly, stack frames — and it's all interconnected, so a gap early cascades. Reading and reasoning about assembly is a genuinely new skill, and the labs (especially the bomb-lab-style reverse-engineering assignments) are time sinks that punish students who don't build steady habits.
What you'll cover
- • Binary, two's complement, and bit manipulation
- • IEEE floating-point representation
- • x86-64 assembly
- • The stack and procedure calls
- • The memory hierarchy and caching
- • How C maps to machine code
The CSE 351 study guide
How to study for UW CSE 351, step by step.
- 1
Get number representation airtight in week one
Two's complement, bit operations, and floating point underpin everything in CSE 351. If they're shaky early, assembly and the labs become incomprehensible — drill conversions until they're instant.
- 2
Practice reading assembly daily
Tracing x86-64 and mapping it back to C is a new skill that only builds through reps. Take small C functions, compile them, and read the assembly until the patterns — loops, conditionals, function calls — are recognizable on sight.
- 3
Start the reverse-engineering labs immediately
The assembly labs are notorious time sinks, and the debugging is slow. Beginning the day they open leaves room to learn the tools instead of panicking at the deadline.
- 4
Connect each topic to the ones around it
Stack frames, calling conventions, and the memory hierarchy interlock — study them as a connected system, not isolated facts. Exam questions deliberately span the boundaries.
- 5
Let Fennie keep the interlocking topics on track
Upload your CSE 351 syllabus and Fennie's Daily Plan paces representation, assembly, and memory-hierarchy practice to your exam dates and lab deadlines, with quizzes generated from your actual course materials. Free to start.
Start my CSE 351 plan free
How Fennie helps with CSE 351
Fennie's Daily Plans pace CSE 351's interlocking topics — representation, assembly, the memory hierarchy — to your exam dates and lab deadlines, so a gap in one doesn't cascade into the next. Chat through how a C snippet compiles to assembly or why a cache miss happens, and quiz yourself on two's complement and floating point before exams.
FAQ
Is CSE 351 hard?
It's a dense, detail-heavy course where everything connects, so falling behind compounds fast. The labs are real time investments. Students who lock down number representation early and read assembly daily manage it well.
Do I need CSE 351 before CSE 333?
CSE 351 is the usual prerequisite for CSE 333 — it gives you the memory and machine model that systems programming in C and C++ builds on. Check current Allen School requirements.
How do I study for CSE 351 exams?
Practice reading and tracing assembly until the patterns are automatic, and study stack frames, calling conventions, and caching as a connected system, since exam questions span those boundaries.
Pass CSE 351 with a plan, not a cram
Upload your CSE 351 materials and Fennie generates a Daily Plan paced to your deadline — plus chat, flashcards, and quizzes built from the actual course content.
Get started freeMore UW courses
CSE 121 — Introduction to Computer Programming I
CSE 121 is UW's no-experience-required intro to programming in Java, the first course in the CSE 12X sequence that replaced the old CSE 142/143 in 2022. It's designed for students who have never written code, covering variables, control flow, methods, and arrays through weekly programming assignments.
CSE 122 — Introduction to Computer Programming II
CSE 122 is the second course in UW's intro programming sequence, and the usual starting point for students with AP CS A credit or prior coding experience. It covers data structures from the client perspective — lists, sets, maps, stacks, queues — plus file processing and reasoning about code complexity.
CSE 123 — Introduction to Computer Programming III
CSE 123 completes UW's intro programming sequence, shifting from using data structures to building them. Students implement linked lists and binary trees, write recursive algorithms, and design class hierarchies with inheritance and interfaces — the material that used to be the back half of CSE 143.
CSE 311 — Foundations of Computing I
CSE 311 is UW's discrete math and theory course — propositional logic, proofs, set theory, induction, regular expressions, and finite automata. It's the first course in the major where the work is writing proofs instead of writing programs, and it underpins everything from CSE 312 to algorithms.