Exams Overview
Exam Structure
As discussed in the syllabus, the exams in this class are meant to assess your proficiency on a specific set of learning objectives. Each exam will have a posted set of learning objectives that you can demonstrate your understanding of for that quiz, and all core learning objectives will appear on at least 2 exams.
Exam Learning Objectives
The learning objectives that will be on exams are:
Number representations
Core
- NR1: Converting from unsigned binary to decimal
 - NR2: Negating a binary value with 2’s complement
 
Advanced
- NR3-AD: Adding/Subtracting two hexadecimal numbers
 
Data representations
Core
- DR1: Demonstrate how a struct is stored in memory with arrays (no buffer bytes/padding)
 - DR2: Encode a codepoint (given the byte count) (with table provided)
 - DR3: Explain how bytes are interpreted with 
%cand%d - DR4: Demonstrate how an integer is stored in big- and little-endian
 - DR5: Demonstrate the use of 
\0to null-terminate a string - DR6: Demonstrate the difference between a value and its address
 
Advanced
- DR7-AD: Demonstrate how complex elements (e.g. structs with nested arrays) of an array are stored in memory (including padding/buffer bytes)
 - DR8-AD: Decode a multi-character encoded byte sequence (any byte count) (with table provided)
 
Operators
Core
- OP1: Perform a given bitwise/logical operation
 - OP2: Perform a given logical shift operation
 - OP3: Identify when overflow will occur in addition
 - OP4: Use addresses of members of a struct or elements in a 
chararray correctly 
Advanced
- OP5-AD: Provide bitwise/shift/logical operations for a given affect (e.g. via masking)
 - OP6-AD: Resize an integer value to a larger size (signed or unsigned)
 - OP7-AD: Demonstrate the correct use of 
&and*operators 
Assembly Instructions
Core
- AI1: Interpret operands with constants, registers, and basic memory lookups
 - AI2: Interpret a basic arithmetic instruction
 - AI3: Interpret instructions using pointer arithmetic
 - AI4: Determine the outcome of a 
cmpjump sequence 
Advanced
- AI5-AD: Interpret operands with offsets, indexing, and scaling
 - AI6-AD: Interpret 
movinstructions - AI7-AD: Draw the stack given push/pop/add/sub instruction(s)
 
Assembly code
Core
- AC1: Distinguish between recursion/looping/branching
 - AC2: Identify parameter count/types and return type of given a given assembly program
 
Advanced
- AC3-AD: Describe the functionality of a given assembly program
 - AC4-AD: Reconstruct all of a C program from given assembly
 
Security
Core
- SEC1: Provide a high-level explanation of the trusting-trust attack
 - SEC2: Provide a high-level explanation of buffer-overflow attack and defense
 
Networking
Advanced
- NW1-AD: Provide a high-level explanation of DNS
 
Operating Systems
Core
- OS1: Provide a relative path for a given file system structure
 
Advanced
- OS2-AD: Interpret programs with multiple fork calls
 
Memory Hierarchies
Core
- MH1: Interpret given cache parameters
 
Advanced
- MH2-AD: Explain the performance implications of loop ordering
 
You can see how you are doing on each of these on Moodle under the “Grades” tab.