In the previous chapter we started by arguing that writing programs in machine code was tedious and error prone, and what we really needed was an assembler and linker to do some of the work for us. As programs get larger and more complex, one can start to use the same argument against assemblers and linkers: often they are too low-level, and higher-level programming tools are required. This has led to the invention of a variety of high-level languages, such as C, and compilers which translate programs written in those languages into low-level versions suitable for processing by assemblers and linkers. In this chapter the aim is to focus on the aspects of compiler tools which relate to the processors that eventually execute their output. That is, we shy away from issues of language design and focus on, for example, effective selection of machine instructions to implement a given program.
Unable to display preview. Download preview PDF.