Hardware – Software – Firmware

A fundamental issue in the design of any computer is how to control or steer the electrical signals that represent information. In the arithmetic and logic unit, where the actual processing of information is done, signals must be routed between various computers, adders and other components. The control system must also mediate the transfer of information between the central processor, the main memory units and the various input and output devices. In one approach, the control system is completely "hard-wired", that is, it is laid down permanently in the processor's electrical circuitry. A second approach is more flexible and in many cases less expensive. The essential idea is to reduce the complexity of the control system by recording the detailed instructions for controlling the computer in a coded form. In other words, the sequence of paths that must follow is embodied in a pro­gram, which is stored in a separate memory unit incorporated into the processor.

In the hierarchy of program that operates a computer, the instructions executed by the control system occupy the lowest and most elementary level; each instruction specifies a single functional state of the machine. Because the control instructions are responsible for such fine details, the tasks of defining and encoding them is termed microprogramming, thereby distin­guishing it from the writing of the higher-level programs known generally as software. A set of control instruments – a microprogram – is written in microcode. The idea of microprogramming was conceived more than 30 years ago soon after the advent of the first computers. At the time the hard­ware needed to implement the idea did not yet exist. The method has been adopted, however, in most computers that are being built today. Evolutionary successor of the minicomputer, the microcomputer, is a set of microelec­tronic "chips" serving to various computer functions. It has opened up new realms of computer applications. In recent years a good deal of confusion has arisen about the meaning of the term microprogramming, owing largely to the advent of the microprocessor (the computer on a chip) that is at the heart of the latest products of the progressive miniaturization of silicon-based semiconductor technology. It must be emphasized that micropro­gramming a computer is not the same as programming a microcomputer; in principle, any computer, from the largest "mainframe" system to the small­est personal computer, can be designed with a microprogrammed control system. To avoid such confusion microprograms are sometimes classified as "firmware", thereby signifying their intermediate status between hardware and software. In most modern computers the routing of information is con­trolled at the lowest level by a microprogram, i.e., a set of stored instructions that function in place of a completely "hardwired" control system.