UNITII ADDRESSING MODES Instruction set 8086 Microprocessor Introduction

  • Slides: 63
Download presentation
UNIT-II ADDRESSING MODES & Instruction set

UNIT-II ADDRESSING MODES & Instruction set

8086 Microprocessor Introduction Program A set of instructions written to solve a problem. Instruction

8086 Microprocessor Introduction Program A set of instructions written to solve a problem. Instruction Directions which a microprocessor follows to execute a task or part of a task. Computer language High Level Machine Language �Binary bits Low Level Assembly Language ¾ English Alphabets ¾ ‘Mnemonics’ ¾ Assembler Mnemonics Machine Language 2

ADDRESSING MODES

ADDRESSING MODES

8086 Microprocessor Addressing Modes Every instruction of a program has to operate on a

8086 Microprocessor Addressing Modes Every instruction of a program has to operate on a data. The different ways in which a source operand is denoted in an instruction are known as addressing modes. 1. Register Addressing 2. Immediate Addressing Group I : Addressing modes for register and immediate data 3. Direct Addressing 4. Register Indirect Addressing 5. Based Addressing 6. Indexed Addressing Group II : Addressing modes for memory data 7. Based Index Addressing 8. String Addressing 9. Direct I/O port Addressing Group III : Addressing modes for I/O ports 10. Indirect I/O port Addressing 11. Relative Addressing Group IV : Relative Addressing mode 12. Implied Addressing Group V : Implied Addressing mode 5

8086 Microprocessor 1. Register Addressing Group I : Addressing modes for register and immediate

8086 Microprocessor 1. Register Addressing Group I : Addressing modes for register and immediate data Addressing Modes 2. Immediate Addressing The instruction will specify the name of the register which holds the data to be operated by the instruction. 3. Direct Addressing Example: 4. Register Indirect Addressing 5. Based Addressing MOV CL, DH 6. Indexed Addressing The content of 8 -bit register DH is moved to another 8 -bit register CL 7. Based Index Addressing (CL) (DH) 8. String Addressing 9. Direct I/O port Addressing 10. Indirect I/O port Addressing 11. Relative Addressing 12. Implied Addressing 6

8086 Microprocessor 1. Register Addressing Group I : Addressing modes for register and immediate

8086 Microprocessor 1. Register Addressing Group I : Addressing modes for register and immediate data Addressing Modes 2. Immediate Addressing 3. Direct Addressing 4. Register Indirect Addressing 5. Based Addressing In immediate addressing mode, an 8 -bit or 16 -bit data is specified as part of the instruction Example: MOV DL, 08 H 6. Indexed Addressing The 8 -bit data (08 H) given in the instruction is moved to DL 7. Based Index Addressing (DL) 08 H 8. String Addressing 9. Direct I/O port Addressing 10. Indirect I/O port Addressing 11. Relative Addressing MOV AX, 0 A 9 FH The 16 -bit data (0 A 9 FH) given in the instruction is moved to AX register (AX) 0 A 9 FH 12. Implied Addressing 7

8086 Microprocessor Addressing Modes : Memory Access 20 Address lines 8086 can address up

