UNIT 2 and 3 Cads Notes
UNIT 2 and 3 Cads Notes
Input Unit :The input unit consists of input devices that are attached to the computer.
These devices take input and convert it into binary language that the computer
understands. Some of the common input devices are keyboard, mouse, joystick, scanner
etc.
Central Processing Unit (CPU) : Once the information is entered into the computer by
the input device, the processor processes it. The CPU is called the brain of the computer
because it is the control center of the computer. It first fetches instructions from memory
and then interprets them so as to know what is to be done. If required, data is fetched from
memory or input device. Thereafter CPU executes or performs the required computation
and then either stores the output or displays on the output device. The CPU has three main
components which are responsible for different functions – Arithmetic Logic Unit (ALU),
Control Unit (CU) and Memory registers
Arithmetic and Logic Unit (ALU) : The ALU, as its name suggests performs
mathematical calculations and takes logical decisions. Arithmetic calculations include
addition, subtraction, multiplication and division. Logical decisions involve comparison of
two data items to see which one is larger or smaller or equal.
Control Unit : The Control unit coordinates and controls the data flow in and out of CPU
and also controls all the operations of ALU, memory registers and also input/output units.
It is also responsible for carrying out all the instructions stored in the program. It decodes
the fetched instruction, interprets it and sends control signals to input/output devices until
the required operation is done properly by ALU and memory.
Memory Registers : A register is a temporary unit of memory in the CPU. These are used
to store the data which is directly used by the processor. Registers can be of different
sizes(16 bit, 32 bit, 64 bit and so on) and each register inside the CPU has a specific
function like storing data, storing an instruction, storing address of a location in memory
etc. The user registers can be used by an assembly language programmer for storing
operands, intermediate results etc. Accumulator (ACC) is the main register in the ALU and
contains one of the operands of an operation to be performed in the ALU.
Memory : Memory attached to the CPU is used for storage of data and instructions and is
called internal memory The internal memory is divided into many storage locations, each
of which can store data or instructions. Each memory location is of the same size and has
an address. With the help of the address, the computer can read any memory location
easily without having to search the entire memory. when a program is executed, it’s data is
copied to the internal memory and is stored in the memory till the end of the execution.
The internal memory is also called the Primary memory or Main memory. This memory is
also called as RAM, i.e. Random Access Memory. The time of access of data is
independent of its location in memory, therefore this memory is also called Random
Access memory (RAM). Read this for different types of RAMs
Output Unit : The output unit consists of output devices that are attached with the
computer. It converts the binary data coming from CPU to human understandable form.
The common output devices are monitor, printer, plotter etc.
Von-Neumann Model
Von-Neumann proposed his computer architecture design in 1945 which was later known as
Von-Neumann Architecture. It consisted of a Control Unit, Arithmetic, and Logical Memory
Unit (ALU), Registers and Inputs/Outputs.
Von Neumann architecture is based on the stored-program computer concept, where instruction
data and program data are stored in the same memory. This design is still used in most
computers produced today.
The part of the Computer that performs the bulk of data processing operations is called the
Central Processing Unit and is referred to as the CPU.
The Central Processing Unit can also be defined as an electric circuit responsible for executing
the instructions of a computer program.
The CPU performs a variety of functions dictated by the type of instructions that are
incorporated in the computer.
The major components of CPU are Arithmetic and Logic Unit (ALU), Control Unit (CU) and a
variety of registers.
Arithmetic and Logic Unit (ALU)
The Arithmetic and Logic Unit (ALU) performs the required micro-operations for executing the
instructions. In simple words, ALU allows arithmetic (add, subtract, etc.) and logic (AND, OR,
NOT, etc.) operations to be carried out.
Control Unit
The Control Unit of a computer system controls the operations of components like ALU,
memory and input/output devices.
The Control Unit consists of a program counter that contains the address of the instructions to be
fetched and an instruction register into which instructions are fetched from memory for
execution.
Registers
Registers refer to high-speed storage areas in the CPU. The data processed by the CPU are
fetched from the registers.
Following is the list of registers that plays a crucial role in data processing.
Registers Description
MAR (Memory Address This register holds the memory location of the data that
Register) needs to be accessed.
MDR (Memory Data This register holds the data that is being transferred to
Register) or from memory.
CIR (Current Instruction This register contains the current instruction during
Register) processing.
Buses
Buses are the means by which information is shared between the registers in a multiple-register
configuration system.
A bus structure consists of a set of common lines, one for each bit of a register, through which
binary information is transferred one at a time. Control signals determine which register is
selected by the bus during each particular register transfer.
Von-Neumann Architecture comprised of three major bus systems for data transfer.
Bus Description
Address Address Bus carries the address of data (but not the data) between the
Bus processor and the memory.
Data Bus Data Bus carries data between the processor, the memory unit and the
input/output devices.
Memory Unit
A memory unit is a collection of storage cells together with associated circuits needed to transfer
information in and out of the storage. The memory stores binary information in groups of bits
called words. The internal structure of a memory unit is specified by the number of words it
contains and the number of bits in each word.
Bus Structures
Bus Organization
A bus organization is a group of conducting wires which carries information, all the peripherals are
connected to microprocessor through the bus. A system bus is nothing just a group of wires to carry
bits.
The diagram to represent the bus organization of 8085 microprocessor is given below:-
Address Bus
Data Bus
Control Bus
i. Address Bus:-
The address bus carries information about the location of data in the memory. The addresses bus is
unidirectional because of data flow in one direction, from the microprocessor to memory or from the
microprocessor to input/out devices. Length of Address bus of 8085 microprocessor is 16 bit (That
is, four hexadecimal digits), ranging from 0000H to FFFF H. The microprocessor 8085 can transfer
maximum 16-bit address which means it can address 65,536 different memory location i.e 64KB
memory.
Address Bus is used to perform the first function, identifying a peripheral or a memory location.
The data bus allows data to travel between the microprocessor (CPU) and memory (RAM). The
data bus is bidirectional because of data flow in both directions, from the microprocessor to memory
or input/output devices and from memory or input/output devices to microprocessors. Length of
Databus of 8085 microprocessor is 8 bit (that is, two hexadecimal Digits0, ranging from 00H to FF
H.
The data bus is used to perform the second function, transferring binary information.
The control bus carries the control signals to control all the associated peripherals, the
microprocessor uses control bus to process data, that is what to do with selected memory location
signals are:-
a. memory card
b.memory write
c. input/output,write.
Bus:
A group of wires is known as bus Generally a bus consists of different types of wires like
Address bus, Data bus and Control bus
All the internal and external part of computer system are connected through this bus
The computer system communicates with this bus
By using this bus, computer system reads the data from external memory or devices and
write the data to memory or devices.
Need of working bus:
- The multiple Bus Structure have multiple inter connected service integration buses and for a
particular bus the other buses are its foreign buses. A Single bus structure is uncomplicated and
consists of a single server.
-A bus can't span multiple cells. And each cell can have more than one bus.
- Published messages are printed on it. There is not any messaging engine on the Single bus
structure
i) In the single bus structure all the units are connected in the similar type of bus than connecting
different buses as multiple bus structure.
ii) Multiple bus structure's performance is better from the single bus structure.
iii) Single bus structure's price is less than multiple bus structure.
Computer software or can say only software is a common term used to explain the role that
computer programs, process and documentation play in a computer system.
Versatility :New devices can be added easily, Peripherals can be moved between
computer systems that use the same bus standard.
Low cost, due to single set of wires is shared in multiple ways.
Manage complexity by partitioning the design.
It creates a communication bottleneck, so the bandwidth of that bus can limit the
maximum I/O throughput.
The maximum bus speed is largely limited by the length of the bus, the number of
devices on the bus, and the need to support a range of devices with Widely varying
latencies and data transfer rates.
Two bus Organisation
The sequence of operations to add the contents of register R1 to that
of register R, and store the result in register R, are as follows:
Step Action
(1) RY
(3) Zout R
The signals whose names are given in any step are activated, or set to 1, for
the duration of the clock cycle corresponding to that step. All other signals
are inactive
Thus, in step 1, the output of register R, and the input of register Y are
enabled, causing the contents of R, to be transferred to Y.
In step 2. the contents of register R2 are gated onto the bus and hence to
input B of the ALU. The contents of register Y are always available at input
A. The function performed by ALU depends on the signals applied to the
ALU control lines.
In this case, the Add line is set to 1, causing the output of the ALU to be the
sum of the two numbers at inputs A and B. This sum is loaded into register
Z., because its input is enabled (Zn). In last step. the contents of register Z
are transferred to the destination register R,
The path from the source buses to the destination bus goes through the
ALU, where the required operation is performed.
in one pass through the ALU, the structure of fig. allows the execution
phase of an instruction to be performed in one clock cycle. Note that if it is
merely necessary to copy the contents of one register into another, then the
transfer is also done through the ALU, but no arithmetic or logic operation
is performed.The temporary storage registers Y and Z in figure are not
required Register Y is not needed because both inputs to the ALU are
provided simultaneously via buses A and B.
Register Z is not needed because the output from the ALU is transferred to
the destination register via the third bus, C. In this structure, it is essential to
ensure that the same register can serve as both the source and the destination
in a given instruction.
In computer architecture, there are following types of addressing modes-
Examples-
Example-
ADD
This instruction simply pops out two symbols contained at the top of the stack.
The addition of those two operands is performed.
The result so obtained after addition is pushed again at the top of the stack.
Examples-
Example-
ADD X will increment the value stored in the accumulator by the value stored at memory
location X.
AC ← AC + [X]
Example-
ADD X will increment the value stored in the accumulator by the value stored at memory
location specified by X.
AC ← AC + [[X]]
Example-
ADD R will increment the value stored in the accumulator by the content of register R.
AC ← AC + [R]
NOTE-
It is interesting to note-
This addressing mode is similar to direct addressing mode.
The only difference is address field of the instruction refers to a CPU register instead of
main memory.
7. Register Indirect Addressing Mode-
ADD R will increment the value stored in the accumulator by the content of memory
location specified in register R.
AC ← AC + [[R]]
NOTE-
It is interesting to note-
This addressing mode is similar to indirect addressing mode.
The only difference is address field of the instruction refers to a CPU register.
Effective Address
= Content of Program Counter + Address part of the instruction
NOTE-
Program counter (PC) always contains the address of the next instruction to be
executed.
After fetching the address of the instruction, the value of program counter immediately
increases.
The value increases irrespective of whether the fetched instruction has completely
executed or not.
Effective Address
= Content of Index Register + Address part of the instruction
Effective Address
= Content of Base Register + Address part of the instruction
This addressing mode is a special case of Register Indirect Addressing Mode where-
Effective Address of the Operand
= Content of Register
NOTE-
This addressing mode is again a special case of Register Indirect Addressing Mode
where-
Example-
Assume operand size = 2 bytes.
Here,
First, the instruction register RAUTO will be decremented by 2.
Then, updated value of RAUTO will be 3302 – 2 = 3300.
At memory address 3300, the operand will be found.
NOTE-
Relative Addressing Mode For program relocation at run time i.e. for
position independent code
To change the normal sequence of
execution of instructions
For branch type instructions since it directly
updates the program counter
What is a Subroutine?
A set of instructions that are used repeatedly in a program can be referred to as a Subroutine.
Only one copy of this Instruction is stored in the memory. When a Subroutine is required it
can be called many times during the Execution of a particular program. A call Subroutine
Instruction calls the Subroutine. Care Should be taken while returning a Subroutine as a
Subroutine can be called from a different place from the memory.
The content of the PC must be Saved by the call Subroutine Instruction to make a correct
return to the calling program.
Advantages of Subroutines
Code reuse: Subroutines can be reused in multiple parts of a program, which can save
time and reduce the amount of code that needs to be written.
Modularity: Subroutines help to break complex programs into smaller, more manageable
parts, making them easier to understand, maintain, and modify.
Encapsulation: Subroutines provide a way to encapsulate functionality, hiding the
implementation details from other parts of the program.
Disadvantages of Subroutines
Overhead: Calling a subroutine can incur some overhead, such as the time and memory
required to push and pop data on the stack.
Complexity: Subroutine nesting can make programs more complex and difficult to
understand, particularly if the nesting is deep or the control flow is complicated.
Side Effects: Subroutines can have unintended side effects, such as modifying global
variables or changing the state of the program, which can make debugging and testing
more difficult.
What is Subroutine Nesting?
Subroutine nesting is a common Programming practice In which one Subroutine calls another
Subroutine.
From the above figure, assume that when Subroutine 1 calls Subroutine 2 the return address of
Subroutine 2 should be saved somewhere. So if the link register stores the return address of
Subroutine 1 this will be (destroyed/overwritten) by the return address of Subroutine 2. As the
last Subroutine called is the first one to be returned ( Last in first out format). So stack data
structure is the most efficient way to store the return addresses of the Subroutines .
So from the diagram above first, A is added then B & C. While removing the first C is
Removed then B & A.
Flexibility: Subroutine nesting allows for the creation of complex programs with many
levels of abstraction, making it easier to organize code and reuse functionality.
Efficient use of memory: Stack memory is used to allocate and deallocate local variables,
allowing for efficient use of memory resources.
Error handling: Stack Memory can be used to keep track of the state of the program,
allowing for recovery from errors and exceptions.
Stack overflow: If too many subroutine calls are nested or if the local variables are too
large, the stack memory can overflow, causing the program to crash.
Security vulnerabilities: Stack-based buffer overflows can be exploited by attackers to
execute malicious code or crash the program.
Performance: The use of stack memory can impact program performance, particularly if
the program requires a large amount of memory or if the stack needs to be frequently
accessed.
Parameter passing
What are the Different Types of Filed in Instruction?
A computer performs a task based on the instruction provided. Instruction in computers
comprises groups called fields. These fields contain different information for
computers everything is in 0 and 1 so each field has different significance based on
which a CPU decides what to perform. The most common fields are:
The operation field specifies the operation to be performed like addition.
Address field which contains the location of the operand, i.e., register or memory
location.
Mode field which specifies how operand is to be founded.
Instruction is of variable length depending upon the number of addresses it contains.
Generally, CPU organization is of three types based on the number of address fields:
Single Accumulator organization
General register organization
Stack organization
In the first organization, the operation is done involving a special register called the
accumulator. In the second multiple registers are used for the computation purpose. In
the third organization the work on stack basis operation due to which it does not
contain any address field. Only a single organization doesn’t need to be applied, a
blend of various organizations is mostly what we see generally.
Types of Instructions
Based on the number of addresses, instructions are classified as:
NOTE: We will use the X = (A+B)*(C+D) expression to showcase the procedure.
A stack-based computer does not use the address field in the instruction. To evaluate an
expression first it is converted to reverse Polish Notation i.e. Postfix Notation.
Expression: X = (A+B)*(C+D)
Postfixed : X = AB+CD+*
TOP means top of stack
M[X] is any memory location
PUSH A TOP = A
PUSH B TOP = B
PUSH C TOP = C
PUSH D TOP = D
Expression: X = (A+B)*(C+D)
AC is accumulator
M[] is any memory location
M[T] is temporary location
LOAD A AC = M[A]
ADD B AC = AC + M[B]
STORE T M[T] = AC
LOAD A AC = M[A]
LOAD C AC = M[C]
ADD D AC = AC + M[D]
MUL T AC = AC * M[T]
STORE X M[X] = AC
MUL R1, R2 R1 = R1 * R2
MOV X, R1 M[X] = R1
Three Address Instructions
These instructions specify three operands or addresses, which may be memory locations or
registers. The instruction operates on the contents of all three operands, and the result may be
stored in the same or a different location. For example, a three-address instruction might
multiply the contents of two registers together and add the contents of a third register, storing
the result in a fourth register.
This has three address fields to specify a register or a memory location. Programs created are
much short in size but number of bits per instruction increases. These instructions make the
creation of the program much easier but it does not mean that program will run much faster
because now instructions only contain more information but each micro-operation (changing
the content of the register, loading address in the address bus etc.) will be performed in one
cycle only.
Expression: X = (A+B)*(C+D)
R1, R2 are registers
M[] is any memory location
. Perform arithmetic or logic operation and store the result in CPU registers.
3. Perform addition
4. Load the result into R1,
In Step1:
After issuing the read signal, CPU has to wait for some time to get the MFC
signal During that time PC is updated by 1 through the use of the ALU. This
is accomplished by setting one of the inputs to the ALU (Register Y) to 0
and the other input is available in bus which is current value of PC
At the same time, the carry-in to the ALU is set to 1 and an add operation is
specified
In Step 2:
The updated value is moved from register Z back into the PC. Step 2 is
initiated immediately after issuing the memory Read request without
waiting for completion of memory function. This is possible because step 2
does not use the memory bus and its execution does not depend on the
memory read operation
In Step 3:
Step3 has been delayed until the MFC is received. Once MFC is received,
the word fetched from the memory is transferred to IR (Instruction
Register), Because it is an instruction. Step 1 through 3 constitute the
instruction fetch phase of the control sequence.
The instruction fetch portion is same for all instructions. Next step inwards,
instruction execution phase takes place
The figure shows a 2-bit sequence counter, which is used to develop control signals. The
output obtained from these signals is decoded to generate the required signals in
sequential order.
The hardwired control consists of a combinational circuit that outputs desired controls
for decoding and encoding functions. The instruction that is loaded in the IR is decoded
by the instruction decoder. If the IR is an 8-bit register, then the instruction decoder
generates 28 (256) lines.
Inputs to the encoder are given from the instruction step decoder, external inputs, and
condition codes. All these inputs are used and individual control signals are generated.
The end signal is generated after all the instructions get executed. Furthermore, it results
in the resetting of the control step counter, making it ready to generate the control step
for the next instruction.
The major goal of implementing the hardwired control is to minimize the cost of the
circuit and to achieve greater efficiency in the operation speed. Some of the methods that
have come up for designing the hardwired control logic are as follows −
Sequence Counter Method − This is the most convenient method employed to design the
controller of moderate complexity.
Delay Element Method − This method is dependent on the use of clocked delay elements
for generating the sequence of control signals.
State Table Method − This method involves the traditional algorithmic approach to
design the Notes controller using the classical state table method.
Fig. hardwired control unit
What is Microprogrammed Control Unit?
Each bit that forms the microinstruction is linked to one control signal. When the bit is
set, the control signal is active. When it is cleared the control signal turns inactive. These
microinstructions in a sequence can be saved in the internal ’control’ memory. The
control unit of a microprogram-controlled computer is a computer inside a computer.
There are the following steps followed by the microprogrammed control are −
It can execute any instruction. The CPU should divide it down into a set of sequential
operations. This set of operations are called microinstruction. The sequential micro-
operations need the control signals to execute.
Control signals saved in the ROM are created to execute the instructions on the data
direction. These control signals can control the micro-operations concerned with a
microinstruction that is to be performed at any time step.
The address of the microinstruction is executed next is generated.
The previous 2 steps are copied until all the microinstructions associated with the
instruction in the set are executed.
The address that is supported to the control ROM originates from the micro counter
register. The micro counter received its inputs from a multiplexer that chooses the output
of an address ROM, a current address incrementer, and an address that is saved in the
next address field of the current microinstruction.
Table 8.1
Symbol Opcode Symbolic Description Meaning
Add the content of the
AC AC + M [EA] operand found in the effective
ADD 0000 address (EA) to the content of
AC. The result in AC.
If ( AC < 0) then (PC EA) Branch to the (EA) if the
BRANCH 0001
operand in AC is negative.
Store the content of AC
STORE 0010 M (EA) AC into the memory word
specified by the (EA).
Exchange the data between
EXCHANGE 0011 AC M [EA], M [EA] AC AC and the memory word
specified by the (EA)
Microinstruction Format
Figure 8.5 shows the microinstruction format for the
control memory.
Figure 8.5
Table 8.2
Microoperation fields
Microoperation Symbol
F1 F2 F3
000 None NOP
001 AC ← AC + DR ADD
010 AC ← 0 CLRAC
011 AC ← AC + 1 INCAC
100 AC ← DR DRTAC
101 AR ← DR(0-10) DRTAR
110 AR ← PC PCTAR
111 M [AR] ← DR WRITE
♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦ ♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦ ♦♦♦♦♦♦♦
000 None NOP
001 AC ← AC - DR SUB
010 AC ← AC ν DR OR
011 AC ← AC ∩ DR AND
100 DR ← M [AR] READ
101 DR ← AC ACTDR
110 DR ← DR + 1 INCDR
111 DR (0-10) ← PC PCTDR
♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦ ♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦ ♦♦♦♦♦♦♦
000 None NOP
001 AC ← AC DR XOR
010 AC ← AC COM
011 AC ← shl AC SHL
100 AC ← shr AC SHR
101 PC ← PC + 1 INCPC
110 PC ← AR ARTPC
111 Rserved
Example
The nine bits of the Microoperation fields will then be 000 100 101.
Example
a. The microoperation that specifies the transfer PC ← AR has
the symbol ARTPC, which stands for a transfer from AR to PC.
Table 8.3
Notes
Table 8.4
BR Symbol Function
00 JMP CAR ← AD if condition = 1
CAR ← CAR + 1 if condition = 0
01 CALL CAR ← AD, SBR ← CAR + 1 if condition = 1
CAR ← CAR + 1 if condition = 0
10 RET CAR ← SBR (Return from subroutine)
11 MAP CAR(2-5) ← DR(11-14), CAR(0,1,6) ← 0
Note.
The JUMP & CALL operations are identical
except that a CALL microoperation stores the
return address in the subroutine register SBR.
Note.
It is clear from the table 8.4 that the last two conditions in
the BR field are independent of the values in the CD and
AD fields.
Symbolic Microinstructions
The symbols defined in tables 8.2, 8.3, and 8.4 could be used to
specify microinstructions in symbolic form.
Note.
The pseudoinstruction ORG is used to define the origin, or
first address, of a microprogram routine. Thus the symbol
ORG 37 informs the assembler to place the next
microinstruction in control memory at decimal address 37,
which is equivalent to the binary address 0100101.
The Fetch Routine
As it was mentioned before, the control memory has 128 words, of
20 bits each.
The first 64 words (addresses 0 to 63) are to be occupied by the
routines for the 16 instructions. The last 64 words may be used for any
other purpose.
The fetch routine needs three microinstructions, which are placed in the
control memory at addresses 64, 65, and 66.
AR← PC
DR ← M [AR], PC ← PC + 1
AR ← DR (0-10), CAR (2-5) ← DR (11-14), CAR (0, 1, 6) ← 0
ORG 64
FETCH: PCTAR U JMP NEXT
READ, INCPC U JMP NEXT
DRTAR U MAP
Using tables 8.2, 8.3, and 8.4, the translation of the symbolic microprogram to
binary produces the following binary microprogram fetch routine.
F1 F2 F3 CD BR AD
1000000 110 000 000 00 00 1000001
1000001 000 100 101 00 00 1000010
1000010 101 000 000 00 11 0000000
Symbolic Microprogram
Return back to the fetch routine, the execution of the third (MAP)
microinstruction in the fetch routine results in a branch to address
0xxxx00, where xxxx represents the four bits of the operation code.
Example
Suppose that the instruction is STORE instruction whose operation
code is 0010. The MAP microinstruction will transfer to CAR the
address 0 0010 00 (decimal 8), which is the start address for the STORE
routine in control memory.
The first address for the ADD, BRANCH and EXCHANGE routines are 0
0000 00 (decimal 0), 0 0001 00 (decimal 4), and 0 0011 00 (decimal 12)
respectively. The first address for the other 12 routines are at address values
16, 20, 24, ... , 60. This gives four words in control memory for each routine.
Table 8.5
Label Microoperations CD BR AD
Symbolic Microprograms
for Computer Instructions
ADD, BRANCH, STORE, EXCHANGE
ORG 0
ADD: NOP I CALL INDRCT
READ U JMP NEXT
ADD U JMP FETCH
ORG 4
BRANCH: NOP S JMP OVER
NOP U JMP FETCH
OVER: NOP I CALL INDRCT
ARTPC U JMP FETCH
ORG 8
STORE: NOP I CALL INDRCT
ACTDR U JMP NEXT
WRITE U JMP FETCH
ORG 12
EXCHANGE: NOP I CALL INDRCT
READ U JMP NEXT
ACTDR, DRTAC U JMP NEXT
WRITE U JMP FETCH
Symbolic Microprograms
For Subroutines
FETCH & INDRCT
ORG 64
FETCH: PCTAR U JMP NEXT
READ, INCPC U JMP NEXT
DRTAR U MAP
INDRCT: READ U JMP NEXT
DRTAR U RET
How the transfer and return from the indirect subroutine occurs
Assume that the MAP microinstruction at the end of the fetch routine
caused a branch to address 0, where the ADD routine is stored. The first
microinstruction in the ADD routine calls subroutine INDRCT,
conditioned on status bit I. If I = 1, a branch to INDRCT occurs and the
return address (address 1 in this case) is stored in the subroutine register
SBR.