This course begins with a briefing on the history and the rapidly changing field of computer design.
As such the questions arises of how can a programmer or what techniques can be used by hardware designers to improve performance? To answer these question, we first look at the underlying software and hardware of a computer.
To go from a complex application to the simple instructions involves several layers of software that interpret or translate high-level operations into simple computer instructions.
Figure 1.1 A simplified view of hardware and software as hierarchical layers.
There are two types of systems software that are central to every computer system: an operating system and a compiler. The compiler perform a vital function, as the hardware in a computer can only execute extremely simple low-level instructions.
Figure 1.2 C program compiled into assembly language and then assembled into machine language.
The compiler would compile it into this assembly language. Then, the assembler would translate this statement into the binary instruction.
One of the most important abstractions is the interface between the hardware and the lowest-level software. Because of its importance, it is given a special name: the instruction set architecture (ISA), or simply architecture of a computer.
Figure 1.3 Instruction set architecture.
The instruction set architecture includes anything programmers need to know to make a binary machine language program work correctly, including instructions, I/O devices, and so on.