8086 Microprocessor Addressing Modes : Memory Access 20 Address lines 8086 can address up to of memory 220 = 1 M bytes However, the largest register is only 16 bits Physical Address will have to be calculated Physical Address : Actual address of a byte in memory. i. e. the value which goes out onto the address bus. Memory Address represented in the form – - 89 AB: F 012) Seg : Offset (Eg Each time the processor wants to access memory, it takes the contents of a segment register, shifts it one hexadecimal place to the left (same as multiplying by 1610), then add the required offset to form the 20 - bit address 16 bytes of contiguous memory 89 AB : F 012 89 AB 0 (Paragraph to byte 89 AB x 10 = 89 AB 0) F 012 0 F 012 (Offset is already in byte unit) + ------98 AC 2 (The absolute address) 9

8086 Microprocessor 1. Register Addressing Group II : Addressing modes for memory data Addressing

8086 Microprocessor 1. Register Addressing Group II : Addressing modes for memory data Addressing Modes 2. Immediate Addressing 3. Direct Addressing 4. Register Indirect Addressing 5. Based Addressing 6. Indexed Addressing 7. Based Index Addressing 8. String Addressing 9. Direct I/O port Addressing 10. Indirect I/O port Addressing 11. Relative Addressing 12. Implied Addressing Here, the effective address of the memory location at which the data operand is stored is given in the instruction. The effective address is just a 16 -bit number written directly in the instruction. Example: MOV BX, [1354 H] BL, [0400 H] The square brackets around the 1354 H denotes the contents of the memory location. When executed, this instruction will copy the contents of the memory location into BX register. This addressing mode is called direct because the displacement of the operand from the segment base is specified directly in the instruction. 11

8086 Microprocessor 1. Register Addressing Modes 2. Immediate Addressing 3. Direct Addressing 4. Register

8086 Microprocessor 1. Register Addressing Modes 2. Immediate Addressing 3. Direct Addressing 4. Register Indirect Addressing 5. Based Addressing 6. Indexed Addressing 7. Based Index Addressing 8. String Addressing 9. Direct I/O port Addressing 10. Indirect I/O port Addressing 11. Relative Addressing 12. Implied Addressing Group II : Addressing modes for memory data In Register indirect addressing, name of the register which holds the effective address (EA) will be specified in the instruction. Registers used to hold EA are any of the following registers: BX, BP, DI and SI. Content of the DS register is used for base address calculation. Example: Note : Register/ memory enclosed in brackets refer to content of register/ memory MOV CX, [BX] Operations: EA = (BX) BA = (DS) x 1610 MA = BA + EA (CX) (MA) or, (CL) (MA) (CH) (MA +1) 12

8086 Microprocessor 1. Register Addressing Modes 2. Immediate Addressing 3. Direct Addressing 4. Register

8086 Microprocessor 1. Register Addressing Modes 2. Immediate Addressing 3. Direct Addressing 4. Register Indirect Addressing 5. Based Addressing(Relative) 6. Indexed Addressing 7. Based Index Addressing 8. String Addressing 9. Direct I/O port Addressing 10. Indirect I/O port Addressing 11. Relative Addressing 12. Implied Addressing Group II : Addressing modes for memory data In Based Addressing, BX or BP is used to hold the base value for effective address and a signed 8 -bit or unsigned 16 -bit displacement will be specified in the instruction. In case of 8 -bit displacement, it is sign extended to 16 -bit before adding to the base value. When BX holds the base value of EA, 20 -bit physical address is calculated from BX and DS. When BP holds the base value of EA, BP and SS is used. Example: MOV AX, [BX + 08 H] Operations: 0008 H (Sign extended) EA = (BX) + 0008 H BA = (DS) x 1610 MA = BA + EA (AX) (MA) or, (AL) (MA) (AH) (MA + 1) 13

8086 Microprocessor 1. Register Addressing Modes 2. Immediate Addressing 3. Direct Addressing 4. Register

8086 Microprocessor 1. Register Addressing Modes 2. Immediate Addressing 3. Direct Addressing 4. Register Indirect Addressing 5. Based Addressing 6. Indexed Addressing 7. Based Index Addressing 8. String Addressing 9. Direct I/O port Addressing 10. Indirect I/O port Addressing 11. Relative Addressing 12. Implied Addressing Group II : Addressing modes for memory data SI or DI register is used to hold an index value for memory data and a signed 8 -bit or unsigned 16 bit displacement will be specified in the instruction. Displacement is added to the index value in SI or DI register to obtain the EA. In case of 8 -bit displacement, it is sign extended to 16 -bit before adding to the base value. Example: MOV CX, [SI + 0 A 2 H] Operations: FFA 2 H (Sign extended) EA = (SI) + FFA 2 H BA = (DS) x 1610 MA = BA + EA (CX) (MA) or, (CL) (MA) (CH) (MA + 1) 14

8086 Microprocessor 1. Register Addressing Group II : Addressing modes for memory data Addressing

8086 Microprocessor 1. Register Addressing Group II : Addressing modes for memory data Addressing Modes 2. Immediate Addressing 3. Direct Addressing 4. Register Indirect Addressing 5. Based Addressing 6. Indexed Addressing 7. Based Index Addressing(R) In Based Index Addressing, the effective address is computed from the sum of a base register (BX or BP), an index register (SI or DI) and a displacement. Example: MOV DX, [BX + SI + 0 AH] Operations: 000 AH (Sign extended) 9. Direct I/O port Addressing EA = (BX) + (SI) + 000 AH BA = (DS) x 1610 MA = BA + EA 10. Indirect I/O port Addressing (DX) (MA) or, 11. Relative Addressing (DL) (MA) (DH) (MA + 1) 8. String Addressing 12. Implied Addressing 15

8086 Microprocessor 1. Register Addressing Group II : Addressing modes for memory data Addressing

8086 Microprocessor 1. Register Addressing Group II : Addressing modes for memory data Addressing Modes 2. Immediate Addressing 3. Direct Addressing 4. Register Indirect Addressing 5. Based Addressing 6. Indexed Addressing 7. Based Index Addressing 8. String Addressing 9. Direct I/O port Addressing 10. Indirect I/O port Addressing 11. Relative Addressing 12. Implied Addressing Note : Effective address of the Extra segment register Employed in string operations to operate on string data. The effective address (EA) of source data is stored in SI register and the EA of destination is stored in DI register. Segment register for calculating base address of source data is DS and that of the destination data is ES Example: MOVS BYTE Operations: Calculation of source memory location: EA = (SI) BA = (DS) x 1610 MA = BA + EA Calculation of destination memory location: EAE = (DI) BAE = (ES) x 1610 MAE = BAE + EAE (MAE) (MA) If DF = 1, then (SI) – 1 and (DI) = (DI) - 1 If DF = 0, then (SI) +1 and (DI) = (DI)16+ 1

8086 Microprocessor 1. Register Addressing Group III : Addressing modes for I/O ports Addressing

8086 Microprocessor 1. Register Addressing Group III : Addressing modes for I/O ports Addressing Modes 2. Immediate Addressing These addressing modes are used to access data from standard I/O mapped devices or ports. 3. Direct Addressing In direct port addressing mode, an 8 -bit port address is directly specified in the instruction. 4. Register Indirect Addressing Example: IN AL, [09 H] 5. Based Addressing Operations: 6. Indexed Addressing Content of port with address 09 H is moved to AL register 7. Based Index Addressing 8. String Addressing PORTaddr = 09 H (AL) (PORT) 10. Indirect I/O port Addressing In indirect port addressing mode, the instruction will specify the name of the register which holds the port address. In 8086, the 16 -bit port address is stored in the DX register. 11. Relative Addressing Example: OUT [DX], AX 12. Implied Addressing Operations: 9. Direct I/O port Addressing PORTaddr = (DX) (PORT) (AX) Content of AX is moved to port whose address is specified by DX register. 17

8086 Microprocessor 1. Register Addressing Modes Group IV : Relative Addressing mode 2. Immediate

8086 Microprocessor 1. Register Addressing Modes Group IV : Relative Addressing mode 2. Immediate Addressing 3. Direct Addressing 4. Register Indirect Addressing 5. Based Addressing 6. Indexed Addressing 7. Based Index Addressing In this addressing mode, the effective address of a program instruction is specified relative to Instruction Pointer (IP) by an 8 -bit signed displacement. Example: JZ 0 AH Operations: 8. String Addressing 000 AH 9. Direct I/O port Addressing If ZF = 1, then 10. Indirect I/O port Addressing EA = (IP) + 000 AH BA = (CS) x 1610 MA = BA + EA 11. Relative Addressing 12. Implied Addressing (sign extend) If ZF = 1, then the program control jumps to new address calculated above. If ZF = 0, then next instruction of the program is executed. 18

8086 Microprocessor 1. Register Addressing Modes Group IV : Implied Addressing mode 2. Immediate

8086 Microprocessor 1. Register Addressing Modes Group IV : Implied Addressing mode 2. Immediate Addressing 3. Direct Addressing 4. Register Indirect Addressing 5. Based Addressing 6. Indexed Addressing 7. Based Index Addressing 8. String Addressing 9. Direct I/O port Addressing Instructions using this mode have no operands. The instruction itself will specify the data to be operated by the instruction. Example: CLC This clears the carry flag to zero. 10. Indirect I/O port Addressing 11. Relative Addressing 12. Implied Addressing 19

INSTRUCTION SET

INSTRUCTION SET

8086 Microprocessor Instruction Set 8086 supports 6 types of instructions. 1. Data Transfer Instructions

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 21

8086 Microprocessor Instruction Set 1. Data Transfer Instructions that are used to transfer data/

8086 Microprocessor Instruction Set 1. Data Transfer Instructions that are used to transfer data/ address in to registers, memory locations and I/O ports. Generally involve two operands: Source operand 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. 22

8086 Microprocessor Instruction Set 1. Data Transfer Instructions Mnemonics: MOV, XCHG, PUSH, POP, IN,

8086 Microprocessor Instruction Set 1. Data Transfer Instructions Mnemonics: MOV, XCHG, PUSH, POP, IN, OUT … MOV reg 2/ mem, reg 1/ mem MOV reg 2, reg 1 MOV mem, reg 1 MOV reg 2, mem (reg 2) (reg 1) (mem) (reg 1) (reg 2) (mem) MOV reg/ mem, data MOV reg, data MOV mem, data (reg) data (mem) data XCHG reg 2/ mem, reg 1 XCHG reg 2, reg 1 XCHG mem, reg 1 (reg 2) (reg 1) (mem) (reg 1) 23

8086 Microprocessor Instruction Set 1. Data Transfer Instructions Mnemonics: MOV, XCHG, PUSH, POP, IN,

8086 Microprocessor Instruction Set 1. Data Transfer Instructions Mnemonics: MOV, XCHG, PUSH, POP, IN, OUT … PUSH reg 16/ mem PUSH reg 16 PUSH mem POP reg 16/ mem POP reg 16 POP mem 24

8086 Microprocessor Instruction Set 1. Data Transfer Instructions Mnemonics: MOV, XCHG, PUSH, POP, IN,

8086 Microprocessor Instruction Set 1. Data Transfer Instructions Mnemonics: MOV, XCHG, PUSH, POP, IN, OUT … OUT [DX], A IN A, [DX] IN AL, [DX] PORTaddr = (DX) (AL) (PORT) OUT [DX], AL PORTaddr = (DX) (PORT) (AL) IN AX, [DX] PORTaddr = (DX) (AX) (PORT) OUT [DX], AX PORTaddr = (DX) (PORT) (AX) IN A, addr 8 OUT addr 8, A IN AL, addr 8 (AL) (addr 8) OUT addr 8, AL (addr 8) (AL) IN AX, addr 8 (AX) (addr 8) OUT addr 8, AX (addr 8) (AX) 25

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP… ADD reg 2/ mem, reg 1/mem ADC reg 2, reg 1 ADC reg 2, mem ADC mem, reg 1 (reg 2) (reg 1) + (reg 2) + (mem)+(reg 1) ADD reg/mem, data ADD reg, data ADD mem, data (reg)+ data (mem)+data ADD A, data ADD AL, data 8 ADD AX, data 16 (AL) + data 8 (AX) +data 16 26

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP… ADC reg 2/ mem, reg 1/mem ADC reg 2, reg 1 ADC reg 2, mem ADC mem, reg 1 (reg 2) (reg 1) + (reg 2)+CF (reg 2) + (mem)+CF (mem)+(reg 1)+CF ADC reg/mem, data ADC reg, data ADC mem, data (reg)+ data+CF (mem)+data+CF ADDC A, data ADD AL, data 8 ADD AX, data 16 (AL) + data 8+CF (AX) +data 16+CF 27

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP… SUB reg 2/ mem, reg 1/mem SUB reg 2, reg 1 SUB reg 2, mem SUB mem, reg 1 (reg 2) (reg 1) - (reg 2) - (mem) - (reg 1) SUB reg/mem, data SUB reg, data SUB mem, data (reg) - data (mem) - data SUB A, data SUB AL, data 8 SUB AX, data 16 (AL) - data 8 (AX) - data 16 28

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP… SBB reg 2/ mem, reg 1/mem SBB reg 2, reg 1 SBB reg 2, mem SBB mem, reg 1 (reg 2) (reg 1) - (reg 2) - CF (reg 2) - (mem)- CF (mem) - (reg 1) –CF SBB reg/mem, data SBB reg, data SBB mem, data (reg) – data - CF (mem) - data - CF SBB A, data SBB AL, data 8 SBB AX, data 16 (AL) - data 8 - CF (AX) - data 16 - CF 29

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP… INC reg/ mem INC reg 8 (reg 8) + 1 INC reg 16 (reg 16) + 1 INC mem (mem) + 1 DEC reg/ mem DEC reg 8 (reg 8) - 1 DEC reg 16 (reg 16) - 1 DEC mem (mem) - 1 30

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

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 (reg 8) For word : (DX)(AX) x (reg 16) MUL mem For byte : (AX) (AL) x (mem 8) For word : (DX)(AX) x (mem 16) IMUL reg/ mem IMUL reg For byte : (AX) (AL) x (reg 8) For word : (DX)(AX) x (reg 16) IMUL mem For byte : (AX) x (mem 8) For word : (DX)(AX) x (mem 16) 31

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

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) : - (reg 8) Quotient (AH) (AX) MOD(reg 8) Remainder For 32 -bit : - 16 -bit : (AX) (DX)(AX) : - (reg 16) Quotient (DX)(AX) MOD(reg 16) Remainder DIV mem For 16 -bit : - 8 -bit : (AL) (AX) : - (mem 8) Quotient (AH) (AX) MOD(mem 8) Remainder For 32 -bit : - 16 -bit : (AX) (DX)(AX) : - (mem 16) Quotient (DX)(AX) MOD(mem 16) Remainder 32

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

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) : - (reg 8) Quotient (AH) (AX) MOD(reg 8) Remainder For 32 -bit : - 16 -bit : (AX) (DX)(AX) : - (reg 16) Quotient (DX)(AX) MOD(reg 16) Remainder IDIV mem For 16 -bit : - 8 -bit : (AL) (AX) : - (mem 8) Quotient (AH) (AX) MOD(mem 8) Remainder For 32 -bit : - 16 -bit : (AX) (DX)(AX) : - (mem 16) Quotient (DX)(AX) MOD(mem 16) Remainder 33

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP… CMP reg 2/mem, reg 1/ mem CMP reg 2, reg 1 Modify flags (reg 2) – (reg 1) If (reg 2) > (reg 1) then CF=0, ZF=0, SF=0 If (reg 2) < (reg 1) then CF=1, ZF=0, SF=1 If (reg 2) = (reg 1) then CF=0, ZF=1, SF=0 CMP reg 2, mem Modify flags (reg 2) – (mem) If (reg 2) > (mem) then CF=0, ZF=0, SF=0 If (reg 2) < (mem) then CF=1, ZF=0, SF=1 If (reg 2) = (mem) then CF=0, ZF=1, SF=0 CMP mem, reg 1 Modify flags (mem) – (reg 1) If (mem) > (reg 1) then CF=0, ZF=0, SF=0 If (mem) < (reg 1) then CF=1, ZF=0, SF=1 If (mem) = (reg 1) then CF=0, ZF=1, SF=0 34

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

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 35

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC,

