8086 Microprocessor
Instruction Set classes 1 and 2
INSTRUCTION SET
8086 Microprocessor
Instruction Set
8086 supports 6 types of instructions.
1. Data Transfer Instructions
2. Arithmetic Instructions
3. Logical Instructions
4. String manipulation Instructions
5. Process Control Instructions
6. Control Transfer Instructions
3
8086 Microprocessor
Instruction Set
1. Data Transfer Instructions
Instructions that are used to transfer data/ address in to
registers, memory locations and I/O ports.
Generally involve two operands: Source operand and
Destination operand of the same size.
Source: Register or a memory location or an immediate data
Destination : Register or a memory location.
The size should be a either a byte or a word.
A 8-bit data can only be moved to 8-bit register/ memory
and a 16-bit data can be moved to 16-bit register/ memory.
4
8086 Microprocessor
Instruction Set
1. Data Transfer Instructions
Mnemonics: MOV, XCHG, PUSH, POP, IN, OUT …
MOV reg2/ mem, reg1/ mem
MOV reg2, reg1 (reg2) ← (reg1)
MOV mem, reg1 (mem) ← (reg1)
MOV reg2, mem (reg2) ← (mem)
MOV reg/ mem, data
MOV reg, data (reg) ← data
MOV mem, data (mem) ← data
XCHG reg2/ mem, reg1
XCHG reg2, reg1 (reg2) ↔ (reg1)
XCHG mem, reg1 (mem) ↔ (reg1)
5
8086 Microprocessor
Instruction Set
1. Data Transfer Instructions
Mnemonics: MOV, XCHG, PUSH, POP, IN, OUT …
PUSH reg16/ mem
PUSH reg16 (SP) ← (SP) – 2
MA S = (SS) x 1610 + SP
(MA S ; MA S + 1) ← (reg16)
PUSH mem (SP) ← (SP) – 2
MA S = (SS) x 1610 + SP
(MA S ; MA S + 1) ← (mem)
POP reg16/ mem
POP reg16 MA S = (SS) x 1610 + SP
(reg16) ← (MA S ; MA S + 1)
(SP) ← (SP) + 2
POP mem MA S = (SS) x 1610 + SP
(mem) ← (MA S ; MA S + 1)
(SP) ← (SP) + 2
6
8086 Microprocessor
Instruction Set
1. Data Transfer Instructions
Mnemonics: MOV, XCHG, PUSH, POP, IN, OUT …
IN A, [DX] OUT [DX], A
IN AL, [DX] PORTaddr = (DX) OUT [DX], AL PORTaddr = (DX)
(AL) ← (PORT) (PORT) ← (AL)
IN AX, [DX] PORTaddr = (DX) OUT [DX], AX PORTaddr = (DX)
(AX) ← (PORT) (PORT) ← (AX)
IN A, addr8 OUT addr8, A
IN AL, addr8 (AL) ← (addr8) OUT addr8, AL (addr8) ← (AL)
IN AX, addr8 (AX) ← (addr8) OUT addr8, AX (addr8) ← (AX)
7
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
ADD reg2/ mem, reg1/mem
ADC reg2, reg1 (reg2) ← (reg1) + (reg2)
ADC reg2, mem (reg2) ← (reg2) + (mem)
ADC mem, reg1 (mem) ← (mem)+(reg1)
ADD reg/mem, data
ADD reg, data (reg) ← (reg)+ data
ADD mem, data (mem) ← (mem)+data
ADD A, data
ADD AL, data8 (AL) ← (AL) + data8
ADD AX, data16 (AX) ← (AX) +data16
8
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
ADC reg2/ mem, reg1/mem
ADC reg2, reg1 (reg2) ← (reg1) + (reg2)+CF
ADC reg2, mem (reg2) ← (reg2) + (mem)+CF
ADC mem, reg1 (mem) ← (mem)+(reg1)+CF
ADC reg/mem, data
ADC reg, data (reg) ← (reg)+ data+CF
ADC mem, data (mem) ← (mem)+data+CF
ADDC A, data
ADD AL, data8 (AL) ← (AL) + data8+CF
ADD AX, data16 (AX) ← (AX) +data16+CF
9
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
SUB reg2/ mem, reg1/mem
SUB reg2, reg1 (reg2) ← (reg1) - (reg2)
SUB reg2, mem (reg2) ← (reg2) - (mem)
SUB mem, reg1 (mem) ← (mem) - (reg1)
SUB reg/mem, data
SUB reg, data (reg) ← (reg) - data
SUB mem, data (mem) ← (mem) - data
SUB A, data
SUB AL, data8 (AL) ← (AL) - data8
SUB AX, data16 (AX) ← (AX) - data16
10
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
SBB reg2/ mem, reg1/mem
SBB reg2, reg1 (reg2) ← (reg1) - (reg2) - CF
SBB reg2, mem (reg2) ← (reg2) - (mem)- CF
SBB mem, reg1 (mem) ← (mem) - (reg1) –CF
SBB reg/mem, data
SBB reg, data (reg) ← (reg) – data - CF
SBB mem, data (mem) ← (mem) - data - CF
SBB A, data
SBB AL, data8 (AL) ← (AL) - data8 - CF
SBB AX, data16 (AX) ← (AX) - data16 - CF
11
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
INC reg/ mem
INC reg8 (reg8) ← (reg8) + 1
INC reg16 (reg16) ← (reg16) + 1
INC mem (mem) ← (mem) + 1
DEC reg/ mem
DEC reg8 (reg8) ← (reg8) - 1
DEC reg16 (reg16) ← (reg16) - 1
DEC mem (mem) ← (mem) - 1
12
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
MUL reg/ mem
MUL reg For byte : (AX) ← (AL) x (reg8)
For word : (DX)(AX) ← (AX) x (reg16)
MUL mem For byte : (AX) ← (AL) x (mem8)
For word : (DX)(AX) ← (AX) x (mem16)
IMUL reg/ mem
IMUL reg For byte : (AX) ← (AL) x (reg8)
For word : (DX)(AX) ← (AX) x (reg16)
IMUL mem For byte : (AX) ← (AX) x (mem8)
For word : (DX)(AX) ← (AX) x (mem16)
13
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
DIV reg/ mem
DIV reg For 16-bit :- 8-bit :
(AL) ← (AX) :- (reg8) Quotient
(AH) ← (AX) MOD(reg8) Remainder
For 32-bit :- 16-bit :
(AX) ← (DX)(AX) :- (reg16) Quotient
(DX) ← (DX)(AX) MOD(reg16) Remainder
DIV mem For 16-bit :- 8-bit :
(AL) ← (AX) :- (mem8) Quotient
(AH) ← (AX) MOD(mem8) Remainder
For 32-bit :- 16-bit :
(AX) ← (DX)(AX) :- (mem16) Quotient
(DX) ← (DX)(AX) MOD(mem16) Remainder
14
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
IDIV reg/ mem
IDIV reg For 16-bit :- 8-bit :
(AL) ← (AX) :- (reg8) Quotient
(AH) ← (AX) MOD(reg8) Remainder
For 32-bit :- 16-bit :
(AX) ← (DX)(AX) :- (reg16) Quotient
(DX) ← (DX)(AX) MOD(reg16) Remainder
IDIV mem For 16-bit :- 8-bit :
(AL) ← (AX) :- (mem8) Quotient
(AH) ← (AX) MOD(mem8) Remainder
For 32-bit :- 16-bit :
(AX) ← (DX)(AX) :- (mem16) Quotient
(DX) ← (DX)(AX) MOD(mem16) Remainder
15
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
CMP reg2/mem, reg1/ mem
CMP reg2, reg1 Modify flags ← (reg2) – (reg1)
If (reg2) > (reg1) then CF=0, ZF=0, SF=0
If (reg2) < (reg1) then CF=1, ZF=0, SF=1
If (reg2) = (reg1) then CF=0, ZF=1, SF=0
CMP reg2, mem Modify flags ← (reg2) – (mem)
If (reg2) > (mem) then CF=0, ZF=0, SF=0
If (reg2) < (mem) then CF=1, ZF=0, SF=1
If (reg2) = (mem) then CF=0, ZF=1, SF=0
CMP mem, reg1 Modify flags ← (mem) – (reg1)
If (mem) > (reg1) then CF=0, ZF=0, SF=0
If (mem) < (reg1) then CF=1, ZF=0, SF=1
If (mem) = (reg1) then CF=0, ZF=1, SF=0
16
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
CMP reg/mem, data
CMP reg, data Modify flags ← (reg) – (data)
If (reg) > data then CF=0, ZF=0, SF=0
If (reg) < data then CF=1, ZF=0, SF=1
If (reg) = data then CF=0, ZF=1, SF=0
CMP mem, data Modify flags ← (mem) – (mem)
If (mem) > data then CF=0, ZF=0, SF=0
If (mem) < data then CF=1, ZF=0, SF=1
If (mem) = data then CF=0, ZF=1, SF=0
17
8086 Microprocessor
Instruction Set
2. Arithmetic Instructions
Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP…
CMP A, data
CMP AL, data8 Modify flags ← (AL) – data8
If (AL) > data8 then CF=0, ZF=0, SF=0
If (AL) < data8 then CF=1, ZF=0, SF=1
If (AL) = data8 then CF=0, ZF=1, SF=0
CMP AX, data16 Modify flags ← (AX) – data16
If (AX) > data16 then CF=0, ZF=0, SF=0
If (mem) < data16 then CF=1, ZF=0, SF=1
If (mem) = data16 then CF=0, ZF=1, SF=0
18
8086 Microprocessor
Instruction Set
3. Logical Instructions
Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL …
19
8086 Microprocessor
Instruction Set
3. Logical Instructions
Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL …
20
8086 Microprocessor
Instruction Set
3. Logical Instructions
Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL …
21
8086 Microprocessor
Instruction Set
3. Logical Instructions
Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL …
22