Microprogramming is a form of emulation wherein one ISP is used to interpret a target ISP. The microprogramming ISP is usually kept more primitive than the target ISP in order to maintain an acceptable level of performance. Microprogramming can also be viewed as a technique that imposes an interpreter between the hardware and the target ISP. Since a microprogrammed ISP is similar to a conventional ISP that interprets macro- level programs, all the principles and techniques of ISP design apply. Increased performance, for example, is brought about by adding to the number of data-types (via hardwiring).
Conceptually, a computer can be divided into a data part and a control part. The data part is composed of registers, functional units, and interconnecting paths. The control part translates machine language instructions into an ordered sequence of control signals that manipulate the data part in order to realize the machine language instruction. A microprogrammed control part uses a stored program to generate the necessary control signals.
Figure 1 depicts a canonical microsequencer. Microinstructions are fetched from a microstore. Each microinstruction contains a set of bits for controlling the data path as well as information about where the next microinstruction is stored, which may vary according to the status of a portion of the data part. This sequencing of microinstructions provides the required sequencing of data-path functions. Microprogramming has many of the essential ingredients of programming, including branching, loops, and subroutines. However, microprogramming makes several concessions to hardware in order to achieve high performance. These concessions tie the microcode very closely to the hardware, thus increasing the complexity of microcoding over regular programming.
There are several advantages to using microprogramming to implement an ISP.