Pointers are one of the most difficult concepts for novice students to grasp. Once students have written assembly language code to implement address arithmetic and have used load and store instructions, pointers and addresses in higher-level languages become much more intuitive. Assembly language teaches essential design skills and style. Even very short pieces of assembly language code are difficult to write unless they are well designed and structured, and nearly impossible to read unless properly documented. The exercise of writing some short assembly language programs focuses on the design and style skills we try to teach in CS1, and seems to have beneficial effects on the way that students approach their larger programming assignment later in the semester.
Assembly language makes clear the architecture of the underlying machine.
Understanding the underlying machine demystifies the computer and programming in assembly language helps students understand how extremely complex programs can be reduced to sequences of very simple instructions. Our assembly language programming exercises from 1998 and 1997 underscore these points. Not all assembly languages are well-suited to pedagogical purposes. Most are too complex, idiosyncratic, or arcane. We could not find a system that met our requirements, so we created ANT to satisfy our needs.