A register is a sequential circuit with n + 1 (not counting the clock) inputs and n output. To each of the outputs corresponds an input. The first n inputs will be called x0 trough xn-1 and the last input will be called ld (for load). The n outputs will be called y0 trough yn-1. When the ld input is 0, the outputs are uneffected by any clock transition. When the ld input is 1, the x inputs are stored in the register at the next clock transition, making the y outputs into copies of the x inputs before the clock transition. We can explain this behavior more formally with a state table. As an example, let us take a register with n = 4. The left side of the state table contains 9 columns, labeled x0, x1, x2, x3, ld, y0, y1, y2, and y3. This means that the state table has 512 rows. We will therefore abbreviate it. Here it is:   ``` ld x3 x2 x1 x0 y3 y2 y1 y0 | y3' y2' y1' y0' ------------------------------------------- 0 -- -- -- -- c3 c2 c1 c0 | c3 c2 c1 c0 1 c3 c2 c1 c0 -- -- -- -- | c3 c2 c1 c0 ``` As you can see, when ld is 0 (the top half of the table), the right side of the table is a copy of the values of the old outputs, independently of the inputs. When ld is 1, the right side of the table is instead a copy of the values of the inputs, independently of the old values of the outputs. Registers play an important role in computers. Some of them are visible to the programmer, and are used to hold variable values for later use. Some of them are hidden to the programmer, and are used to hold values that are internal to the central processing unit, but nevertheless important. We use this symbol for registers (notice that we have omitted the clock signal, as it is understood):