8086 Microprocessor Instruction Set 2. Arithmetic Instructions Mnemonics: ADD, ADC, SUB, SBB, INC, DEC, MUL, DIV, CMP… CMP A, data CMP AL, data 8 Modify flags (AL) – data 8 If (AL) > data 8 then CF=0, ZF=0, SF=0 If (AL) < data 8 then CF=1, ZF=0, SF=1 If (AL) = data 8 then CF=0, ZF=1, SF=0 CMP AX, data 16 Modify flags (AX) – data 16 If (AX) > data 16 then CF=0, ZF=0, SF=0 If (mem) < data 16 then CF=1, ZF=0, SF=1 If (mem) = data 16 then CF=0, ZF=1, SF=0 36

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL,

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL … 37

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL,

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL … 38

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL,

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL … 39

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL,

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL … 40

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL,

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL … 41

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL,

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL … 42

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL,

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL … 43

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL,

8086 Microprocessor Instruction Set 3. Logical Instructions Mnemonics: AND, OR, XOR, TEST, SHR, SHL, RCR, RCL … 44

8086 Microprocessor Instruction Set 4. String Manipulation Instructions q String : Sequence of bytes

8086 Microprocessor Instruction Set 4. String Manipulation Instructions q String : Sequence of bytes or words q 8086 instruction set includes instruction for string movement, comparison, scan, load and store. q REP instruction prefix : used to repeat execution of string instructions q String instructions end with S or SB or SW. byte and SW string word. S represents string, SB string q Offset or effective address of the source operand is stored in SI register and that of the destination operand is stored in DI register. q Depending on the status of DF, SI and DI registers are automatically updated. q DF = 0 SI and DI are incremented by 1 for byte and 2 for word. q DF = 1 SI and DI are decremented by 1 for byte and 2 for word. 45

