Some assembly required : assembly language programming with the AVR microcontroller A family of internationally popular microcontrollers the Atmel AVR microcontroller series is a low cost hardware development platform suitable for an educational environment. Until now no text focused on the assembly language programming of these microcontrollers. Through detailed coverage of assembly language programming principles and techniques Some Assembly Required: Assembly Language Programming with the AVR Microcontroller teaches the basic system capabilities of 8 bit AVR microcontrollers.The text illustrates fundamental computer architecture and programming structures using AVR assembly language. It employs the core AVR 8 bit RISC microcontroller architecture and a limited collection of external devices such as push buttons LEDs and serial communications to describe control structures memory use and allocation stacks and I O. Each chapter contains numerous examples and exercises including programming problems.By studying assembly languages computer scientists gain an understanding of the functionality of basic processors and how their capabilities support high level languages and applications. Exploring this connection between hardware and software this book provides a foundation for understanding compilers linkers loaders and operating systems in addition to the processors themselves Introduction What is Assembly Language The functionality of every computer system is centered on a processor. The processor is responsible for controlling most aspects of the computer system. Its name indicates its function; processing data performing arithmetic and logical operations storing and retrieving information and communicating with or controlling peripheral devices. Every processor has its own native language called machine language. These are the processing instructions that are unique to each processor. Machine language instructions are simply binary codes that are interpreted by the processors hardware and converted to a sequence of electrical signals that alter the state of the computer system. Machine language programming is accomplished by carefully devising sequences of bits usually organized into bytes or words that need to be placed in appropriate memory locations before execution begins. Programming at the machine language level requires knowledge of what is called the Instruction Set Architecture of the processor. This level of the processors design is realized by an even lower level called the microarchitecture. In some cases the microarchitecture level is implemented using even more primitive instructions called microcode. The Instruction Set Architecture of a processor includes its instruction set and the system components the instructions directly or indirectly affect. These components include registers memory addressing interrupts exceptions and even the primitive data types that can be manipulated by the instructions. For each particular machine language an Assembly Language can be designed to aid a programmer in the process of writing a machine language program. Assembly Language is a plain text expression of a machine