This page collects together all of the “outcomes” associated with individual modules. Outcomes identify what students will know and be able to do if they master the material.
The course-specific student learning outcomes (SLOs) this this course are:
- Students understand the underlying principle behind machine-level data representations, computing, and programming.
- Students are proficient with assembly programming for the x86 architecture, including
register operations, control structures, bitwise operations, and subprograms.
- Students understand the underlying principles behind compiling, linking, loading, and debugging.
- Students gain some hands-on experience with developing a small compiler.
The student learning outcomes (SLOs) for this course that are part of the SLOs for the entire Computer Science program, are:
- [A] Students can apply knowledge of computing and mathematics appropriate to the discipline.
- [B] Students can analyze a problem, and identify and define the computing requirements appropriate to its solution
- [C] Students can design, implement, and evaluate a computer-based system, process, component, or program to meet desired needs
- [I] Students can use current techniques, skills, and tools necessary for computing practice
- Develop a sense of the historical developments that have led
to the computers we have today
- Understand the principle of the Von Neuman architecture
- Understand the concept of an Instruction Set Architecture (ISA)
Computers and Numbers
- Master conversions between bases and additions in different bases
- Understand how integers are stored in computers, differentiating unsigned and signed numbers
- Understand how to do size conversions of numbers
- Understand numerical overflow
Data Size & Arithmetic,
Integers & Computers
- Understand the history and significance of the X86 architecture
- Know the X86 registers
- Understand the concept of segmenting
X86 & NASM
NASM: data and bss
- Understand the directives to define .data and .bss segments with NASM
- Understand Endianness
- Be able to trace programs with arbitrary memory/arithmetic operations
- Understands the basics of assembly instructions mov, add, sub, inc, and dec
X86 & NASM
The Runtime Stack
- Understand how the stack is used to implement subprograms and structured
as activation records and how it is managed at runtime
- Understand the general goals and principle of a compiler, including
the lexer and the parse.
- Understasnd the principles of regular languages (as described
by finite automata and regular expressions) and
of context-free languages (as described by context-gree grammars).
- Gain some basic experience developing a compiler with ANTLR.
Linking & Loading
- Understand the basic principle of linking and the format of object file (in particular the relocation table and the symbol table)
- Understand the basic principle of loading
Linking & Loading
- Understand how a debugger works and how it is useful
- Be familiar with standard debuggers like gdb and tools like valgrind