8086 Microprocessor Instruction Set 4. String Manipulation Instructions Mnemonics: REP, MOVS, CMPS, SCAS, LODS,

8086 Microprocessor Instruction Set 4. String Manipulation Instructions Mnemonics: REP, MOVS, CMPS, SCAS, LODS, STOS MOVSB MA = (DS) x 1610 + (SI) MAE = (ES) x 1610 + (DI) (MAE) (MA) If DF = 0, then (DI) + 1; (SI) + 1 If DF = 1, then (DI) - 1; (SI) - 1 MOVSW MA = (DS) x 1610 + (SI) MAE = (ES) x 1610 + (DI) (MAE ; MAE + 1) (MA; MA + 1) If DF = 0, then (DI) + 2; (SI) + 2 If DF = 1, then (DI) - 2; (SI) - 2 46

8086 Microprocessor Instruction Set 4. String Manipulation Instructions Mnemonics: REP, MOVS, CMPS, SCAS, LODS,

8086 Microprocessor Instruction Set 4. String Manipulation Instructions Mnemonics: REP, MOVS, CMPS, SCAS, LODS, STOS Compare two string byte or string word CMPSB MA = (DS) x 1610 + (SI) MAE = (ES) x 1610 + (DI) Modify flags (MA) - (MAE) CMPSW If (MA) > (MAE), then CF = 0; ZF = 0; SF = 0 If (MA) < (MAE), then CF = 1; ZF = 0; SF = 1 If (MA) = (MAE), then CF = 0; ZF = 1; SF = 0 For byte operation If DF = 0, then (DI) + 1; (SI) + 1 If DF = 1, then (DI) - 1; (SI) - 1 For word operation If DF = 0, then (DI) + 2; (SI) + 2 If DF = 1, then (DI) - 2; (SI) - 2 47

