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)
- DR2: Encode a codepoint (given the byte count) (with table provided)
- DR3: Explain how bytes are interpreted with
%c
and%d
- DR4: Demonstrate how an integer is stored in big- and little-endian
- DR5: Demonstrate the use of
\0
to 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
- DR8-AD: Decode a multi-character encoded byte seqeuence (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
char
array correctly
Advanced
- OP5-AD: Provide bitwise/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 cmp jump sequence
Advanced
- AI5-AD: Interpret operands with offsets, indexing, and scaling
- AI6-AD: Interpret
mov
instructions - 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.