8086 Addressing Modes for Accessing Data
Total Page:16
File Type:pdf, Size:1020Kb
www.bookspar.com | Website for students | VTU NOTES 8086 Addressing Modes for accessing data
Addressing modes provide convenience in accessing data needed in an instruction.
8086 Addressing Modes for accessing data
Immediate Register addressing Memory addressing I/O port addressing Addressing mode (for source operand only)
Immediate Addressing
Before After Ex1: MOV DX, 1234H DX ABCDH 1234H
Before After Ex2: MOV CH, 23H CH 4DH 23H
Register Addressing
Before After Ex1: MOV CX, SI CX 1234H 5678H
SI 5678H 5678H
Before After Ex2: MOV DL, AH Dl 89H BCH
AH BCH BCH
Memory Addressing
Direct Addressing Indirect Addressing
Memory Indirect Addressing
Register Based Addressing Indexed Based Based Indexed Indirect with Addressing with Indexed addressing with displacement displacement addressing displacement Memory Direct Addressing
www.bookspar.com | Website for students | VTU NOTES 1 www.bookspar.com | Website for students | VTU NOTES
Before After Ex1: MOV BX, DS:5634H BX ABCDH 8645H
DS:5634H 45H LS byte DS:5635H 86H MS byte
Before After Ex2: MOV CL, DS:5634H CL F2H 45H
DS:5634H 45H DS:5635H 86H
Ex3: MOV BH, LOC Before After Program BH C5H 78H .DATA LOC DB 78H
Register Indirect Addressing
Before After Ex1: MOV CL, [SI] CL 20H 78H
SI 3456H
DS:3456H 78H
Before After Ex2: MOV DX, [BX] DX F232H 3567H
BX A2B2H
DS:A2B2H 67H LS byte DS:A2B3H 35H MS byte
Before After Ex3: MOV AH, [DI] AH 30H 86H
DI 3400H
DS:3400H 86H
www.bookspar.com | Website for students | VTU NOTES 2 www.bookspar.com | Website for students | VTU NOTES Only SI, DI and BX can be used inside [ ] from memory addressing point of view. From user point of view [BP] is also possible. This scheme provides 3 ways of addressing an operand in memory.
Based Addressing with displacement
Before After Ex1: MOV DH, 2345H[BX] DH 45H 67H
2345H is 16-bit displacement BX 4000H
4000 + 2345 = 6345H DS:6345H 67H
Before After Ex2: MOV AX, 45H[BP] AX 1000H CDABH
45H is 8-bit displacement BP 3000H
3000 + 45 = 3045H SS:3045H ABH LS byte It is SS when BP is used SS:3346H CDH MS byte
Base register can only be BX or BP. This scheme provides 4 ways of addressing an operand in memory.
Indexed Addressing with displacement
Before After Ex1: MOV CL, 2345H[SI] CL 60H 85H
2345H is 16-bit displacement SI 6000H
6000 + 2345 = 8345H DS:8345H 85H
Before After Ex2: MOV DX, 37H[DI] DX 7000H B2A2H
37H is 8-bit displacement DI 5000H
5000H+ 37H = 5037H DS:5037H A2H LS byte DS:5038H B2H MS byte
Index register can only be SI or DI. This scheme provides 4 ways of addressing an operand in memory. Based Indexed Addressing
www.bookspar.com | Website for students | VTU NOTES 3 www.bookspar.com | Website for students | VTU NOTES Before After Ex1: MOV CL, [SI][BX] CL 40H 67H
SI 2000H
BX 0300H
2000H + 0300H = 2300H DS:2300H 67H
Before After Ex2: MOV CX, [BP][DI] CX 6000H 6385H
BP 3000H
DI 0020H
2000H + 0300H = 2300H SS:3020H 85H LS byte It is SS when BP is used SS:3021H 63H MS byte
This scheme provides 4 ways of addressing an operand in memory. One register must be a Base register and the other must be an Index register. For ex. MOV CX, [BX][BP] is an invalid instruction.
Based Indexed Addressing with Displacement
Before After Ex1: MOV DL, 37H[BX+DI] DL 40H 12H 37H is 8-bit displacement BX 2000H DI 0050H 2000H + 0050H + 37H = 2300H DS:2087H 12H
Before After Ex2: MOV BX, 1234H[SI+BP] BX 3000H 3665H SI 4000H BP 0020H
4000H + 0020H +1234 = 5254H SS:5254H 65H LS byte It is SS when BP is used SS:5255H 36H MS byte This scheme provides 8 ways of addressing an operand in memory.
www.bookspar.com | Website for students | VTU NOTES 4 www.bookspar.com | Website for students | VTU NOTES Memory modes as derivatives of Based Indexed Addressing with Displacement
Instruction Base Index Displace Addressing mode Register Register ment MOV BX, DS:5634H No No Yes Direct Addressing MOV CL, [SI] No Yes No Register Indirect MOV DX, [BX] Yes No No MOV DH, 2345H[BX} Yes No Yes Based Addressing with Displacement MOV DX, 35H[DI] No Yes Yes Indexed Addressing with displacement MOV CL, 37H[SI+BX] Yes Yes No Based Indexed Addressing MOV DL, 37H[BX+DI] Yes Yes Yes Based Indexed Addressing with displacement
I/O port Addressing
I/O port Addressing
Fixed port addressing Variable port addressing Or Direct Port addressing Or Indirect port addressing
Fixed Port Addressing
Before After Ex. 1: IN AL, 83H AL 34H 78H Input port no. 83H 78H
Before After Ex. 2: IN AX, 83H AX 5634H F278H Input port no. 83H 78H Input port no. 84H F2H
Before After Ex. 3: OUT 83H, AL AL 50H Output port no. 83H 65H 50H
Before After Ex. 4: OUT 83H, AX AX 6050H Output port no. 83H 65H 50H Output port no. 84H 40H 60H IN and OUT instructions are allowed to use only AL or AX registers. Port address in the range 00 to FFH is provided in the instruction directly.
www.bookspar.com | Website for students | VTU NOTES 5 www.bookspar.com | Website for students | VTU NOTES Variable Port Addressing
I/O port address is provided in DX register. Port address ranges from 0000 to FFFFH. Data transfer with AL or AX only.
Before After Ex. 1: IN AL, DX AL 30H 60H
DX 1234H
Input port no. 1234H 60H
Before After Ex. 2: IN AX, DX AX 3040H 7060H
DX 4000H
Input port no. 4000H 60H Input port no. 4001H 70H
Before After Ex. 3: OUT DX, AL AL 65H
DX 5000H
Output port no. 5000H 80H 65H
Before After Ex. 4: OUT DX, AX AX 4567H
DX 5000H
Output port no. 5000H 25H 67H Output port no. 5001H 36H 45H
8086 Instruction Template
Need for Instruction Template 8085 has 246 opcodes. The opcodes can be printed on an A4 size paper. 8086 has about 13000 opcodes. A book of about 60 pages is needed for printing the opcodes.
Concept of Template In 8085, MOV r1, r2 (ex. MOV A, B) has the following template.
0 1 3-bit r1 code 3-bit r2 code
www.bookspar.com | Website for students | VTU NOTES 6 www.bookspar.com | Website for students | VTU NOTES
3-bit Register code Register 000 B 001 C 010 D 011 E 100 H 101 L 110 M 111 A
Ex. 1: Code for MOV A, B is 01 11 1 000 = 78H 7 8
Ex.2: Code for MOV M, D is 01 11 0 010 = 72H 7 2
Using the template for MOV r1, r2 we can generate opcodes of 26 = 64 opcodes.
8086 Template for data transfer between REG and R/M
1 0 0 0 1 0 D W MOD REG R/M 2 bits 3 bits 3 bits
REG = A register of 8086 (8-bit or 16-bits) (except Segment registers, IP, and Flags registers) Thus REG = AL/ BL/ CL/ DL/ AH/ BH/ CH/ DH/ AX/ BX/ CX/ DX/ SI/ DI/ BP/ SP
R/ M = Register (as defined above) or Memory contents (8-bits or 16-bits)
W = 1 means Word operation W = 0 means Byte operation
D = 1 means REG is Destination register D = 0 means REG is source register
MOD = 00 means R/M specifies Memory with no displacement MOD = 01 means R/M specifies Memory with 8-bit displacement MOD = 10 means R/M specifies Memory with 16-bit displacement MOD = 11 means R/M specifies a Register
3-bit Register name Register When W = 1 When W = 0 code
www.bookspar.com | Website for students | VTU NOTES 7 www.bookspar.com | Website for students | VTU NOTES 000 AX AL 001 CX CL 010 DX DL 011 BX BL 100 SP AH 101 BP CH 110 SI DH 111 DI BH
Aid to remember: ALl Children Drink Bournvita (AL, CL, DL, BL) SPecial Beverages SIamese DrInk (SP, BP, SI, DI)
Case of MOD = 11
Example: Code for MOV AX, BX treated as ‘Move from BX to destination register AX’
D W MOD REG R/M 1 0 0 0 1 0 1 1 11 00 0 011 = 8B C3H Word AX is BX operation destination 8 B C 3
Example: Alternative code for MOV AX, BX treating it as ‘Move from source register BX to register AX’
D W MOD REG R/M 1 0 0 0 1 0 0 1 11 01 1 000 = 89 D8H Word BX is AX operation source 8 9 D 8
There are 2 possible opcodes for MOV AX, BX as we can choose either AX or BX as REG.
Example: Code for MOV AL, BH treated as ‘Move from BL to destination register AL’
D W MOD REG R/M 1 0 0 0 1 0 1 0 11 00 0 111 = 8A C7H Byte AL is BH operation destination 8 A C 7
Example: Alternative code for MOV AL, BH treating it as ‘Move from source register BH to register AL’
D W MOD REG R/M
www.bookspar.com | Website for students | VTU NOTES 8 www.bookspar.com | Website for students | VTU NOTES 1 0 0 0 1 0 0 0 11 11 1 000 = 88 F8H Byte BH is AL operation source 8 8 F 8
There are 2 possible opcodes for MOV AL, BH as we can choose either AL or BH as REG.
Case of MOD = 00, 01 or 10
R/M MOD = 00 MOD = 01 MOD = 10 No 8-bit signed 16-bit signed Displacement displacement d8 displacement d16 000 [SI+BX] [SI+BX+d8] [SI+BX+d16] 001 [DI+BX] [DI+BX+d8] [DI+BX+d16] 010 [SI+BP] [SI+BP+d8] [SI+BP+d16] 011 [DI+BP] [DI+BP+d8] [DI+BP+d16] 100 [SI] [SI+d8] [SI+d16] 101 [DI] [DI+d8] [DI+d16] 110 [BP] Direct [BP+d8] [BP+d16] Addressing 111 [BX] [BX+d8] [BX+d16]
The table shows 24 memory addressing modes i.e. 24 different ways of accessing data stored in memory. Aid to remember: SubInspector DIxit is a BoXer ( [SI+BX] and [DI]+[BX] )
SubInspector DIxit knows to control BP ( [SI+BP] and [DI]+[BP] )
He says’ SImple DIet DIRECTs a BoXer' ( [SI], [DI], Direct addressing, [BX] )
Ex: Code for MOV CL, [SI]
D W MOD REG R/M 1 0 0 0 1 0 1 0 00 00 1 100 = 8A 0CH Byte No CL is [SI] operation Disp. destination 8 A 0 C
Note that there is a unique opcode for MOV CL, [SI] as CL only can be REG.
Ex: Code for MOV 46H[BP], DX
D W MO REG R/M d8
www.bookspar.com | Website for students | VTU NOTES 9 www.bookspar.com | Website for students | VTU NOTES D 1 0 0 0 1 0 0 1 01 01 0 110 46H = 89 56 46H Word 8-bit DX is [BP+d8] operation Disp. source 8 9 5 6
Note that there is a unique opcode for MOV 46H[BP], DX as DX only can be REG.
Ex: Code for MOV 0F246H[BP], DX
D W MOD REG R/M d16 1 0 0 0 1 0 0 1 10 01 0 110 F2 46H = 89 96 F2 46H Word 16-bit DX is [BP+d16] Stored as 89 96 operation Disp. source 46 F2H 8 9 9 6 in Little Endian
Note that there is a unique opcode for MOV 0F246H[BP], DX as DX only can be REG.
Ex: Code for MOV [BP], DX
D W MO REG R/M d8 D 1 0 0 0 1 0 0 1 01 01 0 110 00H = 89 56 00H Word 8-bit DX is [BP+d8] operation Disp. source 8 9 5 6
Note that MOV [BP], DX is treated as MOV 00H[BP], DX before coding.
Ex: Code for MOV BX, DS:1234H
D W MO REG R/M Direct D addr 1 0 0 0 1 0 1 1 00 01 1 110 12 = 8B 1E 12 34H 34H Word No BX is Direct Stored as 8B 1E operation Disp. Dest. addr. 34 12H 8 B 1 E In Little Endian
Note that when MOD = 00 and R/M = 110, it represents Direct Addressing.
www.bookspar.com | Website for students | VTU NOTES 10 www.bookspar.com | Website for students | VTU NOTES Prerequisite information 8086 is a 16-bit processor It has 20 address pins (16 of them multiplexed with data pins) It can address a maximum of 220 = 1 Million locations. Address ranges from 00000H to FFFFFH. Memory is byte addressable. Every byte has a separate address.
00000H 12H 34 12H is the contents of 00001H 34H Word 00000H 56 34H is the contents of 00002H 56H 78 56H is the contents of Word 00001H 00003H 78H Word 00002H 91 78H is the contents of 00004H 91H 91H is the contents of byte 00004H Word 00003H 00005H 23H 23H is the contents of byte 00005H
FFFFEH ABH CD ABH is the contents of FFFFFH CDH Word FFFFEH
Registers of 8086 Segment Registers: CS, DS, ES, SS each of 16 bits 8 bit data Registers: AH, AL, BH, BL, CH, CL, DH, DL 16 bit data Registers: AX, BX, CX, DX, SI, DI, BP, SP 16 bit Address registers: SI, DI, BP, BX Default combination of Segment and Address registers CS:IP SS:SP SS:BP DS:BX DS:DI DS:DI (For other than string operations) ES:DI (For string operations) Special purpose Registers IP and FLAGS Flag is a bit of special information. 9 Flags in the 16 bit FLAGS register 6 Status Flags and 3 Control Flags Status flags are: Cy, Ac, S, Z, P, Overflow Control flags are: IE, T, D Special roles of some registers BX can be used as Address register CX is used as default down counter register DX used to hold 16-bit I/O port address in variable port addressing DX used to hold MS 16 bits of 32 bit result after multiplication DX used to hold MS 16 bits of 32 bit numerator before division Accumulator: 8-bit is AL 16-bit is AX 32-bit is DX AX
www.bookspar.com | Website for students | VTU NOTES 11 www.bookspar.com | Website for students | VTU NOTES
8086 Instruction set
Abbreviations used
R8= AL/BL/CL/DL/ AH/BH/CH/DH R16=AX/BX/CX/DX/ SI/DI/BP/SP R=R8/R16 SR=CS/DS/ES/SS AR=SI/DI/BX/BP d16=16-bit data d8=8-bit data a8=8-bit I/O port address M8=contents of byte memory M16=contents of word memory M=M8/M16
Conventions used:
R MOV for MOV R, M and MOV M, R M
PUSH/POP R16 for PUSH R16 and POP R16
ROR R/M, 1/CL for ROR R,1 ROR M,1 ROR R,CL ROR M, CL
8086 Instruction set types
Instructions are normally discussed under:
Data Transfer instructions Ex. MOV BX, CX Arithmetic instructions Ex. ADD BX, CX Logical group of instructions Ex. AND BX, CX Stack group Ex. PUSH DX I/O group Ex. IN AL, 30H Branch group Ex. JNC LOCN String instructions Ex. MOVS Interrupt instructions Ex. INT 21H
Data Transfer group, Arithmetic group, Logical group, Stack group, and I/O group of instructions explained first. They occupy several chapters in books.
www.bookspar.com | Website for students | VTU NOTES 12 www.bookspar.com | Website for students | VTU NOTES Here, I explain them under: 2-operand instructions Ex. ADD BX, CX 1-operand instructions Ex. PUSH SI 0-operand instructions: Ex. DAA Branch group, String instructions, and Interrupt instructions are explained later.
2-Operand instructions
2-Operand instructions involving R and R/M
MOV/XCHG Data transfer ADD/ADC/SUB/SBB R Arithmetic AND/OR/XOR/TEST/CMP R/M Logical
11 instructions x 210= 11264 opcodes
MOV instruction already discussed- see Instruction template In data transfer instructions flags are not affected.
Exchange Instruction
Before After XCHG DX, [BX] DX 1234H ABCDH
BX 1000H
DS:1000H ABCDH 1234H
DS:1002H
Add instruction Unlike in 8085, result of add/subtract can be in any register or memory location
Before After ADD [BX], DX DX 1234H
BX 1000H
In 3234H, 34H has DS:1000H 2000H 3234H three 1’s. So P flag =0 DS:1002H
www.bookspar.com | Website for students | VTU NOTES 13 www.bookspar.com | Website for students | VTU NOTES Before After ADC DH ,[SI] DH 30H 81H
Add with Carry Carry flag 1 0 SI 2000H
81H DS:2000H 50H
1000 0001B(Two 1’s) DS:2001H 60H
New flag values: Ac=0, S=1, Z=0, V=1, P=1
Before After SUB DH, CL DH 30H 0BH
Subtract (without borrow)
CL 25H
0BH = 0000 1011B(Three 1’s) New flag values: Ac=1, S=0, Z=0, V=0, P=0, Cy=0
Before After SBB DH, CL DH 20H FAH
Subtract (with borrow) Cy flag 1 1 CL 25H
FAH =1111 1010(Six 1’s) 2’s complement of FAH=0000 0110 = +06 So, FAH = -06 New flag values: Ac=1, S=1, Z=0, V=0, P=1, Cy=1
Discussion about Overflow (V) flag V
23H (+ve) 43H (+ve)
+ 46H (+ve) + 54H (+ve)
= 69H (+ve) = 97H (-ve)
V= 0, Cy = 0 V = 1, Cy = 0 www.bookspar.com | Website for students | VTU NOTES 14 www.bookspar.com | Website for students | VTU NOTES
Correct answer Wrong answer
Overflow used with signed numbers only Carry flag used with unsigned numbers only
83H (-ve) F2H (-ve)
+ 94H (-ve) + F3H (-ve)
= 17H (+ve) = E5H (-ve)
V= 1, Cy = 1 V = 0, Cy = 1
Wrong answer Correct answer
94H (-ve) F6H (-ve)
- 83H (-ve) - 43H (+ve)
= 11H (+ve) = B3H (-ve)
V= 0, Cy = 0 V = 0, Cy = 0
Correct answer Correct answer
94H (-ve) 66H (+ve)
- 23H (+ve) - 83H (-ve)
= 71H (+ve) = E3H (-ve)
V= 1, Cy = 0 V = 1, Cy = 1
Wrong answer Wrong answer
AND instruction
Before After AND BH, CL BH 56H 06H
Subtract (with borrow) AND 1 1 www.bookspar.com | Website for students | VTU NOTES 15 www.bookspar.com | Website for students | VTU NOTES 0FH=0000 1111B CL 0FH
06H=0000 0110B Use: Selectively reset to 0 some bits of the destination Bits that are ANDed with 0’s are reset to 0 Bits that are ANDed with 1’s are not changed
OR instruction Before After OR BH, CL BH 56H 5FH
56H=0101 0110B OR 0FH=0000 1111B CL 0FH
5FH=0101 1111B Use: Selectively set to 1 some bits of the destination Bits that are ORed with 1’s are set to 1 Bits that are ORed with 0’s are not changed
Ex-OR instruction Before After XOR BH, CL BH 56H 59H
56H=0101 0110B XOR 0FH=0000 1111B CL 0FH
59H=0101 1001B Use: Selectively complement some bits of the destination. Bits that are XORed with 1’s are complemented Bits that are XORed with 0’s are not changed
TEST instruction Before After TEST BH, CL BH 56H 56H
56H=0101 0110B AND 0FH=0000 1111B CL 0FH 0FH
06H=0000 0110B Only flages are affected Temp 45H 06H
www.bookspar.com | Website for students | VTU NOTES 16 www.bookspar.com | Website for students | VTU NOTES TEST basically performs AND operation. Result of AND is not stored in destination. It is stored in Temp register. Temp is not accessible to programmer. There is no instruction like MOV Temp, 67H
Compare Instruction Before After CMP BH, CL BH 56H 56H 56H=0101 0110B
0FH=0000 1111B CL 0FH Only flags are affected Temp 45H 47H
CMP basically performs Subtract operation. Result of CMP is not stored in destination. It is stored in Temp register. Temp is not accessible to programmer.
2-Operand Instructions involving immediate data
MOV ADD/ADC/SUB/SBB R/M, d8/d16 AND/OR/XOR/TEST/CMP 8 byte registers + 8 word registers+ 24 byte memory + 24 word memory = 64 opcodes 10 instructions x 64 = 640 opcodes
Move Immediate data to a Register/ Memory location
Before After MOV DX, ABCDH DX 1234H ABCDH
Before After MOV BH, 12H BH 56H 12H
Add Immediate data to a Register/ Memory location
Before After
www.bookspar.com | Website for students | VTU NOTES 17 www.bookspar.com | Website for students | VTU NOTES ADD [BX], 12H BX 1000H
DS:1000H 20H 32H DS:1001H
Before After ADD [BX], 1234H BX 1000H
DS:1000H 2000H 3234H
DS:1002H
Add with Carry Immediate data to a Register/ Memory location
Before After ADC DH, 32H DH 30H 63H
Add with Carry Carry flag 1 0
63H= 0110 0011 It has four 1’s New flag values: Ac=0, S=0, Z=0, V=0, P=1
Subtract Immediate data from a Register/ Memory location
Before After SUB DH, 40H DH 30H F0H
Subtract (without borrow) F0H=1111 0000 B(Four 1’s) New flag values: Ac=0, S=1, Z=0, V=0, P=1, Cy=1
Subtract with borrow Immediate data from a Register/ Memory location
Before After SBB DH, 25H DH 20H 06H
Subtract (with borrow) Cy flag 1 1
06H= 0000 0110B(Two 1’s) New flag values: Ac=1, S=0, Z=0, V=0, P=1, Cy=1
AND Immediate data with a Register/ Memory location www.bookspar.com | Website for students | VTU NOTES 18 www.bookspar.com | Website for students | VTU NOTES
Before After AND BH, 0FH BH 56H 06H
56H = 0101 0110B AND
0FH = 0000 1111B Cy flag 1 1
06H = 0000 0110B(Two 1’s) Use: Selectively reset to 0 some bits of the destination Bits that are ANDed with 0’s are reset to 0 Bits that are ANDed with 1’s are not changed
OR Immediate data with a Register/ Memory location
Before After OR BH, 0FH BH 56H 5FH
56H = 0101 0110B OR
0FH = 0000 1111B CL 0FH
5FH = 0101 1111B Use: Selectively set to 1 some bits of the destination Bits that are ORed with 1’s are set to 1 Bits that are ORed with 0’s are not changed
Ex-OR Immediate data with a Register/ Memory location
Before After XOR BH, 0FH BH 56H 59H
56H = 0101 0110B XOR 0FH = 0000 1111B CL 0FH
59H = 0101 1001B Use: Selectively complement some bits of the destn. Bits that are XORed with 1’s are complemented Bits that are XORed with 0’s are not changed
Test Immediate data with a Register/ Memory location
www.bookspar.com | Website for students | VTU NOTES 19 www.bookspar.com | Website for students | VTU NOTES Before After TEST BH, 0FH BH 56H 56H
56H=0101 0110B AND
0FH=0000 1111B Temp 45H 06H
06H=0000 0110B TEST basically performs AND operation. Result of AND is not stored in destination. It is stored in Temp register. Temp is not accessible to programmer. There is no instruction like MOV Temp, 67H. Only flags are affected.
Compare Immediate data with a Register/ Memory location
Before After CMP BH, 0FH BH 56H 56H
56H=0101 0110B AND Temp 45H 47H
CMP basically performs Subtract operation. Result of CMP is not stored in destination. It is stored in Temp register. Temp is not accessible to programmer. Only Flags are affected based result of subtraction.
2-Operand Instructions involving SR and R16/M16
SR MOV R16/M16
Before After MOV DS, CX DS 1122H 2233H
CX 2233H
Note that there is no instruction to load an immediate data to a Segment register. No. of opcodes = 2 x 4 x (8+24) = 256
Before After MOV DS, [BX] DS 1122H 2233H
www.bookspar.com | Website for students | VTU NOTES 20 www.bookspar.com | Website for students | VTU NOTES BX 2000H
DS:2000H 2233H
2-Operand Instructions to perform Input operation
IN AL/AX, a8/DX 4 opcodes
Before After IN AL, DX AL 50H 45H
DX 2111H
Input port no. 2111H 45H
Before After IN AL, 30H AL 45H 50H Input port no. 30H 45H
Before After IN AX, DX AX 3050H 4045H
DX 1177H Input port no. 60H 45H
Input port no. 61H 40H
2-Operand Instructions to perform Output operation
OUT a8/DX, AL/AX 4 opcodes
Before After OUT 30H, AL AL 50H
Out port no. 30H 40H 50H
Before After OUT DX, AX AX 3050H
www.bookspar.com | Website for students | VTU NOTES 21 www.bookspar.com | Website for students | VTU NOTES DX 2177H Out port no. 2177H 45H 50H
Out port no. 2178H 40H 30H
Before After OUT 60H, AX AX 3050H
Out port no. 60H 45H 50H
Out port no. 61H 40H 30H
2-Operand Instructions to perform Shift/Rotate operation
ROR /ROL /RCR /RCL /SHR /SHL /SAR R/M, 1/CL
7 instructions x (16+48) x 2 = 896 opcodes
SHR and SHL: for shifting left / right unsigned numbers SAR used Shifting right a signed number SHL is also called as SAL, as method for shift left of signed or unsigned number is the same
ROR R/M, 1/CL Used for division by power of 2
CL has no. of times rotation is to be done
ROR BH, 1 R/M Cy
Rotate right without cy Before After
BH 0100 0010 0010 0001
Cy 1 0
RCR R/M, 1/CL
CL has no. of times rotation is to be done
RCR BH, 1 R/M Cy
www.bookspar.com | Website for students | VTU NOTES 22 www.bookspar.com | Website for students | VTU NOTES
Rotate right with cy Before After
BH 0100 0010 1010 0001
Cy 1 0
ROL R/M, 1/CL Used for multiplication by 2n
ROL BH, CL Cy R/M
Rotate left without cy Before After
BH 0010 0010 1000 1000
CL 02H
Cy 1 0
RCL R/M, 1/CL
RCL BH, CL Cy R/M
Rotate left with cy Before After
BH 0010 0010 1000 0010
CL 02H
Cy 1 0
SHL R/M, 1/CL Used for multiplication by 2n
SHL BH, CL Cy R/M
0
www.bookspar.com | Website for students | VTU NOTES 23 www.bookspar.com | Website for students | VTU NOTES Shift left without cy Before After
BH 0010 0010 1000 1000
CL 02H
Cy 1 0
SHR R/M, 1/CL Used for division by 2n of unsigned nos
SHR BH, CL R/M Cy
0
Shift right Before After
BH 0100 0100 0001 0001
CL 02H
Cy 1 0
SAR R/M, 1/CL Used for division by 2n of signed nos
SAR BH, CL R/M Cy
Shift right Before After
1100 0000 = -40H BH 1100 0000 1111 0000
1111 0000 = -10H CL 02H
Cy 1 0
2-Operand instruction to load an Effective address into an Address Register
LEA AR, a16 4 x 24 = 96 opcodes
Before After LEA BX, [SI] BX 1000H 2000H
www.bookspar.com | Website for students | VTU NOTES 24 www.bookspar.com | Website for students | VTU NOTES LEA BX, [SI] functionally same as SI 2000H
MOV BX,SI DS:2000H 3000H
2-Operand instruction to load DS and an Address Register from memory
LDS AR, M32 4 x 24 = 96 opcodes
Before After LDS SI, 3000H DS 2000H 7000H
Loads DS and SI using single instruction
SI 1000H 6000H
DS:3000H 6000H
DS:3002H 7000H
2-Operand instruction to load ES and an Address Register from memory LES AR, M32 4 x 24 = 96 opcodes
Before After LES DI, 3000H ES 2000H 7000H
Loads ES and DI using single DI 1000H 6000H instruction 2000:3000H 6000H
2000:3002H 7000H
www.bookspar.com | Website for students | VTU NOTES 25 www.bookspar.com | Website for students | VTU NOTES 1-Operand instruction types
1 INC/ DEC/ NOT/NEG R/M
4 x (16+48) = 256 opcodes
2 PUSH/ POP R16/M16/SR/F
2 x (8+24+4+1) = 74 opcodes
3 MUL/ IMUL/ DIV/ DIV R/M
4 x (16+48) = 256 opcodes
Increment R16
INC BX 8 opcodes Before After
Ex. 1 BX 1234H 1235H
Ex. 2 BX FFFFH 0000H
Increment R8
INC DH 8 opcodes Before After
Ex. 1 DH 12H 13H
Ex. 2 DH FFH 00H
Increment M8
INC byteptr [BX] Before After 24 opcodes BX 2000H DS:2000H FFH 00H DS:2001H 12H 12H
NOTE:- In this instruction there is a single operand, [BX]. It is not clear whether it is byte or word operand. Byteptr assembler directive announces to the assembler that it is a byte operation.
www.bookspar.com | Website for students | VTU NOTES 26 www.bookspar.com | Website for students | VTU NOTES Increment M16
INC wordptr [BX] Before After
24 opcodes BX 2000H
DS:2000H FFH 00H
DS:2001H 12H 13H
NOTE:- In this instruction there is a single operand, [BX]. It is not clear whether it is byte or word operand. wordptr assembler directive announces to the assembler that it is a word operation. Decrement R16
DEC BX 8 opcodes Before After
Ex. 1 BX 1234H 1233H
Ex. 2 BX 0000H FFFFH
Decrement R8 DEC DH 8 opcodes Before After
Ex. 1 DH 12H 11H Ex. 2 DH 00H FFH
Decrement M8
DEC byteptr [BX] Before After 24 opcodes BX 2000H DS:2000H 00H FFH DS:2001H 12H 12H
NOTE:-In this instruction there is a single operand, [BX]. It is not clear whether it is byte or word operand. Byteptr assembler directive announces to the assembler that it is a byte operation. Decrement M16 DEC wordptr [BX] Before After
24 opcodes BX 2000H
DS:2000H 00H FFH
DS:2001H 12H 11H
www.bookspar.com | Website for students | VTU NOTES 27 www.bookspar.com | Website for students | VTU NOTES NOTE:- In this instruction there is a single operand, [BX]. It is not clear whether it is byte or word operand. wordptr assembler directive announces to the assembler that it is a word operation. Perform 1’s complement of R16
NOT BX 8 opcodes Before After
1234H EDCBH BX
NOT operation performs 1’s complement. Easy way: Subtract each hex digit from F
Perform 1’s complement of R8
NOT DH 8 opcodes Before After
DH 12H EDH
Perform 1’s complement of M8 NOT byteptr [BX] Before After 24 opcodes BX 2000H DS:2000H 23H DCH DS:2001H 12H 12H
NOTE:- In this instruction there is a single operand, [BX]. It is not clear whether it is byte or word operand. Byteptr assembler directive announces to the assembler that it is a byte operation.
Perform 1’s complement of M16
NOT wordptr [BX] Before After
24 opcodes BX 2000H
DS:2000H 34H CBH
DS:2001H 12H EDH
NOTE:- In this instruction there is a single operand, [BX]. It is not clear whether it is byte or word operand. wordptr assembler directive announces to the assembler that it is a word operation.
Perform 2’s complement of R16
www.bookspar.com | Website for students | VTU NOTES 28 www.bookspar.com | Website for students | VTU NOTES NEG BX 8 opcodes Before After
1234H EDCCH BX
NEG operation performs 2’s complement. Easy way: Subtract each hex digit from F and add 1
Perform 2’s complement of R8
NEG DH 8 opcodes Before After
DH 12H EEH
Perform 2’s complement of M8
NEG byteptr [BX] Before After 24 opcodes BX 2000H DS:2000H 23H DDH DS:2001H 12H 12H
NOTE:- In this instruction there is a single operand, [BX]. It is not clear whether it is byte or word operand. Byteptr assembler directive announces to the assembler that it is a byte operation.
Perform 2’s complement of M16
NEG wordptr [BX] Before After
24 opcodes BX 2000H
DS:2000H 34H CBH
DS:2001H 12H EDH
NOTE:- In this instruction there is a single operand, [BX]. It is not clear whether it is byte or word operand. wordptr assembler directive announces to the assembler that it is a word operation.
PUSH R16
Ex. PUSH CX Before After CX 1234H SP 5678H 5676H Empty www.bookspar.com | Website for students | VTU NOTES 29 www.bookspar.com | Website for students | VTU NOTES Empty SS: 5676H 1122H Full 1234H Full SS:5678H 3344H 3344H
Suppose SP content is 5678H. It means locations 5678, 567A, 567C … in stack segment are full. Locations 5676, 5674, … are empty. Information pushed to location 5676 and SP value changes to 5676H. Push operation is always on 16 bit data.
PUSH M16
Ex. PUSH [BX] Before After BX 1234H SP 3366H 3364H DS:1234H 5678H Empty Empty SP: 5676H 1122H Full 5678H Full SP: 5678H 3344H 3344H
PUSH SR
Ex. PUSH CS Before After CS 1234H SP 5678H 5676H Empty Empty SS: 5676H 1122H Full 1234H Full SS: 5678H 3344H 3344H
PUSH Flags
Ex. PUSHF Before After Flags 1234H SP 5678H 5676H Empty Empty SS: 5676H 1122H Full 1234H Full SS: 5678H 3344H 3344H
POP R16
Ex. POP CX Before After CX 1234H 1122H SP 5678H 567AH Empty Full SS: 5678H 1122H Empty 1122H SS: 567AH 3344H Full 3344H
www.bookspar.com | Website for students | VTU NOTES 30 www.bookspar.com | Website for students | VTU NOTES NOTE:- Suppose SP content is 5678H. It means locations 5678, 567A, 567C … in stack segment are full. Locations 5676, 5674, … are empty. Information poped from location 5678 and SP value changes to 567AH. Pop operation is always on 16 bit data.
POP M16
Ex. POP [BX] Before After BX 1234H SP 3366H 3368H DS:1234H 5678H 1122H Empty Full SS: 3366H 1122H Empty 1122H SS: 3368H 3344H Full 3344H
POP SR
Ex. POP CS Before After CS 1234H 1122H SP 5678H 567AH Empty Full SS: 5678H 1122H Empty 1122H SS: 567AH 3344H Full 3344H
POP Flags
Ex. POPF Before After Flags 1234H 1122H SP 5678H 567AH Empty Full SS: 5678H 1122H Empty 1122H SS: 567AH 3344H Full 3344H
Unsigned Multiply R8 with AL and store product in AX
MUL CH Before After CH FEH FEH AL 02H FCH 01FCH = 508 AH 34H 01H
Unsigned Multiply R16 with AX and store product in DX AX
MUL CX Before After
www.bookspar.com | Website for students | VTU NOTES 31 www.bookspar.com | Website for students | VTU NOTES CX 00FEH 00FEH AX 0002H 01FC 01FCH = 508 H DX 1234H 0000H
Signed Multiply R8 with AL and store product in AX
IMUL CH Before After
FEH = -02 CH FEH AL 02H FCH FFFCH = -04 AH 34H FFH
NOTE:- IMUL CH instruction multiplies AL and CH treating them as signed numbers. The 16-bit product is stored in AX.
Unsigned Division of AX by R8 and store quotient in AL and remainder in AH
DIV CH Before After CH F0H AL 25H 01H Quotient AH 01H 35H Remainder
NOTE:- DIV CH instruction divides AX by CH treating them as unsigned numbers. The 8-bit quotient is stored in AL and the 8-bit remainder stored in AH.
Unsigned Division of DX AX by R16 and store quotient in AX and remainder in DX
DIV CX Before After CX 00F0H AX 0125H 0001H Quotient DX 0000H 0035H Remainder
NOTE:- DIV CX instruction divides DX AX by CX treating them as unsigned numbers. The 16-bit quotient is stored in AX and the 16-bit remainder stored in DX. Signed Division of AX by R8 and store quotient in AL and remainder in AH
IDIV CH Before After F0H = -10H CH F0H EE = -12H AL 25H EEH Quotient AH 01H 05H Remainder
NOTE:-IDIV CH instruction divides AX by CH treating them as signed numbers. The 8- bit quotient is stored in AL and the 8-bit remainder stored in AH.
www.bookspar.com | Website for students | VTU NOTES 32 www.bookspar.com | Website for students | VTU NOTES Branch group of instructions
Branch instructions provide lot of convenience to the programmer to perform operations selectively, repetitively etc.
Branch group of instructions
Conditional Uncondi-tional Iteration CALL Return jumps jump instructions instructions instructions
Conditional Jump instructions
Conditional Jump instructions in 8086 are just 2 bytes long. 1-byte opcode followed by 1-byte signed displacement (range of –128 to +127).
Conditional Jump Instructions
Jumps based on a single flag Jumps based on more than one flag
Jumps Based on a single flag
ExamplesJZ r8 for;Jump JE or if JZ zero instruction flag set (if result is 0). JE also means same. JNZ r8 ;Jump if Not Zero. JNE also means same. JS r8 ;Jump if Sign flag set to 1 (if result is negative) JNS r8 ;Jump if Not Sign (if result is positive) JC r8 ;Jump if Carry flag set to 1. JB and JNAE also mean same. JNC r8 ;Jump if No Carry. JAE and JNB also mean same. JP r8 ;Jump if Parity flag set to 1. JPE (Jump if Parity Even) also means same. JNP r8 ;Jump if No Parity. JPO (Jump if Parity Odd) also means same. JO r8 ;Jump if Overflow flag set to 1 (if result is wrong) JNO r8 ;Jump if No Overflow (if result is correct)
JE is abbreviation for Jump if Equal. JNE is abbreviation for Jump if Not Equal. JB is abbreviation for Jump if Below. JNAE is for Jump if Not Above or Equal. JAE for Jump if Above or Equal. JNB for Jump if Not Above.
JZ, JNZ, JC and JNC used after arithmetic operation
JE,www.bookspar.com JNE, JB, JNAE, JAE | Website and JNB for arestudents used after| VTU a compareNOTES operation. 33 www.bookspar.com | Website for students | VTU NOTES
Ex. for forward jump Only examples using JE instruction given for forward and backward jumps.
CMP SI, DI
JE SAME
ADD CX, DX ;Executed if Z = 0
Should be<=127 bytes : (if SI not equal to DI)
:
SAME: SUB BX, AX ;Executed if Z = 1
(if SI = DI)
Ex. for backward jump
BACK: SUB BX,AX ;Executed if Z = 1 (if SI=DI)
:
Should be : <=127 bytes CMP SI, DI
JE BACK
ADD CX,DX ;Executed if Z = 0 (if SI <> DI)
Jumping beyond -128 to +127?
Requirement Then do this!
CMP SI, DI CMP SI, DI JE SAME JNE NEXT What if ADD CX, DX JMP SAME >127 bytes : NEXT: ADD CX, DX
www.bookspar.com | Website for students | VTU NOTES 34 www.bookspar.com | Website for students | VTU NOTES : : SAME: SUB BX, AX :
SAME: SUB BX, AX
Range for JMP (unconditional jump) can be +215 = + 32K. JMP instruction discussed in detail later
Terms used in comparison
Above and Below used for comparing Unsigned numbers. Greater than and less than used when comparing signed numbers. All Intel microprocessors use this convention. Accordingly, all the following statements are true. 95H is above 65H Unsigned comparison - True 95H is less than 65H Signed comparison – True (as 95H is negative, 65H is positive) 65H is below 95H Unsigned comparison - True 65H is greater than 95H Signed comparison - True
Jump based on multiple flags
Conditional Jumps based on multiple flags are used after a CMP (compare) instruction.
JBE / JNA instruction
‘Jump if Below or Equal’ or ‘Jump if Not Above’
Jump if No Jump if Ex.
Cy = 1 OR Z= 1 Cy = 0 AND Z = 0 CMP BX, CX
Below OR Equal Surely Above JBE BX_BE
BX_BE (BX is Below or Equal) is a symbolic location
JNBE / JA instruction
‘ Jump if Not (Below or Equal)’ or ‘Jump if Above’
www.bookspar.com | Website for students | VTU NOTES 35 www.bookspar.com | Website for students | VTU NOTES Jump if No Jump if Ex.
Cy = 0 AND Z= 0 Cy = 1 OR Z = 1 CMP BX, CX
Surely Above Below OR Equal JBE BX_BE
JLE / JNG instruction
‘Jump if Less than OR Equal’ or ‘Jump if Not Greater than’ Jump if No Jump if
[(S=1 AND V=0) OR (S=0 AND V=0)] [(S=0 AND V=0) OR (S=1 AND V=1)] OR Z=1 AND Z=0 [(surely negative) or (wrong answer [(surely positive) or (wrong answer positive!)] or Equal negative!)] and not equal i.e. [S XOR V=1] OR Z=1 i.e.[S XOR V=0] AND Z=0
JNLE / JG instruction
‘Jump if Not (Less than OR Equal)’ or ‘Jump if Greater than’ No Jump if Jump if [(S=0 AND V=0) OR (S=1 AND V=1)] [(S=1 AND V=0) OR (S=0 AND V=1)] AND Z=0 OR Z=1 [(surely positive) or (wrong answer [(surely negative) or (wrong answer negative!)] and not equal positive!)] or equal
i.e. S XOR V=0 AND Z=0 i.e.S XOR V=1 OR Z=1
JL / JNGE instruction
‘Jump if Less than’ or ‘Jump if NOT (Greater than or Equal)’
Jump if No Jump if [S=1 AND V=0] OR [S=0 AND V=1] [S=0 AND V=0] OR [S=1 AND V=1] (surely negative)or (wrong answer (surely positive) or (wrong answer positive!) negative!)
i.e. S XOR V=1 i.e.S XOR V=0 Note: When S=1, result cannot be 0
www.bookspar.com | Website for students | VTU NOTES 36 www.bookspar.com | Website for students | VTU NOTES JNL / JGE instruction
‘Jump if Not Less than’ or ‘Jump if Greater than OR Equal’
Jump if No Jump if [S=0 AND V=0] OR (S=1 AND V=1) [S=1 AND V=0] OR (S=1 AND V=1) (surely positive) or (wrong answer (surely negative) or (wrong answer negative!) positive!)
i.e. S XOR V=0 i.e.S XOR V=1 Note: When S=0, result can be >= 0
Unconditional Jump instruction
Unconditional Jump Instruction
Near Jump or Intra segment Jump Far Jump or Inter segment Jump
(Jump within the segment) (Jump to a different segment)
Near Unconditional Jump instruction
Near Jump
Direct Jump (common) Indirect Jump (uncommon)
2-bytes Short Jump (EB r8) 3-bytes Long Jump (E9 r16) 2 or more bytes Starting with FFH Range: + 27 Range: +215 Range: complete segment
Three Near Jump and two Far Jump instructions have the same mnemonic JMP, but they have different opcodes
Short Jump Instruction
2 byte (EB r8) instruction with Range: -128 to +127 bytes
For Backward jump: Assembler knows the quantum of jump. Generates Short Jump code if <=128 bytes is the required jump. Generates code for Long Jump if >128 bytes is the required jump.
For Forward jump: Assembler doesn’t know jump quantum in pass 1. Assembler www.bookspar.com | Website for students | VTU NOTES 37 www.bookspar.com | Website for students | VTU NOTES reserves 3 bytes for the forward jump instruction. If jump distance turns out to be >128 bytes, the instruction is coded as E9 r16 (E9H = Long jump code). If jump distance becomes <=128 bytes, the instruction is coded as EB r8 followed by code for NOP (E8H = Short jump code).
SHORT Assembler Directive
Assembler generates only 2 byte Short Jump code for forward jump, if the SHORT assembler directive is used.
JMP SHORT SAME
:
Programmer should ensure that : the Jump distance is <=127 bytes SAME: MOV CX, DX
Long Jump instruction
3-byte (E9 r16) instruction with Range: -32768 to +32767 bytes
Long Jump can cover entire 64K bytes of Code segment
CS:0000H :
: CS:8000H JMP FRWD
Long Jump can handle it as jump : quantum is <=32767 :
FRWD = CS:FFFFH :
Long Jump can handle it as jump BKWD= CS:0000H : quantum is <=32767 : CS:8000H JMP BKWD
:
FRWD = CS:FFFFH :
www.bookspar.com | Website for students | VTU NOTES 38 www.bookspar.com | Website for students | VTU NOTES Long Jump or Short Jump?
Can be treated as a CS:0000H : small (20H) Backward : Jump distance =FFE0H. Branch! CS:0010H JMP FRWD Too very long forward : jump.
FRWD = CS:FFF0H : : CS:FFFFH :
Can be treated as a CS:0000H : small (20H) : Jump distance =FFE0H. Forward Branch! BKWD = CS:0010H : Too very long : backward jump CS:FFF0H JMP BKWD : CS:FFFFH :
Intra segment indirect Jump
It is also called Near Indirect Jump. It is not commonly used. Instruction length: 2 or more bytes Range: complete segment
Ex.1: JMP DX If DX = 1234H, branches to CS:1234H. 1234H is not signed relative displacement.
Ex. 2: JMP wordptr 2000H[BX]
If BX contents is DS:3234H 5678H 1234H
Branches to CS:5678H DS:3236H AB22H
Far Jump instruction
Far Jump
Direct Jump (common) Indirect Jump (uncommon)
5 bytes, opcode EA, 2 byte offset, 2 or more bytes, 2 byte segment value starting with opcode FFH www.bookspar.com | Website for students | VTU NOTES 39 www.bookspar.com | Website for students | VTU NOTES
Range: anywhere in memory Range: anywhere in memory
As stated earlier, three Near Jump and two Far Jump instructions have the same mnemonic JMP but different opcodes.
Inter segment Direct Jump instruction
Also called Far Direct Jump. It is the common inter segment jump scheme
It is a 5 byte instruction. 1 byte opcode (EAH), 2 byte offset value, 2 byte segment value
Ex. JMP Far ptr LOC
Inter segment Indirect Jump instruction
Also called Far Indirect Jump. It is not commonly used. Instruction length depends on the way jump location is specified. It can be a minimum of 2 bytes.
Ex. JMP DWORD PTR 2000H[BX]
If BX contents is 1234H branch takes place to location ABCDH:5678H. It is a 4-byte instruction.
DS:3234H 5678H
DS:3236H ABCDH
Iteration Instructions
Iteration instructions provide a convenient way to implement loops in a program
Iteration instructions
LOOP LOOPZ or LOOPE LOOPNZ or LOOPNE JCXZ
LOOP Instruction
www.bookspar.com | Website for students | VTU NOTES 40 www.bookspar.com | Website for students | VTU NOTES Let us say, we want to repeat a set of instructions 5 times.
For 8085 processor For 8086processor
MVI C, 05H MOV CX, 0005H
AGAIN: MOV B, D AGAIN: MOV BX, DX
: :
DCR C LOOP AGAIN
JNZ AGAIN
General format: LOOP r8; r8 is 8-bit signed value. It is a 2 byte instruction. Used for backward jump only. Maximum distance for backward jump is only 128 bytes. LOOP AGAIN is almost same as: DEC CX JNZ AGAIN LOOP instruction does not affect any flags. If CX value before entering the iterative loop is: 0005, then the loop is executed 5 times till CX becomes 0 0001, then the loop is executed 1 time till CX becomes 0 0000, then the loop is executed FFFF+1 = 10000H times!
JCXZ Instruction
Jump if CX is Zero is useful for terminating the loop immediately if CX value is 0000H It is a 2 byte instruction. It is used for forward jump only. Maximum distance for forward jump is only 127 bytes.
Ex. MOV CX, SI
JCXZ SKIP
AGAIN: MOV BX, DX
:
:
LOOP AGAIN
SKIP: ADD SI, DI ; Executed after JCXZ if CX = 0
LOOPZ instruction www.bookspar.com | Website for students | VTU NOTES 41 www.bookspar.com | Website for students | VTU NOTES
LOOP while Zero is a 2-byte instruction. It is used for backward jump only. Backward jump takes place if after decrement of CX it is still not zero AND Z flag = 1. LOOPE is same as LOOPZ. LOOPE is abbreviation for LOOP while Equal. LOOPE is normally used after a compare instruction.
Ex. MOV CX, 04H
BACK: SUB BX, AX
MOV BX, DX
:
:
ADD SI, DI
LOOPZ BACK ; if SI+DI = 0 and CX not equal to 0, branch to BACK
CALL Instructions
CALL instruction is used to branch to a subroutine. There are no conditional Call instructions in 8086.
CALL instructions
Near CALL or Intra segment CALL Far CALL or Inter segment CALL
Near Direct CALL Near Indirect CALL Far Direct CALL Far Indirect CALL
Near Direct CALL instruction
It is a 3-byte instruction. It has the format CALL r16 and has the range + 32K bytes. Covers the entire Code segment. It is the m ost common CALL instruction.
It is functionally same as the combination of the instructions PUSH IP and ADD IP, r16.
Ex. CALL Compute
www.bookspar.com | Website for students | VTU NOTES 42 www.bookspar.com | Website for students | VTU NOTES Near Indirect CALL instruction
Not commonly used. Instruction length depends on the way the called location is specified.
Ex.1: CALL AX ; If (AX) = 1234H, branches to procedure at CS: 1234H. 1234H is not relative displacement.
Ex. 2: CALL word ptr 2000H[BX]
If BX contents is 1234H Branches to subroutine at CS:5678H
DS:3234H 5678H
DS:3236H ABCDH
Far Direct CALL instruction
It is a 5-byte instruction. 1-byte opcode, 2-byte offset, 2-byte segment value. Far direct CALL is functionally same as: PUSH CS PUSH IP IP = 2-byte offset value provided in CALL CS = 2-byte segment value provided in CALL
Ex. CALL far ptr Compute
Far Indirect CALL instruction
Not commonly used. Instruction length depends on the way the called location is specified.
Ex. CALL dword ptr 2000H[BX]
If BX contents is 1234H b Branches to subroutine at ABCDH:5678H
DS:3234H 5678H
DS:3236H ABCDH
www.bookspar.com | Website for students | VTU NOTES 43 www.bookspar.com | Website for students | VTU NOTES Conditional CALL?
What if we want to branch to subroutine COMPUTE only if Cy flag = 0?
Solution:
JC NEXT CALL COMPUTE ; execute only if Cy = 0
NEXT:
RETURN instructions
RET is abbreviation for Return from subroutine
RET instructions
Near RET or Intra segment RET Far RET or Inter segment RET
RET RET d16 RET RET d16
Near RET instruction
It is 1-byte instruction. Opcode is C3H. It is functionally same as : POP IP Ex:
Compute Proc Near ; indicates it is a NEAR procedure
: :
RET
Compute ENDP ; end of procedure Compute
In fact, default procedure type is NEAR
Near RET d16 instruction
www.bookspar.com | Website for students | VTU NOTES 44 www.bookspar.com | Website for students | VTU NOTES It is a 3-byte instruction. 1-byte opcode (C2H) and 2-byte data. It is functionally same as: POP IP SP = SP + d16
Ex. RET 0004H
RET d16 is useful for flushing out the parameters that were passed to the subroutine using the stack
Use of RET d16 instruction
Main Program : : SP after CALL Compute IP PUSH Var1 Var2 PUSH Var2 Var1 CALL Compute SP before PUSH Var1 : :
Subroutine COMPUTE PROC Near IP : SP if RET is executed Var2 : Var1 RET 0004H SP if RET 0004H is executed COMPUTE ENDP
Far RET instruction
It is 1-byte instruction. Opcode is CBH. It is functionally same as: POP IP + POP CS
Ex. SINX Proc Far ; indicates it is a FAR procedure
:
:
www.bookspar.com | Website for students | VTU NOTES 45 www.bookspar.com | Website for students | VTU NOTES RET
SINX ENDP ; end of procedure SINX
Default procedure type is NEAR
Far RET d16 instruction
It is a 3-byte instruction. 1-byte opcode (CAH) and 2-byte data.
It is functionally same as: POP IP + POP CS + ADD SP, d16
Ex. RET 0006H
RET d16 is useful for flushing out the parameters that were passed to the subroutine using the stack.
www.bookspar.com | Website for students | VTU NOTES 46 www.bookspar.com | Website for students | VTU NOTES Interrupts & related instructions
Types of data transfer
Simple I/O – used when timings of I/O device is known (Ex. Collect newspaper leisurely any time after 8 a.m.)
Status check I/O – Data transfer done anytime after I/O device says it is ready (Ex. Check newspaper box and collect newspaper if it is in the box)
Interrupt driven I/O – data transfer done immediately after I/O device interrupts (Ex. Collect newspaper when the door bell rings indicating delivery of newspaper)
In this section only Interrupt driven I/O is discussed.
Interrupt driven I/O
Interrupt types
Hardware interrupts Software interrupts Exceptions or Traps
Ex. NMI and INTR pins Ex. INT n, INT 3, INTO Ex. Divide by zero error, instructions Single step interrupt
Interrupt type numbers
Every interrupt type in 8086 has an 8-bit Interrupt type number (ITN) as shown below.
ITN Interrupt type ITN Interrupt type
0 Divide by 0 error 5 Out of bound(80286)
1 Single step interrupt 6 Invalid opcode
2 NMI 7 No Coprocessor
3 Break point interrupt 8 Double fault (during an
4 Overflow error instruction 2 interrupts)
5 -1F Reserved by Intel. 20-FF Available for user.
www.bookspar.com | Website for students | VTU NOTES 47 www.bookspar.com | Website for students | VTU NOTES 13H for Disk services INT 21H for DOS services.
Action when NMI is activated
NMI is positive edge triggered input
1. Complete the instruction in progress
2. Push Flags on the stack
3. Reset IE flag (to ensure no further interrupts)
4. Reset T flag (so that interrupt service subroutine, ISS, is not executed in single step)
5. PUSH CS
6. PUSH IP
7. IP loaded from word location 2 x 4 = 8 (2 is ITN)
8. CS loaded from next word location (0000AH)
Processor makes a branch to the subroutine!
Interrupt Vector table (IVT)
RAM locations 0 to 003FFH are used to store IVT. It contains 256 Interrupt Vectors (IV) each of 4 bytes.
00000H 1234H 5678:1234H is IV number 0 00002H 5678H
00004H 3344H 5566:3344H is IV number 1 00006H 5566H
: : :
003FCH 6677H 7788:6677H is IV number FF
www.bookspar.com | Website for students | VTU NOTES 48 www.bookspar.com | Website for students | VTU NOTES 003FEH 7788H
Execution of INT n (n=0 to FF)
1. Push Flags on the stack
2. Reset IE flag (to ensure no further interrupts)
3. Reset T flag (so that ISS is not executed in single step)
4. PUSH CS
5. PUSH IP
6. IP loaded from word location n x 4 = say, W
7. CS loaded from next word location W+2
In INT n, which is a 2-byte instruction, n is the ITN. INT n has the opcode CDH
Action when INT 3 is executed
1. Push Flags on the stack
2. Reset IE flag (to ensure no further interrupts)
3. Reset T flag (so that ISS is not executed in single step)
4. PUSH CS
5. PUSH IP
6. IP loaded from word location 3 x 4 = 0000CH
7. CS loaded from next word location 0000EH
INT 3 is a 1-byte instruction with opcode of CCH
What is divide by 0 error?
www.bookspar.com | Website for students | VTU NOTES 49 www.bookspar.com | Website for students | VTU NOTES Ex. DIV BL Before After
AH 40H 00H This is an example for divide by 0 error. It only means quotient is too large for the register! AL 60H 2030H
BL 02H
Action for divide by 0 error
For divide by 0 error the ITN is 0
1. Push Flags on the stack
2. Reset IE flag (to ensure no further interrupts)
3. Reset T flag (so that ISS is not executed in single step)
4. PUSH CS
5. PUSH IP
6. IP loaded from word location 0 x 4 = 00000H
7. CS loaded from next word location 00002H
Processor makes a branch to the subroutine at location 5678:1234H if the contents of IVT is as shown in the table above.
Action for Single step interrupt
For divide by 0 error the ITN is 1
1. Push Flags on the stack
2. Reset IE flag (to ensure no further interrupts)
3. Reset T flag (so that ISS is not executed in single step)
4. PUSH CS
5. PUSH IP
6. IP loaded from word location1 x 4 = 00004H www.bookspar.com | Website for students | VTU NOTES 50 www.bookspar.com | Website for students | VTU NOTES
7. CS loaded from next word location 00006H
Processor makes a branch to the subroutine at location 5566:3344H as per the IVT
Action for INTO instruction
INTO is a 1-byte instruction. For interrupt on overflow the ITN is 4.
1. Do steps 2 to 7 only if Overflow flag is set
2. Push Flags on the stack
3. Reset IE flag and T flag
4. PUSH CS
5. PUSH IP
6. IP loaded from word location 4 x 4 = 00010H
7. CS loaded from next word location 00012H
INTO is equivalent to: JNO Next INT 4 Next: ….
Action when INTR is activated
INTR is level triggered input.
1. Complete the instruction in progress
2. Activate INTA o/p twice. In response 8086 receives ITN n instruction from an external device like 8259 PIC
3. Push Flags on the stack. Reset IE and T flags
4. PUSH CS
5. PUSH IP
6. IP loaded from word location n x 4 = say, W
www.bookspar.com | Website for students | VTU NOTES 51 www.bookspar.com | Website for students | VTU NOTES 7. CS loaded from next word location W+2
Processor makes a branch to the subroutine!
IRET (Return from Interrupt) instruction
An ISS ends with the IRET instruction. IRET is same as POP IP + POP CS + POPF
SP after branch to ISS
IP
CS
SP before branch to ISS FLA G S
Make sure ISS does not end with RET!
Priority of 8086 Interrupts
If several interrupts occur during the execution of an instruction, in which order interrupts will be serviced? There will be priorities as indicated below.
Divide by 0 error, INT n Highest priority NMI INTR Single step interrupt Lowest priority
In reality NMI has highest priority! If NMI occurs during the servicing of INT n, processor branches to NMI routine as IE flag has no effect on NMI.
www.bookspar.com | Website for students | VTU NOTES 52 www.bookspar.com | Website for students | VTU NOTES Intel 8255 PPI
PPI is abbreviation for Programmable Peripheral Interface. It is an I/O port chip used for interfacing I/O devices with microprocessor. It is a v ery commonly used peripheral chip. Knowledge of 8255 essential for students in the Microprocessors lab for interfacing experiments.
8255 40 pin DIP A7 Vcc Gnd Port A PA7-0 A6 RD*
A5 WR* PC7-4
A4 PC3-0 CS* Port C A3 Control Port
D7-0 A2
A1 Port B PB7-0 NC A0
M/IO* Reset
There are 3 ports in 8255 from user’s point of view - Port A, Port B and Port C. Port C is composed of two independent 4-bit ports : PC7-4 (PC Upper) and PC3-0 (PC Lower)
Selection of Ports
A1 A0 Selected port
0 0 Port A
0 1 Port B
1 0 Port C
1 1 Control port
There is also a Control port from the Processor point of view. Its contents decides the working of 8255. www.bookspar.com | Website for students | VTU NOTES 53 www.bookspar.com | Website for students | VTU NOTES When CS (Chip select) is 0, 8255 is selected for communication by the processor. The chip select circuit connected to the CS pin assigns addresses to the ports of 8255.
For the chip select circuit shown, the chip is selected when A7=0, A6=1, A5=1, A4=1, A3=1, A2=1, and M/IO*= 0. Port A, Port B, Port C and Control port will have the addresses as 7CH, 7DH, 7EH, and 7FH respectively. There are 3 modes of operation for the ports of 8255. Mode 0, Mode 1, and Mode 2.
Mode 0 Operation It is Basic or Simple I/O. It does not use any handshake signals. It is used for interfacing an i/p device or an o/p device. It is used when timing characteristics of I/O devices is well known.
Mode 1 Operation It uses handshake I/O. 3 lines are used for handshaking. It is used for interfacing an i/p device or an o/p device. Mode 1 operation is used when timing characteristics of I/O devices is not well known, or used when I/O devices supply or receive data at irregular intervals.
Handshake signals of the port inform the processor that the data is available, data transfer complete etc. More details about mode 1 operation is provided later.
Mode 2 Operation It is bi-directional handshake I/O. Mode 2 operation uses 5 lines for handshaking. It is used with an I/O device that receives data some times and sends data sometimes. Ex. Hard disk drive. Mode 2 operation is useful when timing characteristics of I/O devices is not well known, or when I/O devices supply or receive data at irregular intervals.
Port A can work in Mode 0, Mode 1, or Mode 2 Port B can work in Mode 0, or Mode 1 Port C can work in Mode 0 only, if at all
Port A, Port B and Port C can work in Mode 0 Port A and Port B can work in Mode 1 Only Port A can work in Mode 2
Where are the Handshake signals? We have already listed all the 40 pins of 8255. Port C pins act as handshake signals, when Port A and Port B are configured for other than Mode 0. Port A in Mode 2 and Port B in Mode 1 is possible, as it needs only 5+3 = 8 handshake signals.
www.bookspar.com | Website for students | VTU NOTES 54 www.bookspar.com | Website for students | VTU NOTES After Reset of 8255, Port A, Port B, and Port C are configured for Mode 0 operation as input ports.
PC2-0 are used as handshake signals by Port B when configured in Mode 1. This is immaterial whether Port B is configured as input or output port. PC5-3 are used as handshake signals by Port A when configured as input port in Mode 1. PC7, 6, 3 are used as handshake signals by Port A when configured as output port in Mode 1. PC7-3 are used as handshake signals by Port A when configured in Mode 2.
There are 2 control words in 8255 Mode Definition (MD) Control word and Port C Bit Set / Reset (PCBSR) Control Word
8255 Mode Definition Control word
Mode definition control word is used to configure the ports of 8255 as input or output in Mode 0, Mode 1, or Mode 2.
Control port having Mode Definition (MD) control word
1 M2A M1A I/P A I/P CU M1B I/P B I/P CL
Means Mode Definition control 1 - PCU as input word 0 - PCU as output 1 -PCL as input
1 - PA as input 0 -PCL as output
M2A 0 - PA as output 1 - PB as input M1A
0 0 Port A in Mode 0 0 - PB as output
0 1 Port A in Mode 1 1 - PB in Mode 1
1 0/1 Port A in Mode 2 0 - PB in Mode 0
Ex. 1: Configure Port A as input in Mode 0, Port B as output in mode 0, Port C (Lower) as output and Port C (Upper) as input ports.
www.bookspar.com | Website for students | VTU NOTES 55 www.bookspar.com | Website for students | VTU NOTES Required MD control word:
1 0 0 1 1 0 0 0 = 98H
MD control word PC Lower as output
PA in Mode 0 PB as output
PA as input PB in Mode 0
PC Upper as input
Required program segment for the configuration: MOV AL, 98H OUT 7FH, AL
Ex. 2: Configure Port A as input in Mode 1, Port B as output in mode 1, Port C7-6 as input ports. (PC5-0 are handshake lines, some are input lines and others are output. So they are shown as X)
Required MD control word:
1 0 1 1 1 1 0 X = BCH or BDH
MD control PC3-0 as Don’t care
PA in Mode 1 PB as output
PA as input PB in Mode 1
PC Upper (C7-6) as input
Required program segment for the configuration: MOV AL, BCH OUT 7FH, AL
Ex. 3:Configure Port A in Mode 2, Port B as output in mode 1. (PC7-3 are handshake lines for Port A and PC2-0 are handshake signals for port B)
Required MD control word:
1 1 X X X 1 0 X = C4H / C5H.. www.bookspar.com | Website for students | VTU NOTES 56 www.bookspar.com | Website for students | VTU NOTES
MD control PC3-0 as handshake
PA in Mode 2 PB as output Reqd. instrns.
PA bidirectional PB in Mode 1 MOV AL, C4H
PC 7-4 as handshake OUT 7FH, AL
Required program segment for the configuration: MOV AL, C4H OUT 7FH, AL
8255 Port C Bit Set / Reset Control word
Port C Bit Set / Reset (PCBSR) control word is used for setting to 1 or resetting to 0 any one selected bit of Port C. It is useful for enabling or disabling Port A or Port B interrupts when they are in mode 1 or mode 2.
Control port having Port C Bit Set / Reset control word
0 X X X SB2 SB1 SB0 S/ R*
PC bit set / reset Don’t cares Select bit of PC to 1 - Set to 1 control word be set / reset 0 - Reset to 0
0 0 0 Bit 0 of Port C
0 0 1 Bit 1 of Port C
: : : : : : 1 1 1 Bit 7 of Port C
Ex. 1: Set to 1 bit 4 of Port C
0 X X X 1 0 0 1 = 09H
www.bookspar.com | Website for students | VTU NOTES 57 www.bookspar.com | Website for students | VTU NOTES
PC bit set / reset Set to 1 control word Don’t cares Bit 4 of Port C
Required program segment for setting bit 4 of Port C: MOV AL, 09H OUT 7FH, AL
Ex. 2: Reset to 0 bit 6 of Port C
0 X X X 1 1 0 0 = 0CH
PC bit set / reset Don’t cares Bit 6 of Port C Reset to 0 control word
Required program segment for resetting bit 6 of Port C: MOV AL, 09H OUT 7FH, AL
PCBSR command word is used for enabling / disabling interrupts from Ports A and B when they are configured for other than Mode 0.
PA interrupt is enabled if bit 4 of PC is set to 1, for input PA interrupt is enabled if bit 6 of PC is set to 1, for output
PA interrupt is disabled if bit 4 of PC is reset to 0, for input PA interrupt is disabled if bit 6 of PC is reset to 0, for output
PB interrupt is enabled if bit 2 of PC is set to 1, for input and output PB interrupt is disabled if bit 2 of PC is reset to 0, for input and output
8255 Mode1 operation
Mode 1 operation can be done in 2 ways: Handshake Interrupt driven I/O Handshake Status Check I/O
Handshake Interrupt driven I/O Interrupt is enabled for the port using PCBSR Processor is interrupted whenever - the input buffer is full (for i/p operation) - the o/p buffer is empty (for o/p operation)
www.bookspar.com | Website for students | VTU NOTES 58 www.bookspar.com | Website for students | VTU NOTES
Handshake Interrupt input port 8255 For Port A as handshake interrupt input port: INTA is PC3 STB*A is PC4 IBFA is PC5
PB7-0 Port B STB*B (PC2)
IBF INT B B (PC1) (PC0) Waveforms for Handshake Interrupt input port
STB*
IBF
INT RD*
Data from I/O dev. When input device has data to send it checks if IBF (input buffer full) signal is 0. If 0, it sends data on PB7-0 and activates STB* (Strobe) signal. STB* is active low. When STB* goes high, the data enters the port and IBF gets activated. If the Port interrupt is enabled, INT is activated. This interrupts the processor. Processor reads the port during the ISS. Then IBF and INT get deactivated.
Handshake interrupt output port
For Port A as handshake interrupt output port: INTA is PC3 ACK*A is PC6
www.bookspar.com | Website for students | VTU NOTES 59 www.bookspar.com | Website for students | VTU NOTES OBF*A is PC7
8255
Port B PB7-0
OBF* INT B B (PC1) (PC0)
Waveforms for Handshake interrupt output port
WR*
OBF*
INT
ACK*
When output device wants to receive data it checks if OBF* (output buffer full) signal is 0.Data If 0, sentit receives out data on PB7-0 and activates ACK* (Acknowledge) signal. ACK* is active low. When ACK* goes high, the data goes out of the port and OBF* is set to 1. If the on Port port interrupt pins is enabled, INT is activated. This interrupts the processor. Processor sends another byte to the port during the ISS. Then OBF* and INT are reset to 0.
Handshake Status Check I/O For this operation, i
www.bookspar.com | Website for students | VTU NOTES 60 www.bookspar.com | Website for students | VTU NOTES nterrupt is disabled for the port using PCBSR control word. Even if new data is entered into input buffer by I/O device INT output is not going to be activated for input operation. Then, how processor knows that the input buffer has new data?
Similarly, even if I/O device has emptied the output buffer, INT output is not going to be activated for output operation. Then, how the processor knows that the output buffer is empty?
This is solved by the p rocessor reading the status of the port for this purpose.
PC provides status information of PA and PB when they are not in Mode 0
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
OBF* INTE IBF INTE INT INTE IBF/OBF* INT
PA status in Mode 1 PA status in mode1 PB status in Mode 1 output (along with INT) input Input or Output
PA status in Mode 2
Handshake status check input port
Suppose Port B is in mode 1 status check input. Processor reads bit 1 (IBF) of Port C repeatedly till it is set and then the processor reads Port B, as shown below.
AGAIN: IN AL, 7EH; Read Port C ROR AL, 1; ROR AL, 1; Check bit 1 of Port C JNC AGAIN; If it is 0, repeat checking IN AL, 7DH; Read from Port B
Handshake status check output port Suppose Port B is in mode 1 status check output. Processor reads bit 1 (OBF*) of Port C repeatedly till it is set and then the processor writes to Port B.
AGAIN: IN AL, 7EH; Read Port C ROR AL, 1; www.bookspar.com | Website for students | VTU NOTES 61 www.bookspar.com | Website for students | VTU NOTES ROR AL, 1; Check bit 1 of Port C JNC AGAIN; If it is 0, repeat checking MOV AL, data OUT 7DH, AL; Write to Port B
Applications of 8255 There are many applications for 8255. We discuss below only Analog to Digital conversion and Digital to Analog conversion.
Analog to Digital Conversion ADC 0808 is an 8-bit Analog to Digital Converter chip. It comes in a 28 pin DIP. It uses successive approximation technique. The conversion is quite fast. The conversion time is 100 micro seconds when the clock rate is 640 KHz. ADC 0808 has 8 analog inputs – i/p 0-7. An input is selected for conversion based on C B A inputs. Start of Conversion SOC) signal is needed to begin conversion. The end of conversion is indicated by activation of EOC signal. The digital output comes out on Out7-0
Interfacing ADC 0808
8255 ADC 0808 PA7-0 Out7-0
PC7 EOC D7-0 PC0 SOC i/p 2 PB0 A
PB1 B
PB2 C
Program for A/D Conversion
MOV AL, 98H; Configure 8255 OUT 7FH, AL; PA as input, PB as output, PCL as output, PCU as input MOV AL, 02H; Select i/p 2 as analog input OUT 7DH, AL; by sending 02 to Port B MOV AL, 00 OUT 7EH, AL; Send 0 on PC0
www.bookspar.com | Website for students | VTU NOTES 62 www.bookspar.com | Website for students | VTU NOTES MOV AL, 01 OUT 7EH, AL; Send 1 on PC0 MOV AL, 00; Send 0 on PC0 OUT 7EH, AL; i.e. send SOC on PC0
WAIT: INAL, 7EH; Read Port C ROL AL,1; Look at EOC by rotate left JNC WAIT; Remain in loop while EOC is 0
IN AL, 7CH; Read from Port A after EOC HLT
Digital to Analog Conversion
DAC 0800 is an 8-bit Digital to Analog Converter chip. It comes in a 16 pin DIP. It has 8 digital inputs. DAC 0808 generates analog current output.Current to voltage converter is used externally. Current output is generated in about 100 milli seconds.
Program for Triangular waveform generation using DAC
MOV AL, 80H; Configure Port A as output in Mode 0 OUT 7FH, AL
MOV AL, 00; Initialize AL with 0
UP: OUT 7CH, AL; Next 4 instructions generate rising portion of triangular waveform
INC AL;
CMP AL, FFH;
JB UP www.bookspar.com | Website for students | VTU NOTES 63 www.bookspar.com | Website for students | VTU NOTES
DOWN: OUT 7CH, AL; Next 4 instructions generate falling portion of triangular waveform
DEC AL;
CMP AL, 00;
JA DOWN
JMP UP; repeat generation of waveform
www.bookspar.com | Website for students | VTU NOTES 64 www.bookspar.com | Website for students | VTU NOTES String instructions
8086 has instructions that work on a character string also. The instruction mnemonics end with S.
String Instructions
MOVS CMPS STOS LODS SCAS
2-operand instructions 1-operand instructions
MOVS (MOVe String) instruction
Used for copying a string byte or word at a time. MOVSB for Move String Byte at a time. MOVSW for Move String Word at a time. MOVSB and MOVSW are more common than MOVS. Flags are not affected by the execution of MOVS/MOVSB/MOVSW instruction.
Instruction Source Destination If D = 0 If D = 1 pointed by pointed by
MOVSB DS:SI ES:DI incr. by 1 SI and DI decr. by 1 SI and DI
MOVSW DS:SI ES:DI incr. by 2 SI and DI decr. by 2 SI and DI
MOVSB is equivalent to (assuming D = 0) MOVSW is equivalent to (assuming D = 0)
MOV AL, [SI] MOV AX, [SI]
MOV ES:[DI], AL MOV ES:[DI], AX
PUSHF PUSHF
INC SI ADD SI, 2
INC DI ADD DI, 2
POPF; Flags not affected POPF; Flags not affected
www.bookspar.com | Website for students | VTU NOTES 65 www.bookspar.com | Website for students | VTU NOTES
It is usual to have REP (for REPeat) prefix for MOVSB / MOVSW instruction. The following code moves a 6-character string, as CX has 06. Without REP prefix, six MOVSB instructions are needed.
MOV CX, 06
REP MOVSB
EXIT: MOV DL, BL
Use of REP prefix with MOVSB
MOV CX, 06 MOV CX, 06
REP MOVSB JCXZ EXIT
EXIT: Next instrn. AGAIN: MOV AL, [SI]
MOV ES:[DI], AL
The above 3 instructions are PUSHF equivalent to the 10 instructions on the right INC SI (assuming D= 0) INC DI
POPF
LOOP AGAIN
EXIT: Next instrn.
CMPS (CoMPare Strings) Instruction
www.bookspar.com | Website for students | VTU NOTES 66 www.bookspar.com | Website for students | VTU NOTES CMPS Compares two strings (of equal size), say String1 and String2, a byte or word at a time. String values remain unaffected. Only flags affected. Basically it performs the subtraction DS:[SI] - ES:[DI] CMPSB for comparing Strings Byte at a time. CMPSW for comparing Strings Word at a time. CMPSB and CMPSW are more common than CMPS.
Instruction String1 String2 If D = 0 If D = 1 pointed by pointed by
CMPSB DS:SI ES:DI incr. by 1 SI and DI decr. by 1 SI and DI
CMPSW DS:SI ES:DI incr. by 2 SI and DI decr. by 2 SI and DI
CMPSB is equivalent to (assuming D = 0) CMPSW is equivalent to (assuming D = 0)
MOV AL, [SI] MOV AX, [SI]
CMP AL, ES:[DI] CMP AX, ES:[DI]
PUSHF PUSHF
INC SI ADD SI, 2
INC DI ADD DI, 2
POPF POPF
POPF used to ensure that flags are not again affected because of INC instructions
Normally CMPSB or CMPSW instructions are used to check if two given strings are same or not. To check for equality, REPE (Repeat while Equal) prefix is used.
REPE can also be written as REPZ (Repeat while Z flag is set) or REP (Repeat, ‘while equal’ is implied)
Use of REPE prefix with CMPSB
MOV CX, 08 MOV CX, 08
www.bookspar.com | Website for students | VTU NOTES 67 www.bookspar.com | Website for students | VTU NOTES REPE CMPSB JCXZ EXIT
EXIT: JE EQUAL AGAIN: MOV AL, [SI]
CMP AL, ES:[DI]
The above 3 instructions are equivalent to the PUSHF 10 instructions on the right (assuming D= 0). REPE CMPSB instruction causes CMPSB to INC SI be repeated as long as the compared bytes are equal and CX contents is not yet 0000. INC DI
POPF
LOOPE AGAIN
EXIT: JE EQUAL
REPNE (Repeat while not Equal) prefix is also present REPNE can also be written as REPNZ (Repeat while Zero flag is not set).
REPNE CMPSB causes CMPSB instruction to be repeated as long as the compared bytes are not equal and CX content is not yet 0000. REPNE prefix is not commonly used.
STOS (STOre String) instruction
STOS is used for creating a string in memory a byte or word at a time. AL/AX contents copied to memory pointed by ES:[DI]. It does not affect any flag. STOSB is used for storing string byte at a time. STOSW is used for storing string word at a time. STOSB and STOSW are more common than STOS. Flags are not affected by the execution of this instruction.
Instruction Source Destination If D = 0 If D = 1
STOSB AL ES:DI incr. DI by 1 decr. DI by 1
STOSW AX ES:DI incr. DI by 2 decr. DI by 2
www.bookspar.com | Website for students | VTU NOTES 68 www.bookspar.com | Website for students | VTU NOTES
STOSB is equivalent to (assuming D = 0) STOSW is equivalent to (assuming D = 0)
MOV ES:[DI], AL MOV ES:[DI], AX
PUSHF PUSHF
INC DI ADD DI, 2
POPF; Flags not affected POPF; Flags not affected
Suppose we want to initialize 6 consecutive memory locations with the same value 25H. The REP prefix for STOSB proves useful.
Use of REP prefix with STOSB
MOV AL, 25H
MOV CX, 06
MOV AL, 25H JCXZ EXIT
MOV CX, 06 AGAIN: MOV ES:[DI], AL
REP STOSB PUSHF
EXIT: Next instrn. INC DI
POPF Above 4 instructions are equivalent to the 9 instructions on the right (assuming D = 0) LOOP AGAIN
EXIT: Next instrn.
LODS (LOaD String) instruction www.bookspar.com | Website for students | VTU NOTES 69 www.bookspar.com | Website for students | VTU NOTES
LODS is used for processing a string in memory a byte or word at a time. It c opies contents of memory pointed by DS:[SI] into AL or AX. It does not affect any flag. LODSB is used for loading string byte at a time. LODSW is used for loading string word at a time. LODSB and LODSW are more common than LODS.
Instruction Source Destination If D = 0 If D = 1
LODSB DS: [SI] AL incr. SI by 1 decr. SI by 1
LODSW DS:[SI] AX incr. SI by 2 decr. SI by 2
LODSB is equivalent to (assuming D = 0) LODSW is equivalent to (assuming D = 0)
MOV AL, DS:[SI] MOV AX, DS:[SI]
PUSHF PUSHF
INC SI ADD SI, 2
POPF; Flags not affected POPF; Flags not affected
REP prefix for LODS has no practical value. However, no syntax error is generated by the assembler if REP prefix is used with LODSB or LODSW.
SCAS (SCAn String) instruction
SCAS is used for scanning a string in memory for a particular byte or word. It compares contents of byte in AL or word in AX with byte or word at memory pointed by ES:[DI]. SCAS performs AL/AX contents minus byte or word pointed by ES:[DI]. Operand values are not changed. Flags are affected based on result of subtraction. SCASB is used for scanning string byte at a time. SCASW is used for scanning string word at a time. SCASB and SCASW are more common than SCAS.
www.bookspar.com | Website for students | VTU NOTES 70 www.bookspar.com | Website for students | VTU NOTES Instruction Source Destination If D = 0 If D = 1
SCASB AL ES:[DI] incr. DI by 1 decr. DI by 1
SCASW AX ES:[DI] incr. DI by 2 decr. DI by 2
SCASB is equivalent to (assuming D = 0) SCASW is equivalent to (assuming D = 0)
CMP AL, ES:[DI] CMP AX, ES:[DI]
PUSHF PUSHF
INC DI ADD DI, 2
POPF POPF
Flags affected based on CMP instruction
Normally SCASB or SCASW instructions are used to check if a particular byte or word is present in the given string. In such a case, REPNE (Repeat while Not Equal) prefix is used. REPNZ (Repeat while Zero flag Not set) is same as REPNE
MOV CX, 08 MOV CX, 08
MOV AL, 35H MOV AL, 35H
REPNE SCASB JCXZ EXIT
JNE FAIL AGAIN: CMP AL, ES:[DI]
PUSHF Above 4 instructions used for Linear search are equivalent to the 9 instructions INC DI on the right (assuming D = 0) POPF
LOOPNE AGAIN
EXIT: JNE FAIL
NOTE: In case it is desired to check if all the bytes or words in a string are equal to a particular value, the REPE (Repeat while Equal) prefix is used. REPE can also be written as REPZ (Repeat while Zero flag is set) or REP.
www.bookspar.com | Website for students | VTU NOTES 71 www.bookspar.com | Website for students | VTU NOTES
www.bookspar.com | Website for students | VTU NOTES 72 www.bookspar.com | Website for students | VTU NOTES 0-Operand instructions
0-operand instructions make use of implied operands
STC Only Carry flag can be set to 1, cleared to 0, or Set Carry flag to 1 complemented
CLC Clear Carry flag to 0
CMC Complement Carry flag
CLD
Clear Direction flag to 0
STD Set direction flag to 1
CLI Clear Interrupt enable flag to 0
STI Set Interrupt enable flag to 1
There is no instruction to set or clear Trap flag !
Way to set or clear Trap flag
Trap flag position in Flags register is indicated below 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 X X X X V D IE T S Z X Ac X P X Cy
Program segment to:
Set Trap Flag to 1 Clear Trap flag to 0
PUSHF PUSHF
MOV BP, SP MOV BP, SP
www.bookspar.com | Website for students | VTU NOTES 73 www.bookspar.com | Website for students | VTU NOTES OR [BP], 0100H AND [BP], 0FEFFH
POPF POPF
DAA Instruction
DAA is identical to : ADD AL, 00H/06H/60H/66H
DAA for Decimal Adjust AL after Addition. DAA instruction execution results in addition of 00H, 06H, 60H or 66H to AL register based on the value present in AL, Carry flag, and Ac flag.
DAA instruction is very useful for performing decimal addition. Just add the decimal numbers as if they are hexadecimal numbers, and then execute DAA to get correct decimal answer !
Ex.1: Add decimal numbers 22 and 18
MOV AL, 22H ; (AL)= 22H
ADD AL, 18H ; (AL) = 3AH Illegal, incorrect answer!
DAA ; (AL) = 40H Just treat it as decimal with Cy = 0
3AH In this case, DAA same as ADD AL, 06H
+06H When LS hex digit in AL is >9, add 6 to it
=40H
Ex.2: Add decimal numbers 93 and 34
MOV AL, 93H ; (AL)= 93H
ADD AL, 34H ; (AL) = C7H, Cy=0 Illegal & Incorrect!
DAA ; (AL) = 27H Just treat it as decimal with Cy = 1
www.bookspar.com | Website for students | VTU NOTES 74 www.bookspar.com | Website for students | VTU NOTES C7H In this case, DAA same as ADD AL, 60H
+60H When MS hex digit in AL is >9, add 6 to it
=27H
Ex.3: Add decimal numbers 93 and 84
MOV AL, 93H ; (AL)= 93H
ADD AL, 84H ; (AL) = 17H, Cy = 1 Incorrect answer!
DAA ; (AL) = 77H Just treat it as decimal with Cy = 1 (carry generated?)
17H In this case, DAA same as ADD AL, 60H
+60H When Cy = 1, add 6 to MS hex digit of AL and treat
=77H Carry as 1 even though not generated in this addition
Ex.4: Add decimal numbers 65 and 57
MOV AL, 65H ; (AL)= 65H
ADD AL, 57H ; (AL) = BCH
DAA ; (AL) = 22H Just treat it as decimal with Cy = 1
BCH In this case, DAA same as ADD AL, 66H
+66H
=22H Cy = 1
Ex.5: Add decimal numbers 99 and 28
MOV AL, 99H ; (AL)= 99H
www.bookspar.com | Website for students | VTU NOTES 75 www.bookspar.com | Website for students | VTU NOTES ADD AL, 28H ; (AL) = C1H, Ac = 1
DAA ; (AL) = 27H Just treat it as decimal with Cy = 1
C1H In this case, DAA same as ADD AL, 66H
+66H 6 added to LS hex digit of AL, as Ac = 1
=27H Cy = 1 6 added to MS hex digit of AL, as it is >9
Ex.6: Add decimal numbers 36 and 42
MOV AL, 36H ; (AL)= 36H
ADD AL, 42H ; (AL) = 78H
DAA ; (AL) = 78H Just treat it as decimal with Cy = 0
78H
+00H In this case, DAA same as ADD AL, 00H
=78H
DAS instruction
DAS is identical to: SUB AL, 00H/06H/60H/66H
DAS for Decimal Adjust AL after Subtraction. DAS instruction execution results in subtraction of 00H, 06H, 60H or 66H from AL register based on the value present in AL, Carry flag, and Ac flag.
DAS instruction is very useful for performing decimal subtraction. Just subtract the decimal numbers as if they are hexadecimal numbers, and then execute DAS to get correct decimal answer!
Ex.1: Subtract decimal numbers 45 and 38
MOV AL, 45H ; (AL)= 45H
www.bookspar.com | Website for students | VTU NOTES 76 www.bookspar.com | Website for students | VTU NOTES SUB AL, 38H ; (AL) = 0DH Illegal, incorrect answer!
DAS ; (AL) = 07H Just treat it as decimal with Cy = 0
0DH In this case, DAS same as SUB AL, 06H
-06H When LS hex digit in AL is >9, subtract 6
=07H
Ex.2: Subtract decimal numbers 63 and 88
MOV AL, 63H ; (AL)= 63H
SUB AL, 88H ; (AL) = DBH, Cy=1 Illegal & Incorrect!
DAS ; (AL) = 75H Just treat it as decimal with Cy = 1 (carry generated?)
DBH In this case, DAS same as SUB AL, 66H
-66H When Cy = 1, it means result is negative
=75H Result is 75, which is 10’s complement of 25 Treat Cy as 1 as Cy was generated in the previous subtraction itself!
Ex.3: Subtract decimal numbers 45 and 52
MOV AL, 45H ; (AL)= 45H
SUB AL, 52H ; (AL) = F3H, Cy = 1 Incorrect answer!
DAS ; (AL) = 93H Just treat it as decimal with Cy = 1 (carry generated?)
F3H In this case, DAS same as SUB AL, 60H
-60H When Cy = 1, it means result is negative
=93H Result is 93, which is 10’s complement of 07
Ex.4: Subtract decimal numbers 50 and 19
MOV AL, 50H ; (AL)= 50H
www.bookspar.com | Website for students | VTU NOTES 77 www.bookspar.com | Website for students | VTU NOTES SUB AL, 19H ; (AL) = 37H, Ac = 1
DAS ; (AL) = 31H Just treat it as decimal with Cy =0
37H In this case, DAS same as SUB AL, 06H
-06H 06H is subtracted from AL as Ac = 1
=31H
Ex.5: Subtract decimal numbers 99 and 88
MOV AL, 99H ; (AL)= 99H
SUB AL, 88H ; (AL) = 11H
DAS ; (AL) = 11H Just treat it as decimal with Cy = 0
11H In this case, DAS same as SUB AL, 00H
-00H
=11H
Ex.6: Subtract decimal numbers 14 and 92
MOV AL, 14H ; (AL)= 14H
SUB AL, 92H ; (AL) = 82H, Cy = 1
DAS ; (AL) = 22H Just treat it as decimal with Cy = 1
82H In this case, DAS same as SUB AL, 60H
-60H 60H is subtracted from AL as Cy = 1
=22H 22 is 10’s complement of 78
AAA instruction
AAA is abbreviation for Ascii Adjust after Addition
www.bookspar.com | Website for students | VTU NOTES 78 www.bookspar.com | Website for students | VTU NOTES Suppose AH is 00H and AL has sum of 2 unpacked BCD numbers. AAA coverts it to unpacked BCD in AH and AL.
AAA is equivalent to: ADD AL, 06H if LS digit of AL >9 or Ac= 1 Make MS digit of AL as 0 INC AH if Ac= 1 It is only BCD adjustment and not ASCII adjustment.
Ex.1: Add unpacked BCD numbers 08 and 07
MOV AL, 08H ; (AL) = 08H For unpacked BCD MS hex digit is 0
ADD AL, 07H ; (AL) = 0FH
MOV AH, 00H ; It is important
AAA ; AH = 01, AL = 05
AAA has added 6 to LS hex digit of AL, as it was >9.
Ac becomes 1. MS digit remains 0. AH incremented by 1, as Ac was generated.
Ex.2: Add unpacked BCD numbers 09 and 09
MOV AL, 09H ; (AL) = 09H
ADD AL, 09H ; (AL) = 12H, Ac= 1
MOV AH, 00H ; It is important
AAA ; AH = 01, AL = 08
6 added to AL, as Ac = 1. MS digit made 0. AH incremented by 1, as Ac = 1.
Ex.3: Add unpacked BCD numbers 03 and 05
MOV AL, 03H ; (AL) = 03H
ADD AL, 09H ; (AL) = 08H
MOV AH, 00H ; It is important
www.bookspar.com | Website for students | VTU NOTES 79 www.bookspar.com | Website for students | VTU NOTES AAA ; AH = 00, AL = 08
Nothing added to AL as LS digit <=9 and Ac = 0. AH not incremented as Ac = 0
AAS instruction
AAS is abbreviation for Ascii Adjust after Subtraction
Suppose AH is 00H and AL has difference of 2 unpacked BCD numbers. AAS coverts it to unpacked BCD in AH and AL. AAS is equivalent to: SUB AL, 06H if LS digit of AL >9 or Ac= 1 Make MS digit of AL as 0 DEC AH if Ac= 1 It is only BCD adjustment and not ASCII adjustment.
Ex.1: Subtract unpacked BCD numbers 08 and 06
MOV AL, 08H ; (AL) = 08H
SUB AL, 06H ; (AL) = 02H, Ac= 0
MOV AH, 00H ; It is important
AAS ; AH = 00, AL = 02
AAS has not subtracted 6 from LS hex digit of AL, as it was <=9 and Ac = 0.
MS digit remains 0. AH is not incremented by 1, as Ac = 0.
Ex.2: Subtract unpacked BCD numbers 05 and 08
MOV AL, 05H ; (AL) = 05H
SUB AL, 08H ; (AL) = FDH, Ac= 1
MOV AH, 00H ; It is important
AAS ; AH = FF, AL = 07 (10’s comp.of 3)
6 subtracted from AL. MS digit made 0
www.bookspar.com | Website for students | VTU NOTES 80 www.bookspar.com | Website for students | VTU NOTES AH decremented by 1, as Ac = 1. When AH = FFH, it means answer is negative.
Ex.3: Subtract unpacked BCD numbers 01 and 09
MOV AL, 01H ; (AL) = 01H
SUB AL, 09H ; (AL) = F8H, Ac = 1
MOV AH, 00H ; It is important
AAS ; AH = FFH, AL = 02 (10’s comp.of 8)
6 subtracted from AL as Ac = 1. MS digit made 0. AH decremented by 1, as Ac = 1. When AH = FFH, it means answer is negative.
AAM instruction
AAM is abbreviation for Ascii Adjust after Multiplication
Suppose AX has product of 2 unpacked BCD numbers. AAM converts it to unpacked BCD in AH and AL.
Ex. Get product of 08 and 09 as unpacked 07 02
MOV AL, 08H ; (AL) = 08H
MOV BL, 09H ; (BL) = 09H
MUL BL ; (AX) = 0048H = 72
AAM ; (AX) = 07 02H
AAD instruction
AAD is abbreviation for Ascii Adjust before Division
Suppose AX has 2-digit unpacked BCD number. AAD coverts it to equivalent hexadecimal value in AL. This is useful before a division operation when the AX value is an unpacked BCD number.
Ex. Convert unpacked 07 02 to 48H
www.bookspar.com | Website for students | VTU NOTES 81 www.bookspar.com | Website for students | VTU NOTES MOV AX, 0702H ; (AX) = 0702H
AAD ; (AL) = 48H
CBW instruction
CBW is abbreviation for Convert Byte to Word
CBW treats the byte in AL as a signed number. It converts the number to 16 bits by sign extension and stores in AX. It is useful before a signed number division.
It is equivalent to MOV AH, 00/FFH. For a positive number in AL, AH will become 00H. For a negative number in AL, AH will become FFH
Before After
Ex.1 AL 34H 34H
AH 12H 00
34H in AL is sign extended as 0034H in AX
Before After
Ex.2 AL 89H 89H
AH 12H FFH
89H in AL is sign extended as FF89H in AX
CWD instruction
CWD is abbreviation for Convert Word to Double word CWD treats the word in AX as a signed number. It converts the number to 32 bits by sign extension and stores in DX AX. It is useful before a signed number division.
CWD is equivalent to MOV DX, 0000/FFFFH. For a positive number in AX, DX will become 0000H. For a negative number in AX, DX will become FFFFH.
Before After
www.bookspar.com | Website for students | VTU NOTES 82 www.bookspar.com | Website for students | VTU NOTES Ex.1 AX 5678H 5678H
1234H 0000H DX
5678H in AX is sign extended as 0000 5678H in DX AX
Before After
Ex.2 AX 9ABCH 9ABCH
DX 1234H FFFFH
9ABCH in AX is sign extended as FFFF 9ABCH in DX AX
SAHF instruction
SAHF is abbreviation for Store AH contents in LS byte of Flags register.
LS byte of Flags register contains S, Z, Ac, P, and Cy flags (all status flags except overflow flag). SAHF is used for modifying these status flag bits.
Before After
AH 12H LS byte of Flags 34H 12H
LAHF instruction
LAHF is abbreviation for Load AH contents from LS byte of Flags register
LS byte of Flags register contains S, Z, Ac, P, and Cy flags (all status flags except overflow flag). LAHF is used for reading these status flag bits.
Before After AH 12H 34H LS byte of Flags 34H
XLAT instruction Look up Table XLAT is abbreviation for Translate 2000H 30H
www.bookspar.com | Website for students | VTU NOTES 83 www.bookspar.com | Website for students | VTU NOTES It is used for code conversion. 2001H 31H
XLAT is equivalent to MOV AL, [AL+BX] :
Ex. Convert 0 to 9, A to F to Ascii code 2005H 35H
: MOV BX, 2000H 2009H 39H
MOV AL, Value ; Value 0 to F, say 5 200AH 41H
XLAT ; AL now has 35H 200FH 46H
www.bookspar.com | Website for students | VTU NOTES 84