8086 Microprocessor Instruction Set 4. String Manipulation Instructions Mnemonics: REP, MOVS, CMPS, SCAS, LODS,

8086 Microprocessor Instruction Set 4. String Manipulation Instructions Mnemonics: REP, MOVS, CMPS, SCAS, LODS, STOS Scan (compare) a string byte or word with accumulator SCASB MAE = (ES) x 1610 + (DI) Modify flags (AL) - (MAE) If (AL) > (MAE), then CF = 0; ZF = 0; SF = 0 If (AL) < (MAE), then CF = 1; ZF = 0; SF = 1 If (AL) = (MAE), then CF = 0; ZF = 1; SF = 0 If DF = 0, then (DI) + 1 If DF = 1, then (DI) – 1 SCASW MAE = (ES) x 1610 + (DI) Modify flags (AL) - (MAE) If (AX) > (MAE ; MAE + 1), then CF = 0; ZF = 0; SF = 0 If (AX) < (MAE ; MAE + 1), then CF = 1; ZF = 0; SF = 1 If (AX) = (MAE ; MAE + 1), then CF = 0; ZF = 1; SF = 0 If DF = 0, then (DI) + 2 If DF = 1, then (DI) – 2 48

8086 Microprocessor Instruction Set 4. String Manipulation Instructions Mnemonics: REP, MOVS, CMPS, SCAS, LODS,

