Presentation on theme: "8086 : INSTRUCTION SET By, Pramod Sunagar Assistant Professor"— Presentation transcript:
1 8086 : INSTRUCTION SET By, Pramod Sunagar Assistant Professor Department of Computer Science & EngineeringM. S. Ramaiah Institute of technology
2 Categories of Instructions The instruction set are categorized into the following typesData Copy or Transfer instructionsArithmetic and Logical instructionsBranch instructionsLoop instructionsMachine Control instructionsFlag Manipulation instructionsShift and Rotate instructionsString instructions
3 Data Transfer Instructions These instructions are used to transfer data from source to destination.The operand can be a constant, memory location, register or I/O port address.
4 Data Transfer Instructions MOV DES, SRC:This instruction copies a word or a byte of data from some source to a destination.The destination can be a register or a memory location. The source can be a register, a memory location, or an immediate number.SRC operand can be register, memory location or immediate operand.DES can be register or memory operand.Both SRC and DES cannot be memory location at the same time.
5 Data Transfer Instructions The MOV instruction cannotSet the value of the CS and IP registers.Copy value of one segment register to another segment register (should copy to general register first).Copy immediate value to segment register (should copy to general register first).Load of the segment registers with immediate data.
6 Data Transfer Instructions ExamplesMOV AX, BXMOV AX, 500HMOV AX, [SI]MOV AX, [2000H]MOV AX, 50H[BX]
7 Data Transfer Instructions PUSH Operand:This instruction pushes the contents of the specified register/memory location on to the stack.The stack pointer is decremented by 2, after each execution of this instruction.E.g. :PUSH AXPUSH DSPUSH [5000H]
9 Data Transfer Instructions POP DES: Pop from SackThis instruction when executed, loads the specified register/memory location with the contents of the memory location of which the address is formed using the current stack segment and stack pointer.Des can be a general purpose register, segment register (except CS) or memory location.The stack pointer is incremented by 2E.g.POP AXPOP DSPOP [5000H]
11 Data Transfer Instructions XCHG DES, SRC:Exchanges byte or wordThis instruction exchange the contents of the specified source and destination operands.It cannot exchange two memory locations directly.Eg.XCHG [5000H], AXXCHG BX, AX
12 Data Transfer Instructions XLAT :Translate byte using look-up table.E.g.LEA BX, TABLE1MOV AL, 04H
13 Data Transfer Instructions Simple input and output port transfer instructionsIN Accumulator, Port Address:Copy a byte or word from specified port to accumulator.E.g.IN AL,03HIN AX,DXOUT Port Address , Accumulator :Copy a byte or word from accumulator specified port.OUT 03H, ALOUT DX, AX
14 Data Transfer Instructions LEA Register, Src :It loads a 16-bit register with the offset address of the data specified by the Src.E.g.LEA BX, [DI]This instruction loads the contents of DI (offset) into the BX register.
15 Data Transfer Instructions LDS Des, Src :It loads 32-bit pointer from memory source to destination register and DS..The offset is placed in the destination register and the segment is placed in DS.To use this instruction the word at the lower memory address must contain the offset and the word at the higher address must contain the segment.E.g.: LDS BX, [0301 H]
16 Data Transfer Instructions LES Des, Src:It loads 32-bit pointer from memory source to destination register and ES.The offset is placed in the destination register and the segment is placed in ES.This instruction is very similar to LDS except that it initializes ES instead of DS.E.g.: LES BX, [0301 H]
17 Flag Transfer Instructions LAHF:It copies the lower byte of flag register to AH.E.g. LAHFSAHF:It copies the contents of AH to lower byte of flag register.E.g. SAHF
18 Flag Transfer Instructions PUSHF:Pushes flag register to top of stack.E.g. PUSHFPOPF:Pops the stack top to flag register.E.g. POPF
19 Arithmetic Instructions ADD Des, SrcIt adds a byte to byte or a word to word.It effects AF, CF, OF, PF, SF, ZF flags.E.g.ADD AX, 0100HADD AX, BXADD AX, [SI]ADD AX, [5000H]ADD [5000H], 0100HADD 0100H
20 Arithmetic Instructions ADC Des, Src : Add with CarryThis instruction performs the same operation as ADD instruction, but adds the carry flag to the result.It effects AF, CF, OF, PF, SF, ZF flags.E.g.ADC 0100HADC AX, BXADC AX, [SI]ADC AX, ADC , 0100H
21 Arithmetic Instructions SUB Des, SrcIt subtracts a byte from byte or a word from word.It effects AF, CF, OF, PF, SF, ZF flags.For subtraction, CF acts as borrow flag.E.g.SUB AX, 0100HSUB AX, BXSUB AX, [5000H]SUB [5000H], 0100H
22 Arithmetic Instructions SBB Des, Src : Subtract with BorrowThe subtract with borrow instruction subtracts the source operand and the borrow flag (CF) which may reflect the result of the previous calculations, from the destination operand.It effects AF, CF, OF, PF, SF, ZF flags.E.g.SBB AX, 0100HSBB AX, BXSBB AX, [5000H]SBB [5000H], 0100H
23 Arithmetic Instructions INC Src:It increments the byte or word by one.The operand can be a register or memory location.It effects AF, OF, PF, SF, ZF flags.CF is not effected.E.g.:INC AXINC [BX]INC [5000H]
24 Arithmetic Instructions DEC Src:It decrements the byte or word by one.The operand can be a register or memory location.It effects AF, OF, PF, SF, ZF flags.CF is not effected.E.g.:DEC AXDEC [5000H]
25 Arithmetic Instructions NEG : NegateThe negate instruction forms 2’s complement of the specified destination in the instruction.The destination can be a register or a memory location.This instruction can be implemented by inverting each bit and adding 1 to it.E.g. NEG ALAL = = 35H Replace number in AL with its 2’s complementAL = = CBH
26 Arithmetic Instructions CMP Des, Src:It compares two specified bytes or words.The Src and Des can be a constant, register or memory location.Both operands cannot be a memory location at the same time.The comparison is done simply by internally subtracting the source from destination.The value of source and destination does not change, but the flags are modified to indicate the result.E.g.:CMP AX, 0100HCMP BX, CX
27 Arithmetic Instructions MUL Src:It is an unsigned multiplication instruction.It multiplies two bytes to produce a word or two words to produce a double word.AX = AL * SrcDX : AX = AX * SrcThis instruction assumes one of the operand in AL or AX.Src can be a register or memory location.E.g.:MUL BH ; (AX) (AL) x (BH)MUL CX ; (DX)(AX) (AX) x (CX)MUL WORD PTR [SI] ; (DX)(AX) (AX) x ([SI])
28 Arithmetic Instructions IMUL : Signed MultiplicationThis instruction multiplies a signed byte in source operand by a signed byte in AL or a signed word in source operand by a signed word in AX.E.g.IMUL BHIMUL CXIMUL [SI]
29 Arithmetic Instructions DIV Src:It is an unsigned division instruction.It divides word by byte or double word by word.The operand is stored in AX, divisor is Src and the result is stored as: AH = remainder AL = quotient.E.g.DIV CL ; Word in AX / byte in CL; Quotient in AL, remainder in AHDIV CX ; Double word in DX and AX / word; in CX, and Quotient in AX,; remainder in DXIDIV Src:It is a signed division instruction.
30 Arithmetic Instructions AAA : ASCII Adjust After AdditionThe AAA instruction is executed aftr an ADD instruction that adds two ASCII coded operand to give a byte of result in AL.The AAA instruction converts the resulting contents of AL to a unpacked decimal digits.Eg.ADD CL, DL ; [CL] = 32H = ASCII for 2; [DL] = 35H = ASCII for 5; Result [CL] = 67HMOV AL, CL ; Move ASCII result into AL since; AAA adjust only [AL]AAA ; [AL]=07, unpacked BCD for 7
31 Arithmetic Instructions AAS : ASCII Adjust AL after SubtractionThis instruction corrects the result in AL register after subtracting two unpacked ASCII operands.The result is in unpacked decimal format. The procedure is similar to AAA instruction except for the subtraction of 06 from AL.AAM : ASCII Adjust after MultiplicationThis instruction, after execution, converts the product available In AL into unpacked BCD format.Eg.MOV AL, ; AL = 04MOV BL , ; BL = 09MUL BL ; AX = AL*BL ; AX=24HAAM ; AH = 03, AL=06
32 Arithmetic Instructions AAD : ASCII Adjust before DivisionThis instruction converts two unpacked BCD digits in AH and AL to the equivalent binary number in AL.This adjustment must be made before dividing the two unpacked BCD digits in AX by an unpacked BCD byte.In the instruction sequence, this instruction appears Before DIV instruction.E.g.AX 05 08AAD result in AL 00 3A 58D = 3A H in ALThe result of AAD execution will give the hexadecimal number 3A in AL and 00 in AH. Where 3A is the hexadecimal Equivalent of 58 (decimal).
33 Arithmetic Instructions DAA : Decimal Adjust AccumulatorThis instruction is used to convert the result of the addition of two packed BCD numbers to a valid BCD number.The result has to be only in AL.E.g.AL = 53 CL = 29ADD AL, CL ; AL (AL) + (CL); AL ( ); AL = 7CDAA ; AL 7C + 06 (as C>9); AL 82
34 Arithmetic Instructions DAS : Decimal Adjust after SubtractionThis instruction converts the result of the subtraction of two packed BCD numbers to a valid BCD number.The subtraction has to be in AL only.E.g.AL = 75, BH = 46SUB AL, BH ; AL 2 F = (AL) - (BH); AF = 1DAS ; AL 2 9 (as F>9, F - 6 = 9).
35 Arithmetic Instructions CBW (Convert Byte to Word):This instruction converts byte in AL to word in AX.The conversion is done by extending the sign bit of AL throughout AH.CWD (Convert Word to Double Word):This instruction converts word in AX to double word in DX : AX.The conversion is done by extending the sign bit of AX throughout DX.
36 Branch InstructionsBranch Instructions transfers the flow of execution of the program to a new address specified in the instruction directly or indirectly.When this type of instruction is executed, the CS and IP registers get loaded with new values of CS and IP corresponding to the location to be transferred.The conditions are represented by flags.The Branch Instructions are classified into two typesUnconditional Branch Instructions.Conditional Branch Instructions.
37 Unconditional Branch Instructions In Unconditional control transfer instructions, the execution control is transferred to the specified location independent of any status or condition.The CS and IP are unconditionally modified to the new CS and IP.
38 Unconditional Branch Instructions CALL Des:This instruction is used to call a subroutine or function or procedure.The address of next instruction after CALL is saved ontostack.Address of procedure may be specified directly or indirectly.There are two types of procedure depending upon whether it is available in the same segment or in another segment.Near CALL i.e., ±32K displacement.For CALL i.e., anywhere outside the segment.
39 Unconditional Branch Instructions RET : Return from the ProcedureIt returns the control from procedure to calling program.Every CALL instruction should have a RET.When it is executed, the previously stored content of IP and CS along with Flags are retrieved into the CS, IP and Flag registers from the stack and execution of the main program continues further.
40 Unconditional Branch Instructions INT N: Interrupt Type N.In the interrupt structure of 8086, 256 interrupts are defined corresponding to the types from 00H to FFH.When INT N instruction is executed, the type byte N is multiplied by 4 and the contents of IP and CS of the interrupt service routine will be taken from memory block in 0000 segment.INTO: Interrupt on OverflowThis instruction is executed, when the overflow flag OF is set.This is equivalent to a Type 4 Interrupt instruction.
41 Unconditional Branch Instructions LOOP : LOOP UnconditionallyThis instruction executes the part of the program from the Label or address specified in the instruction upto the LOOP instruction CX number of times.At each iteration, CX is decremented automatically and JUMP IF NOT ZERO structure.E.g.:MOV CX, 0004HMOV BX, 7526HLabel 1 MOV AX, CODEOR BX, AXLOOP Label 1
42 Unconditional Branch Instructions IRET: Return from ISRWhen it is executed, the values of IP, CS and Flags are retrieved from the stack to continue the execution of the main program.JMP Des : Unconditional JumpThis instruction unconditionally transfers the control of execution to the specified address using an 8-bit or 16-bit displacement.No Flags are affected by this instruction
43 Conditional Branch Instructions Jxx Des (Conditional Jump):All the conditional jumps follow some conditional statements or any instruction that affects the flag.
45 Conditional LOOP Instructions LOOPZ / LOOPE LabelLoop through a sequence of instructions from label while ZF=1 and CX=0.LOOPNZ / LOOPENE Label
46 String InstructionsString in assembly language is just a sequentially stored bytes or words.By using these string instructions, the size of the program is considerably reduced.The 8086 supports a set of more powerful instructions for string manipulations.For referring to a string, two parameters are required.Starting and End Address of the String.Length of the String.
47 String InstructionsThe length of the string is usually stored as count in the CX register.The incrementing or decrementing of the pointer, in string instructions, depends upon the Direction Flag (DF) Status.If it is a Byte string operation, the index registers are updated by one.On the other hand, if it is a word string operation, the index registers are updated by two.
48 String Instructions CMPS Des, Src: It compares the string bytes or words.SCAS String:It scans a string.It compares the String with byte in AL or with word in AX.
49 String Instructions MOVS / MOVSB / MOVSW: It causes moving of byte or word from one string to another.In this instruction, the source string is in Data Segment and destination string is in Extra Segment.SI and DI store the offset values for source and destination index.
50 String Instructions REP : Repeat Instruction Prefix This instruction is used as a prefix to other instructions.The instruction to which the REP prefix is provided, is executed repeatedly until the CX register becomes zeroREPE / REPZ - repeat operation while equal / zero.REPNE / REPNZ - repeat operation while not equal / not zero.These are used for CMPS, SCAS instructions only, as instruction prefixes.E.g.: REP MOVSB STR1, STR2It copies byte by byte contents.REP repeats the operation MOVSB until CX becomes zero.
51 String Instructions CMPS Des, Src : Compare String Byte or String Word The CMPS instruction can be used to compare two strings of byte or words.The length of the string must be stored in the register CX.If both the byte or word strings are equal, zero Flag is set.The REP instruction Prefix is used to repeat the operation till CX (counter) becomes zero or the condition specified by the REP Prefix is False.
52 String Instructions SCAS String : Scan String Byte or String Word This instruction scans a string of bytes or words for an operand byte or word specified in the register AL or AX.The String is pointed to by ES:DI register pair.The length of the string s stored in CX.The DF controls the mode for scanning of the string.Whenever a match to the specified operand, is found in the string, execution stops and the zero Flag is set.If no match is found, the zero flag is reset.
53 String Instructions LODS : Load String Byte or String Word The LODS instruction loads the AL / AX register by the content of a string pointed to by DS : SI register pair.The SI is modified automatically depending upon DF.If it is a byte transfer (LODSB), the SI is modified by one and if it is a word transfer (LODSW), the SI is modified by two.No other Flags are affected by this instruction.
54 String Instructions STOS : Store String Byte or String Word The STOS instruction Stores the AL / AX register contents to a location in the string pointer by ES : DI register pair.The DI is modified accordingly.No Flags are affected by this instruction.
55 Flag Manipulation and a Processor Control Instructions These instructions control the functioning of the available hardware inside the processor chip.These instructions are categorized into two types:Flag Manipulation instructions.Machine Control instructions.
56 Flag Manipulation instructions The Flag manipulation instructions directly modify some of the Flags of 8086.CLC – Clear Carry Flag.CMC – Complement Carry Flag.STC – Set Carry Flag.CLD – Clear Direction Flag.STD – Set Direction Flag.CLI – Clear Interrupt Flag.STI – Set Interrupt Flag.
57 Machine Control instructions The Machine control instructions control the bus usage and executionWAIT – Wait for Test input pin to go low.HLT – Halt the process.NOP – No operation.ESC – Escape to external device like NDPLOCK – Bus lock instruction prefix.
58 Logical Instructions AND Des, Src : Logical AND This instruction bit by bit ANDs the source operand to the destination operand.The result is stored in the destination operand.E.g.:AND AX, 0008HAND AX, BX
59 Logical Instructions AND Des, Src : Logical AND Src can be immediate number, register or memory location.Des can be register or memory location.Both operands cannot be memory locations at the same time.CF and OF become zero after the operation.PF, SF and ZF are updated.
60 Logical Instructions OR Des, Src : Logical OR This instruction bit by bit ORs the source operand to the destination operand.The result is stored in the destination operand.E.g.OR AX, 0008HOR AX, BX
61 Logical Instructions OR Des, Src : Logical OR Src can be immediate number, register or memory location.Des can be register or memory location.Both operands cannot be memory locations at the same time.CF and OF become zero after the operation.PF, SF and ZF are updated.
62 Logical Instructions NOT Src: Logical Invert This instruction complements the contents of an operand bit by bit.The operand can be a register or memory locationE.g.NOT AXNOT [5000H]
63 Logical Instructions XOR Des, Src : Logical Exclusive OR This instruction bit by bit XORs the source operand to the destination operand.The result is stored in the destination operand.E.g.XOR AX, 0098HXOR AX, BX
64 Logical Instructions XOR Des, Src : Logical Exclusive OR Src can be immediate number, register or memory location.Des can be register or memory location.Both operands cannot be memory locations at the same time.CF and OF become zero after the operation.PF, SF and ZF are updated.
65 Logical Instructions TEST : Logical Compare Instruction The TEST instruction performs a bit by bit logical AND operation on the two operands.The result of this ANDing operation is not available for further use, but flags are affected.E.g.:TEST AX, BXTEST , 06H
66 Logical Instructions SHL Des, Count: It shift bits of byte or word left, by count.This instruction shifts each bit in the specified destination to the left and 0 is stored at LSB position.MSB is shifted into carry flag.If the number of bits desired to be shifted is 1, then the immediate number 1 can be written in Count.However, if the number of bits to be shifted is more than 1, then the count is put in CL register.E.g.:SHL CX, 1SHL AX, CL
67 Logical Instructions SHR : SHR destination, count This instruction shifts each bit in the specified destination to the right and 0 is stored at MSB position.The LSB is shifted into the carry flag. The destination can be a byte or a word.It can be a register or in a memory location.The number of shifts is indicated by count.E.g.:SHR CX, 1MOV CL, 05HSHR AX, CL
68 Logical Instructions SAR destination, count This instruction shifts each bit in the specified destination some number of bit positions to the right.As a bit is shifted out of the MSB position, a copy of the old MSB is put in the MSB position.The LSB will be shifted into CF.E.g.:SAR BL, 1MOV CL, 04HSAR DX, CL
69 Logical Instructions ROL Des, Count This instruction rotates all bits in a specified byte or word to the left some number of bit positions.MSB is placed as a new LSB and a new CF.E.g.:ROL CX, 1MOV CL, 03HROL BL, CL
70 Logical Instructions ROR Des, Count This instruction rotates all bits in a specified byte or word to the right some number of bit positions.LSB is placed as a new MSB and a new CF.E.g.:ROR CX, 1MOV CL, 03HROR BL, CL
71 Logical Instructions RCL Des, Count This instruction rotates all bits in a specified byte or word some number of bit positions to the left along with the carry flag.MSB is placed as a new carry and previous carry is place as new LSB.E.g.:RCL CX, 1MOV CL, 04HRCL AL, CL.
72 Logical Instructions RCR Des, Count This instruction rotates all bits in a specified byte or word some number of bit positions to the right along with the carry flag.LSB is placed as a new carry and previous carry is place as new MSB.E.g.:RCR CX, 1MOV CL, 04HRCR AL, CL.
73 Processor Control Instructions These instructions control the processor itself.8086 allows to control certain control flags that:causes the processing in a certain directionprocessor synchronization if more than one microprocessor attached.
74 Processor Control Instructions STC:It sets the carry flag to 1.CLC:It clears the carry flag to 0.CMC:It complements the carry flag.
75 Processor Control Instructions STD:It sets the direction flag to 1.If it is set, string bytes are accessed from higher memory address to lower memory address.CLD:It clears the direction flag to 0.If it is reset, the string bytes are accessed from lower memory address to higher memory address.