Write short notes on general purpose registers (AX,BX,CX,DX,SP,BP,SI,DI) and ALU in Intel 8086 microprocessor

Last updated on October 12th, 2022 at 10:20 pm

General Purpose Registers

In computer architecture, registers in processors are quickly accessible locations available to a computer’s central processing unit (CPU). Registers usually consist of a small amount of fast storage, although some registers have specific hardware functions, and may be read-only or write-only. Registers are normally measured by the number of bits they can hold, for example, an “8-bit register”, “32-bit register” or a “64-bit register” (or even with more bits).

General Registers or General Purpose Registers are kind of registers which can store both data and addresses. All general registers of the intel 8086 microprocessor can be used for arithmetic and logic operations.

General Purpose Registers (AX,BX,CX,DX,SP,BP,SI,DI) and ALU in Intel 8086

AX (Accumulator)

This is accumulator register. It is of 16 bits and is divided into two 8-bit registers AH and AL to also perform 8-bit instructions. It is used in arithmetic, logic and data transfer instructions in 8086 microprocessors. In manipulation and division, one of the numbers involved must be in AX or AL.

BX (Base Register)

This is the base register. It is of 16 bits and is divided into two 8-bit registers BH and BL. BX register is an address register. It usually contains a data pointer used for based, based indexed or register indirect addressing.    

CX (Count register)

This is Count register. It is of 16 bits and is divided into two 8-bit registers CH and CL to also perform 8-bit instructions. This serves as a loop counter. Program loop constructions are facilitated by it. Count register can also be used as a counter in string manipulation and shift/rotate instruction.    

DX (Data Register)

This is data register. It is of 16 bits and is divided into two 8-bit registers DH and DL to also perform 8-bit instructions. Data register can be used as a port number in I/O operations. It is also used in multiplication and division.    

SP (Stack Pointer)

This is stack pointer register pointing to program stack. It is used in conjunction with SS for accessing the stack segment.  It is of 16 bits. It points to the topmost item of the stack. If the stack is empty the stack pointer will be (FFFE)H. Its offset address is relative to the stack segment.

BP (Base Pointer)

This is base pointer register pointing to data in stack segment. Unlike SP, we can use BP to access data in the other segments. It is of 16 bits. It is primarily used in accessing parameters passed by the stack. Its offset address is relative to the stack segment.

SI (Source Index)

This is source index register which is used to point to memory locations in the data segment addressed by DS. Thus, when we increment the contents of SI, we can easily access consecutive memory locations.  It is of 16 bits. Its offset is relative to the data segment.

DI (Destination Index)

This is destination index register performs the same function as SI. There is a class of instructions called string operations, that use DI to access the memory locations addressed by ES.

ALU (Arithmetic & Logic Unit)

This unit can perform various arithmetic and logical operation, if required, based on the instruction to be executed. It can perform arithmetical operations, such as add, subtract, increment, decrements, convert byte/word and compare etc. and logical operations, such as AND, OR, exclusive OR, shift/rotate and test etc.

Read More:


  1. Just to clarify: The AX register is an accumulator ONLY for multiplication and division because MUL and DIV use AX as the implicit destination register. It is NOT an accumulator for ADD or ADC because these operations are true binary operations where the destination register is specified explicitly.

Comments are closed.