8086 Microprocessor Instruction Set 4. String Manipulation Instructions Mnemonics: REP, MOVS, CMPS, SCAS, LODS, STOS Load string byte in to AL or string word in to AX LODSB MA = (DS) x 1610 + (SI) (AL) (MA) If DF = 0, then (SI) + 1 If DF = 1, then (SI) – 1 LODSW MA = (DS) x 1610 + (SI) (AX) (MA ; MA + 1) If DF = 0, then (SI) + 2 If DF = 1, then (SI) – 2 49

8086 Microprocessor Instruction Set 4. String Manipulation Instructions Mnemonics: REP, MOVS, CMPS, SCAS, LODS,

8086 Microprocessor Instruction Set 4. String Manipulation Instructions Mnemonics: REP, MOVS, CMPS, SCAS, LODS, STOS Store byte from AL or word from AX in to string STOSB MAE = (ES) x 1610 + (DI) (MAE) (AL) If DF = 0, then (DI) + 1 If DF = 1, then (DI) – 1 STOSW MAE = (ES) x 1610 + (DI) (MAE ; MAE + 1 ) (AX) If DF = 0, then (DI) + 2 If DF = 1, then (DI) – 2 50

8086 Microprocessor Instruction Set 5. Processor Control Instructions Mnemonics Explanation STC Set CF 1

8086 Microprocessor Instruction Set 5. Processor Control Instructions Mnemonics Explanation STC Set CF 1 CLC Clear CF 0 CMC Complement carry CF CF/ STD Set direction flag DF 1 CLD Clear direction flag DF 0 STI Set interrupt enable flag IF 1 CLI Clear interrupt enable flag IF 0 NOP No operation HLT Halt after interrupt is set WAIT Wait for TEST pin active ESC opcode mem/ reg Used to pass instruction to a coprocessor which shares the address and data bus with the 8086 LOCK Lock bus during next instruction 51

8086 Microprocessor Instruction Set 6. Control Transfer Instructions Transfer the control to a specific

