ICS 312: Machine-Level and Systems Programming
Description: Machine organization, machine instructions, addressing modes, assembler language, subroutine linkage, linking to higher-level languages, interface to operating systems, introduction to assemblers, loaders and compilers. Pre: 212 (or concurrent), or consent.
Objectives
- 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
Course Learning Outcomes: (See objectives.)
Program Learning Outcomes
- 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
Prerequisites: 212 (or concurrent), or consent.
Textbook(s): PC Assembly Language, A. Carter (http://www.drpaulcarter.com/pcasm/)
NASM User Manual (http://www.nasm.us/doc/)
Grading: In-class quizzes (always on Tuesdays, for each Module): 10%
Homework and programming assignments: 55%
Midterm: 15%
Final: 20%
Schedule
- Week 1: Introduction and historical perspective
- Week 2: Computer architecture principles
- Week 3: Numbers and computers
- Week 4: The x86 architecture
- Weeks 5,6: The NASM assembly programming environment
- Week 7,8,9: Essential assembly programming
- Week 10: Bit operations
- Week 11: Subprograms
- Week 13: Regular expressions, lexical analysis
- Week 14: Context-free grammars, syntactic analysis
- Week 15: Linking, Loading, Debugging