8086 Microprocessor
8086 Microprocessor
8086 requires one phase clock with a 33% duty cycle to provide optimized internal timing.
– Range of clock:
Execution Unit
Execution Unit
Instruction Decoder
Translates instructions fetched from memory into a series of actions which EU carries out
Control System
Generates timing and control signals to perform the internal operations of the
microprocessor
Arithmetic Logic Unit
EU has a 16-bit ALU which can ADD, SUBTRACT, AND, OR, increment, decrement,
complement or shift binary numbers
General Purpose Registers
Pipelining:EU of 8086 does not have to wait in between for BIU to fetch next instruction byte
from memory
So the presence of a queue in 8086 speeds up the processing
Fetching the next instruction while the current instruction executes is called pipelining
Memory Segmentation
8086 has a 20-bit address bus , So it can address a maximum of 1MB of memory
8086 can work with only four 64KB segments at a time within this 1MB range
These four memory segments are called
• Code segment • Stack segment • Data segment • Extra segment
Code Segment
1. That part of memory from where BIU is currently fetching instruction code bytes Stack
Segment
2. A section of memory set aside to store addresses and data while a subprogram executes
Data & Extra Segments
Used for storing data values to be used in the program.
Segment Registers
hold the upper 16-bits of the starting address for each of the segments
The four segment registers are
• CS (Code Segment register)
• DS (Data Segment register)
• SS (Stack Segment register)
• ES (Extra Segment register)
Address of a segment is of 20-bits
A segment register stores only upper 16- bits
BIU always inserts zeros for the lowest 4- bits of the 20-bit starting address.
E.g. if CS = 348AH, then the code segment will start at 348A0H
A 64-KB segment can be located anywhere in the memory, but will start at an address
with zeros in the lowest 4-bits
a 16-bit register
Holds 16-bit offset, of the next instruction byte in the code segment
BIU uses IP and CS registers to generate the 20-bit address of the instruction to be
fetched from memory
Stack Segment (SS) Register & Stack Pointer (SP) Register
7. Based & Indexed Addressing Mode 8. Based & Indexed with displacement Addressing
• The instruction will specify the name of the register which holds the data to be operated by the
instruction.
• In immediate addressing mode, an 8-bit or 16-bit data is specified as part of the instruction
• EX:
• Memory address is the sum of the BX or BP base register plus a displacement within instruction
• Memory address is the sum of the index register & base register
• Memory address is the sum of an index register , base register and displacement within instruction
• The memory source address is a register SI in the data segment, and the memory destination address is
register DI in the extra segment
• Opcode:- It stands for operational code. It specifies the type of operation to be performed by
CPU. It is the first field in the machine language instruction format.
• Operand:- We can also say it as data on which operation should act. Operands may be register
values or memory values. The CPU executes the instructions using information present in this
field. It may be 8-bit data or 16-bit data.
Assembler:- it converts the instruction into sequence of binary bits, so that this bits can be read
by the processor.
• Mnemonics:- these are the symbolic codes for either instructions or commands to perform a
particular function.
E.g. (1). MOV CX, 037A H; (2). MOV AL, BL; (3). MOV BX, [0301 H];
Stack Pointer
It is a 16-bit register, contains the address of the data item currently on top of the stack.
Stack operation includes pushing (providing) data on to the stack and popping (taking)data from
the stack.
Pushing operation decrements stack pointer and Popping operation increments stack pointer. i.e.
there is a last in first out (LIFO) operation
E.g. (1). POP AX; (2). POP DS; (3). POP [5000H];
(4). XCHG Destination, source;
(7) XLAT
(11). LAHF:- This instruction loads the AH register from the contents of lower byte of the flag
register. This command is used to observe the status of the all conditional flags of flag register.
E.g. LAHF;
(12). SAHF:- This instruction sets or resets all conditional flags of flag register with respect to
the corresponding bit positions. If bit position in AH is 1 then related flag is set otherwise flag
will be reset.E.g. SAHF;
It copies contents of flag register to the memory location pointed by stack pointer.
E.g. PUSH F;
It copies contents of memory location pointed by stack pointer to the flag register.
E.g. POP F;
This instruction adds the contents of source operand with the contents of destination
operand.
The source may be immediate data, memory location or register.
The destination may be memory location or register.
The result is stored in destination operand.
AX is the default destination register.
E.g. (1). ADD AX,2020H; (2). ADD AX,BX;
This instruction adds the contents of source operand with the contents of destination
operand with carry flag bit.
The source may be immediate data, memory location or register.
The destination may be memory location or register.
The result is stored in destination operand.
AX is the default destination register.
E.g. (1). ADC AX,2020H; (2). ADC AX,BX;
4. DEC source
This instruction subtracts the contents of source operand from contents of destination.
The source may be immediate data, memory location or register.
The destination may be memory location or register.
The result is stored in the destination place.
E.g. (1). SUB AX,1000H; (2). SUB AX,BX;
This instruction subtracts the contents of source operand & borrow from contents of
destination operand.
The source may be immediate data, memory location or register.
The destination may be memory location or register.
The result is stored in the destination place.
E.g. (1). SBB AX,1000H; (2). SBB AX,BX;
This instruction compares the contents of source operand with the contents of destination
operands.
The source may be immediate data, memory location or register.
The destination may be memory location or register.
Then resulting carry & zero flag will be set or reset.
E.g. (1). CMP AX,1000H; (2). CMP AX,BX;
It is used to make sure that the result of adding two BCD numbers is adjusted to be a
correct BCD number.
It only works on AL register.
It is used to make sure that the result of subtracting two BCD numbers is adjusted to be a
correct BCD number.
It only works on AL register.
MUL operand
Unsigned Multiplication.
Operand contents are positively signed.
Operand may be general purpose register or memory location.
If operand is of 8-bit then multiply it with contents of AL.
If operand is of 16-bit then multiply it with contents of AX.
Result is stored in accumulator (AX).
E.g. (1). MUL BH // AX= AL*BH; // (+3) * (+4) = +12.
IMUL operand
Signed Multiplication.
Operand contents are negatively signed.
Operand may be general purpose register, memory location or index register.
If operand is of 8-bit then multiply it with contents of AL.
If operand is of 16-bit then multiply it with contents of AX.
Result is stored in accumulator (AX).
E.g. (1). IMUL BH // AX= AL*BH; // (-3) * (-4) = 12.
DIV operand
Unsigned Division.
Operand may be register or memory.
Operand contents are positively signed.
Operand may be general purpose register or memory location.
AL=AX/Operand (8-bit/16-bit) & AH=Remainder.
E.g. MOV AX, 0203 // AX=0203
MOV BL, 04 // BL=04
DIV BL // AL=0203/04=50 (i.e. AL=50 & AH=03)
IDIV operand
Signed Division.
Operand may be register or memory.
Operand contents are negatively signed.
Operand may be general purpose register or memory location.
AL=AX/Operand (8-bit/16-bit) & AH=Remainder.
o E.g. MOV AX, -0203 // AX=-0203
MOV BL, 04 // BL=04
IDIV BL // AL=-0203/04=-50 (i.e. AL=-50 &AH=03)
AND
– Especially used in clearing certain bits (masking) xxxx xxxx AND 0000 1111 = 0000 xxxx
• OR
– Used in setting certain bits . xxxx xxxx OR 0000 1111 = xxxx 1111(Set the upper four bits)
XOR
-Example: Clear bits 0 and 1, set bits 6 and 7, invert bit 5 of register CL:
SHL Instruction
The SHL (shift left) instruction performs a logical left shift on the destination operand, filling
the lowest bit with 0.
SHR Instruction
The SHR (shift right) instruction performs a logical right shift on the destination operand.
The highest bit position is filled with a zero.
SAR Instruction
SAR (shift arithmetic right) performs a right arithmetic shift on the destination operand.
For example, 5 * 22 = 20
For example, 80 / 23 = 10
ROL Instruction
RCL Instruction
RCR Instruction
CALL Des:
JMP Des:
This instruction is used for unconditional jump from one place to another.
All the conditional jumps follow some conditional statements or any instruction that
affects the flag.
Loop Des:
SCAS String:
It scans a string.
It compares the String with byte in AL or with word in AX.
REP (Repeat):
STD:
CLD:
The HLT instruction will cause the 8086 to stop fetching and executing instructions.
NOP instruction
this instruction simply takes up three clock cycles and does no processing.
LOCK instruction:this is a prefix to an instruction. This prefix makes sure that during
execution of the instruction, control of system bus is not taken by other microprocessor.
WAIT instruction
this instruction takes 8086 to an idle condition. The CPU will not do any processing during
this.
Assembler Directives
ASSUME Directive - The ASSUME directive is used to tell the assembler that the name of the
logical segment should be used for a specified segment.
• DB(define byte) - DB directive is used to declare a byte type variable or to store a byte in
memory location.
• DW(define word) - The DW directive is used to define a variable of type word or to reserve
storage location of type word in memory.
DD(define double word) :This directive is used to declare a variable of type double word or
• DQ (define quadword) :This directive is used to tell the assembler to declare a variable 4
END- End program .This directive indicates the assembler that this is the end of the program
module. The assembler ignores any statements after an END directive.
• ENDP- End procedure: It indicates the end of the procedure (subroutine) to the assembler.
• ENDS-End Segment: This directive is used with the name of the segment to indicate the end of
that logical segment.
• EQU - This EQU directive is used to give a name to some value or to a symbol.
• PTR -This PTR operator is used to assign a specific type of a variable or to a label.
• ORG -Originate : The ORG statement changes the starting offset address of the data.
Modular Programming
Generally , industry-programming projects consist of thousands of lines of instructions or
operation code.
• The size of the modules are reduced to a humanly comprehensible and manageable level.
• Program is composed from several smaller modules. Modules could be developed by separate
teams concurrently.OBJ modules(Object modules).
CHARACTERISTICS of module:
DRAWBACKS:
MODULAR PROGRAMMING:
2.STACKS
3.Procedures
5.Macros
LINKER
• A linker is a program used to join together several object files into one large object file.
• The linker produces a link file which contains the binary codes for all the combined modules.
The loader is a part of the operating system and places codes into the memory after reading the
‘.exe’ file
A program called locator reallocates the linked file and creates a file for permanent location of
codes in a standard format.
Loader
->Loader is a utility program which takes object code as input prepares it for execution and loads
the executable code into the memory .
Functions of loaders: 1.It allocates the space for program in the memory(Allocation)
2.It resolves the code between the object modules(Linking)
3. some address dependent locations in the program, address constants must be adjusted
according to allocated space(Relocation)
4. It also places all the machine instructions and data of corresponding programs and subroutines
into the memory .(Loading)
• When a single subroutine is changed then all the subroutine needs to be reassembled.
• The binary symbolic subroutine (BSS) loader used in IBM 7094 machine is relocating loader.
• The assembler reads one sourced program and assembles each procedure segment
independently
The output of the relocating loader is the object program
• The assembler takes the source program as input; this source program may call some external
routines.
SEGMENT COMBINATION:
ASM-86 assembler regulating the way segments with the same name are concatenated &
sometimes they are overlaid.
Procedures
Procedure is a part of code that can be called from your program in order to make some specific
task. Procedures make program more structural and easier to understand.
name PROC
RET
name ENDP
STACK:
• PUSH and POP instruction are especially useful because we don't have too much registers to
operate
3. Restore the original value of the register from stack (using POP).
MACROS:
<instructions>
ENDM
• While the CPU is executing a program, on ‘interrupt’ breaks the normal sequence of execution
of instructions, diverts its execution to some other program called Interrupt Service Routine
(ISR)
Maskable Interrupt: An Interrupt that can be disabled or ignored by the instructions of CPU are
called as Maskable Interrupt.
• Non- Maskable Interrupt: An interrupt that cannot be disabled or ignored by the instructions of
CPU are called as Non- Maskable Interrupt.
• Software interrupts are machine instructions that amount to a call to the designated interrupt
subroutine, usually identified by interrupt number. Ex: INT0 - INT255
INTERRUPT VECTOR TABLE
1. TYPE 0 TO TYPE 4 INTERRUPTS These Are Used For Fixed Operations And Hence Are
Called Dedicated Interrupts
Not Used By 8086,reserved For Higher Processors Like 80286 80386 Etc
Available For User, called User Defined Interrupts These Can Be H/W Interrupts And Activated
Through Intr Line Or Can Be S/W Interrupts.
used for executing the program in single step mode by setting Trap Flag
MOV BP,SP
OR [BP+0],0100H;SET BIT8
POPF
This Interrupt is used for executing ISR of NMI Pin (Positive Egde Signal). NMI cant be masked
by S/W
Type – 3 Break Point Interrupt: used for providing BREAK POINTS in the program
Type – 4 Over Flow Interrupt :used to handle any Overflow Error after signed arithmetic