8086 Microprocessor Instruction Set 6. Control Transfer Instructions Transfer the control to a specific destination or target instruction Do not affect flags q 8086 Unconditional transfers Mnemonics Explanation CALL reg/ mem/ disp 16 Call subroutine RET Return from subroutine JMP reg/ mem/ disp 8/ disp 16 Unconditional jump 52

8086 Microprocessor Instruction Set 6. Control Transfer Instructions q 8086 signed conditional branch instructions

8086 Microprocessor Instruction Set 6. Control Transfer Instructions q 8086 signed conditional branch instructions q 8086 unsigned conditional branch instructions Checks flags If conditions are true, the program control is transferred to the new memory location in the same segment by modifying the content of IP 53

8086 Microprocessor Instruction Set 6. Control Transfer Instructions q 8086 signed conditional branch instructions

8086 Microprocessor Instruction Set 6. Control Transfer Instructions q 8086 signed conditional branch instructions q 8086 unsigned conditional branch instructions Name Alternate name JE disp 8 Jump if equal JZ disp 8 Jump if result is 0 JNE disp 8 Jump if not equal JNZ disp 8 Jump if not zero JG disp 8 Jump if greater JNLE disp 8 Jump if not less or equal JA disp 8 Jump if above JGE disp 8 Jump if greater than or equal JNL disp 8 Jump if not less JNBE disp 8 Jump if not below or equal JAE disp 8 Jump if above or equal JNB disp 8 Jump if not below JL disp 8 Jump if less than JNGE disp 8 Jump if not greater than or equal JB disp 8 Jump if below JNAE disp 8 Jump if not above or equal JLE disp 8 Jump if less than or equal JNG disp 8 Jump if not greater JBE disp 8 Jump if below or equal JNA disp 8 Jump if not above 54

8086 Microprocessor Instruction Set 6. Control Transfer Instructions q 8086 conditional branch instructions affecting

8086 Microprocessor Instruction Set 6. Control Transfer Instructions q 8086 conditional branch instructions affecting individual flags Mnemonics Explanation JC disp 8 Jump if CF = 1 JNC disp 8 Jump if CF = 0 JP disp 8 Jump if PF = 1 JNP disp 8 Jump if PF = 0 JO disp 8 Jump if OF = 1 JNO disp 8 Jump if OF = 0 JS disp 8 Jump if SF = 1 JNS disp 8 Jump if SF = 0 JZ disp 8 Jump if result is zero, i. e, Z = 1 JNZ disp 8 Jump if result is not zero, i. e, Z = 1 55

Assembler directives

Assembler directives

8086 Microprocessor Assemble Directives Instructions to the Assembler regarding the program being executed. Control

8086 Microprocessor Assemble Directives Instructions to the Assembler regarding the program being executed. Control the generation of machine codes and organization of the program; but no machine codes are generated for assembler directives. Also called ‘pseudo instructions’ Used to : › specify the start and end of a program › attach value to variables › allocate storage locations to input/ output data › define start and end of segments, procedures, macros etc. . 57

8086 Microprocessor DB Assemble Directives Define Byte DW Define a byte type (8 -bit)

8086 Microprocessor DB Assemble Directives Define Byte DW Define a byte type (8 -bit) variable SEGMENT ENDS Reserves specific amount of memory locations to each variable ASSUME Range : 00 H – FFH for unsigned value; 00 H – 7 FH for positive value and 80 H – FFH for negative value ORG END EVEN EQU PROC FAR NEAR ENDP SHORT MACRO ENDM General form : variable DB value/ values Example: LIST DB 7 FH, 42 H, 35 H Three consecutive memory locations are reserved for the variable LIST and each data specified in the instruction are stored as initial value in the reserved memory location 58

8086 Microprocessor DB Assemble Directives Define Word DW Define a word type (16 -bit)

8086 Microprocessor DB Assemble Directives Define Word DW Define a word type (16 -bit) variable SEGMENT ENDS Reserves two consecutive memory locations to each variable ASSUME Range : 0000 H – FFFFH for unsigned value; 0000 H – 7 FFFH for positive value and 8000 H – FFFFH for negative value ORG END EVEN EQU PROC FAR NEAR ENDP SHORT MACRO ENDM General form : variable DW value/ values Example: ALIST DW 6512 H, 0 F 251 H, 0 CDE 2 H Six consecutive memory locations are reserved for the variable ALIST and each 16 -bit data specified in the instruction is stored in two consecutive memory location. 59

