Upon initial inspection, it would seem that instruction set design is of little interest to programmers who simply want to write great code, rather than design their own instruction sets. However, only by knowing the computer's architecture and, in particular, how the CPU encodes machine instructions, can a programmer make the most efficient use of the machine's instructions. By studying instruction set design, a programmer can gain a clear understanding of the following:
Why some instructions are shorter than others
Why some instructions are faster than others
Which constant values the CPU can handle efficiently
Whether constants are more efficient than memory locations
Why certain arithmetic and logical operations are more efficient than others
Which types of arithmetic expressions are more easily translated into machine code than other types
Why code is less efficient if it transfers control over a large distance in the object code
. . and so on.
By studying instruction set design, a programmer becomes more aware of the implications of the code they write (even in a high-level language) with respect to efficient operation on the CPU. Armed with this knowledge, the programmer can write great code.