Why
should engineers and programmers spend time learning to program in assembly
language? The reasons presented in the first edition are as valid today as in 2009,
perhaps even more so. The complexity of the modern SoCs presents challenges in
communications between the multiple processors and peripheral devices, challenges
in optimization of the sub-systems for performance and power consumption, and
challenges in reducing costs by efficient use of memory. Knowledge of the assembly
language of the processors, and the insight into the operation of the processors that
such knowledge provides, is often the key to the timely and successful completion of
these tasks and launch of the product. Further, in the drive for performance, both in
speed of the product to the user and in a long battery life, augmenting the high-level
language development with targeted use of hand-crafted assembly language will
prove highly valuable—but we don’t stop here. Processor design remains a highly
skilled art in which a thorough knowledge of assembly language is essential. The
same is true for those tasked with compiler design, creating device drivers for the
peripheral subsystems, and those producing optimized library routines. High quality
compilers, drivers, and libraries contribute directly to performance and development
time. Here a skilled programmer or system designer with a knowledge of assembly
language is a valuable asset.