8086 Microprocessor DB DW SEGMENT ENDS ASSUME ORG END EVEN EQU PROC FAR NEAR

8086 Microprocessor DB DW SEGMENT ENDS ASSUME ORG END EVEN EQU PROC FAR NEAR ENDP Assemble Directives SEGMENT : Used to indicate the beginning of a code/ data/ stack segment ENDS : Used to indicate the end of a code/ data/ stack segment General form: Segnam SEGMENT … … … Program code or Data Defining Statements Segnam ENDS SHORT MACRO ENDM User defined name of the segment 60

8086 Microprocessor DB DW SEGMENT ENDS ASSUME ORG END EVEN EQU PROC FAR NEAR

8086 Microprocessor DB DW SEGMENT ENDS ASSUME ORG END EVEN EQU PROC FAR NEAR ENDP Assemble Directives Informs the assembler the name of the program/ data segment that should be used for a specific segment. General form: ASSUME segreg : segnam, . . , segreg : segnam Segment Register User defined name of the segment Example: ASSUME CS: ACODE, DS: ADATA Tells the compiler that the instructions of the program are stored in the segment ACODE and data are stored in the segment ADATA SHORT MACRO ENDM 61

8086 Microprocessor DB DW SEGMENT ENDS ASSUME ORG END EVEN EQU PROC FAR NEAR

8086 Microprocessor DB DW SEGMENT ENDS ASSUME ORG END EVEN EQU PROC FAR NEAR ENDP SHORT MACRO ENDM Assemble Directives ORG (Origin) is used to assign the starting address (Effective address) for a program/ data segment END is used to terminate a program; statements after END will be ignored EVEN : Informs the assembler to store program/ data segment starting from an even address EQU (Equate) is used to attach a value to a variable Examples: ORG 1000 H Informs the assembler that the statements following ORG 1000 H should be stored in memory starting with effective address 1000 H LOOP EQU 10 FEH Value of variable LOOP is 10 FE H _SDATA SEGMENT ORG 1200 H A DB 4 CH EVEN B DW 1052 H _SDATA ENDS In this data segment, effective address of memory location assigned to A will be 1200 H and that of B will be 1202 H and 1203 H. 62

8086 Microprocessor DB DW SEGMENT ENDS ASSUME ORG END EVEN EQU PROC ENDP FAR

8086 Microprocessor DB DW SEGMENT ENDS ASSUME ORG END EVEN EQU PROC ENDP FAR NEAR SHORT MACRO ENDM Assemble Directives PROC Indicates the beginning of a procedure ENDP End of procedure FAR Intersegment call NEAR Intrasegment call General form procname PROC[NEAR/ FAR] … … … Program statements of the procedure Last statement of the procedure RET procname ENDP User defined name of the procedure 63

8086 Microprocessor DB Assemble Directives Examples: DW SEGMENT ENDS ASSUME ORG END EVEN EQU

8086 Microprocessor DB Assemble Directives Examples: DW SEGMENT ENDS ASSUME ORG END EVEN EQU PROC ENDP FAR NEAR ADD 64 PROC NEAR … … … The subroutine/ procedure named ADD 64 is declared as NEAR and so the assembler will code the CALL and RET instructions involved in this procedure as near call and return RET ADD 64 ENDP CONVERT PROC FAR … … … The subroutine/ procedure named CONVERT is declared as FAR and so the assembler will code the CALL and RET instructions involved in this procedure as far call and return RET CONVERT ENDP SHORT MACRO ENDM 64

8086 Microprocessor DB Assemble Directives Reserves one memory location for 8 -bit signed displacement

8086 Microprocessor DB Assemble Directives Reserves one memory location for 8 -bit signed displacement in jump instructions DW SEGMENT ENDS ASSUME Example: JMP SHORT AHEAD The directive will reserve one memory location for 8 -bit displacement named AHEAD ORG END EVEN EQU PROC ENDP FAR NEAR SHORT MACRO ENDM 65

8086 Microprocessor DB Assemble Directives MACRO Indicate the beginning of a macro DW ENDM

8086 Microprocessor DB Assemble Directives MACRO Indicate the beginning of a macro DW ENDM End of a macro SEGMENT ENDS General form: ASSUME ORG END EVEN EQU PROC ENDP FAR NEAR macroname MACRO[Arg 1, Arg 2. . . ] … … … Program statements in the macroname ENDM User defined name of the macro SHORT MACRO ENDM 66