This textbook introduces the reader to assembly language programming and its role in computer programming and design. The author concentrates on covering the 8086 family of processors up to and including the Pentium. The focus is on providing students with a firm grasp of the main features of assembly programming, and how it can be used to improve a computer's performance. All of the main features are covered in depth: stacks, addressing modes, arithmetic, selection and iteration, and bit manipulation; and amongst the advanced topics covered are: string processing, macros, interrupts and input/output handling, and interfacing with higher-level languages such as C. A particular strength is the discussion of the improvements in performance that can be achieved using assembly programming where appropriate. The book is based on several years of a successful course offered by the author and includes numerous hands-on exercises for students to undertake.