8086 instruction set
TRANSCRIPT
![Page 1: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/1.jpg)
8086 INSTRUCTION SET
•Data transfer instruction•Arithmetic instruction•Bit manipulated instruction•String instruction•Iteration control instruction•Branch instruction•Data size conversion instruction•Processor control instruction
![Page 2: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/2.jpg)
MOV Instruction
• Syntax:• Action: Copies the data from src to dest• Src: Immediate data/reg/mem location• Dest: reg/mem location• Flags: No flags are affected
MOV destination, source
![Page 3: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/3.jpg)
• MOV AX, BX• MOV AX, [BX]• MOV AL,[1234H]• MOV AL,BL• MOV AL,A• MOV SP, BP
• MOV A,B• MOV [BX],[SI]• MOV 1234H,BX• MOV IP, AX• MOV CS, AX• MOV DS, ES• MOV DS, 1234H• MOV AL,BX
Valid instruction
Invalid instruction
![Page 4: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/4.jpg)
MOV AX, [BX]
BEFORE AFTER
BX = 9ABCHDS = 5678HAX = 1234H
BX = 9ABCHDS = 5678HAX = 4433H
PA = BX + (DS)*10H = 9ABC + 5678*10H = 6023CH
11H
22H
33H
44H
55H
………60239H6023AH
6023BH6023CH6023DH
6023EH
DS MemoryDS Memory
………60239H6023AH
6023BH6023CH6023DH
6023EH
Memory read
11H
22H
33H
44H
55H
![Page 5: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/5.jpg)
MOV 1234H[BP],SI
BEFORE AFTER
SI = 5678HBP = AB12HSS = 9000H
SI = 5678HBP = AB12HSS = 9000H
PA = 1234 + BP + (SS)*10H = 1234 + AB12 + 9000*10H = 9BD46H
11H
22H
33H
44H
55H
11H
22H
78H
56H
55H
………9BD43H9BD44H
9BD45H9BD46H9BD47H
9BD48H
SS Memory SS Memory
………9BD43H9BD44H
9BD45H9BD46H9BD47H
9BD48H
Memory write
![Page 6: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/6.jpg)
MOV CS:[BX][DI],53H
BEFORE AFTER
DI = 1234HBX = AB12HCS = 9000H
DI = 1234HBX = AB12HCS = 9000H
PA = DI + BX + (CS)*10H = 1234 + AB12 + 9000*10H = 9BD46H
11H
22H
33H
44H
55H
11H
22H
53H
44H
55H
………9BD43H9BD44H
9BD45H9BD46H9BD47H
9BD48H
CS Memory CS Memory
………9BD43H9BD44H
9BD45H9BD46H9BD47H
9BD48H
Memory write
![Page 7: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/7.jpg)
MOV [BX],AL
BEFORE AFTER
AL= 34HBX = 5678HDS = 9000H
AL = 34HBX = 5678HDS = 9000H
PA = BX + (DS)*10H = 5678 + 9000*10H = 95678H
99H 34H95678H
Memory Memory
95678H
Memory write
![Page 8: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/8.jpg)
LEA -Load Effective Address(EA)
• Syntax: reg - BX,SI,DI,BP,SP src - memory location
• Action: 1) instr copies the EA of the memory & it is transferred to the specified reg.
2) instr is reqd for initializing the memory pointers (BX,SI,DI,BP,SP)
3) instr does not transfer data from memory.
LEA reg, src
![Page 9: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/9.jpg)
• LEA BX, DS:1234H• LEA BX, [1234H]• LEA BX, MSG• LEA CX, MSG• LEA BP, MSG• LEA SP, MSG
• LEA DS, 56H[SI]• LEA BX, SI• LEA BX, 1234H• LEA IP, MSG
Valid instruction
Invalid instruction
![Page 10: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/10.jpg)
LEA BX, 56H[SI]
BEFORE AFTER
BX = 1000HSI = 7894HFLAG = 0234H
BX = 78EAHSI = 7894HFLAG = 0234H
LEA BX, 56H[SI]
EA = 56H + 7894H = 78EAH
LEA BP, 05H[BX+DI]BEFORE AFTER
BX = A1B2HDI = 5678HBP = 3239H
BX = A1B2HDI = 5678HBP = F82FH
LEA BP, 05H[BX+DI]
EA = 05H + A1B2H + 5678H = F82FH
![Page 11: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/11.jpg)
LDS-Load Register And Data Segment
• Syntax: reg – 16 bit reg except IP src - memory location
• Action: 1) instr transfers 32-bit data from memory.
2) 1st 16-bits transferred to reg specified 3) 2nd 16-bits transferred to DS reg .
LDS reg, src
![Page 12: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/12.jpg)
LDS AX, [1234H]
BEFORE AFTER
DS = 2000HAX = 0000H
DS = 7856HAX = 3412H
LDS AX, [1234H]
PA = 1234H + (DS)*10H = 1234 + 20000H = 21234H
12H
34H
56H
78H
12H
34H
56H
78H
2123421235
2123621237
2123421235
2123621237
Memory Memory
2nd word1st word
![Page 13: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/13.jpg)
LES-Load Register And Extra Segment
• Syntax: reg – 16 bit reg except IP src - memory location
• Action: 1) instr transfers 32-bit data from memory.
2) 1st 16-bits transferred to reg specified 3) 2nd 16-bits transferred to ES reg .
LES reg, src
![Page 14: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/14.jpg)
LES BX, [1234H]
BEFORE AFTERDS = 2000HBX = 0000HES = 9000H
DS = 2000HBX = 3412HES = 7856H
LES BX, [1234H]
PA = 1234H + (DS)*10H = 1234 + 20000H = 21234H
12H
34H
56H
78H
12H
34H
56H
78H
2123421235
2123621237
2123421235
2123621237
Memory Memory
2nd word1st word
![Page 15: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/15.jpg)
XLAT-Translate Instruction
• Action: 1) instr is useful to convert from one code to another
using lookup table 2) has no operands & is implied mode of addressing. So
prior to execution of this instr, BX should be initialized to contain the start address of the lookup table & AL should contain the code to be converted.
3) After executing the instr, 1 byte data stored in offset address AL+BX in the DS memory is copied into AL ie
(AL)Ds:[(BX) + (AL)]4) AL contains the converted code.
![Page 16: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/16.jpg)
XLAT
BEFORE AFTERAL = 0AHBX = 0100HDS = 9000H
AL = 41HBX = 0100HDS = 9000H
PA = (AL) + (BX) +(DS)*10H = 0AH + 0100H + 90000H = 9010AH
41H
90000H ------90100 H
9010AH
DS Memory
LOOKUP TABLE
Read from table
Starting addr of DS
Starting addr of lookup table
![Page 17: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/17.jpg)
• LAHF (Load AH with lower byte of flag reg) -- no operands
STCMOV AX,46H ; AX=0046HLAHF ; AX=0346H
• SAHF (Store AH contents in lower byte of flag reg) -- no operands
• XCHG (Exchange operation) Syntax: XCHG op1,op2XCHG BX, 1234[BX+SI]XCHG [BX],[SI]XCHG CS,BX
Invalid Instruction
SF ZF 0 AF 0 PF 1 CF
7 6 5 4 3 2 1 0
![Page 18: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/18.jpg)
STACK
![Page 19: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/19.jpg)
PUSH BX
BEFORE AFTER
SP = 1234HSS = 5000HBX = 5678H
SP = 1232HSS = 5000HBX = 5678H
PA = 1234H + (SS)*10H = 1234 + 50000H = 51234H
C3H
78H
56H
C3H
…….. 5122FH
51232H
51234H
SS Memory SS Memory
Top of stack
…….. 5122FH
51232H
51234H
Top
![Page 20: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/20.jpg)
POP BX
BEFORE AFTER
SP = 1232HSS = 5000HBX = 1234H
SP = 1234HSS = 5000HBX = 5678H
PA = 1232H + (SS)*10H = 1234 + 50000H = 51232H
78H
56H
C3H C3H
…….. 5122FH
51232H
51234H
SS Memory SS Memory
Top of stack
…….. 5122FH
51232H
51234HTop
![Page 21: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/21.jpg)
STRING INSTRUCTIONS
![Page 22: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/22.jpg)
• An array (a sequence) of characters is called a STRING• STR DB “SVIT”
……..
………
53
56
49
54
…….
…….
STR[0]STR[1]STR[2]STR[3]
2000=2000+02000=2000+12000=2000+22000=2000+3
Base address of array STR
•Data segment register (used as source segment)•Extra segment register (used as destination segment)
•Source index register(SI) should be associated with DS•Destination index register(DI) should be associated with ES
![Page 23: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/23.jpg)
STRING INSTRUCTIONS IN 8086
1. MOVSB/ MOVSW2. CMPSB/ CMPSW3. SCASB/ SCASW4. LODSB/ LODSW5. STOSB/ STOSW6. REP/REPE/REPZ/REPNE/REPNZ
![Page 24: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/24.jpg)
• During string manipulation, SI register should contain offset address of the source byte or word with respect to data segment.
LEA SI, STR1 or MOV SI, OFFSET STR1
• During string manipulation, DI register should contain offset address of the destination byte or word with respect to extra segment.
LEA DI, STR2 or MOV DI, OFFSET STR2
![Page 25: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/25.jpg)
STOSB -store byte from AL into string element addressed by DI in ES & updates DI (ES:[DI])
• ES:[(DI)] [AL]• No flags affected• If DF=0 then DI=DI+1• If DF=1 then DI=DI-1• Segment for memory access : ES
![Page 26: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/26.jpg)
MOV AL,12HMOV CX,5REP STOSB
ES=4F57
12 12 12 12 12
DI=02 DI=03 DI=04 DI=05 DI=06
![Page 27: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/27.jpg)
STOSW -store word from AX into string element addressed by DI in ES & updates DI (ES:[DI])
• ES:[(DI)] [AX]• No flags affected• If DF=0 then DI=DI+2• If DF=1 then DI=DI-2• Segment for memory access : ES
![Page 28: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/28.jpg)
MOV AX,1234HMOV CX,5REP STOSW
ES=4F57
1234 1234 1234 1234 1234
DI=02 DI=04 DI=06 DI=08 DI=0A
![Page 29: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/29.jpg)
LODSB –load byte at DS:[SI] into AL & updates SI
• DS:[SI] AL• No flags affected• If DF=0 then SI=SI+1• If DF=1 then SI=SI-1• Segment for memory access : DS
![Page 30: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/30.jpg)
LEA SI, xMOV CX,5REP LODSB
AL=41h
41 42 43 44 45
SI=02 SI=03 SI=04 SI=05 SI=06
x db ‘A’, ’B’ , ’C’ , ’D’ , ’E’
AL=42h AL=43h AL=44h AL=45h
![Page 31: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/31.jpg)
LODSW –load word at DS:[SI] into AX & updates SI
• AXDS:[SI] • No flags affected• If DF=0 then SI=SI+2• If DF=1 then SI=SI-2• Segment for memory access : DS
![Page 32: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/32.jpg)
LEA SI, xMOV CX,5REP LODSW
AX=0111h
11 01 22 02 33 03 44 04 55 05
SI=02 SI=04 SI=06 SI=08 SI=0A
x dw 111h, 222h, 333h, 444h, 555h
AX=0222h AX=0333h AX=0444h AX=0555h
![Page 33: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/33.jpg)
MOVSB –Copy Byte at DS:[SI] to ES:[DI] & updates SI and DI
• ES:[DI] DS:[SI] • No flags affected• If DF=0 then SI=SI+1, DI=DI+1• If DF=1 then SI=SI-1, DI=DI-1• Segment for memory access : DS and ES
![Page 34: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/34.jpg)
CLD ;set forward directionLEA SI, xLEA DI, yMOV CX,5REP MOVSB
01 02 03 04 05
SI=01 SI=02 SI=03 SI=04 SI=05
y db 5 dup(0)x db 1, 2, 3, 4, 5
Data Segment DS
Extra Segment ES 00 00 00 00 00
DI=06 DI=07 DI=08 DI=09 DI=0A
01 02 03 04 05
![Page 35: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/35.jpg)
Move string from one memory location to another
.model small
.data str db “Test string” N dw $-str dest db 10 dup(?)
.code Mov ax,@data Mov ds,ax Mov es,axLea si,strLea di,dest Cld Mov cx,N
Rep movsb
Mov ah,4chInt 21h
![Page 36: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/36.jpg)
MOVSW –Copy word at DS:[SI] to ES:[DI] & updates SI and DI
• ES:[DI] DS:[SI] • No flags affected• If DF=0 then SI=SI+2, DI=DI+2• If DF=1 then SI=SI-2, DI=DI-2• Segment for memory access : DS and ES
![Page 37: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/37.jpg)
CLD ;set forward directionLEA SI, xLEA DI, yMOV CX,5REP MOVSW
01 00 02 00 03 00 04 00 05 00
SI=02 SI=04 SI=06 SI=08 SI=0A
y dw 5 dup(0)x dw 1, 2, 3, 4, 5
Data Segment DS
Extra Segment ES 00 00 00 00 00
DI=07 DI=09 DI=0A DI=0C DI=0E
01 00 02 00 03 00 04 00 05 00
![Page 38: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/38.jpg)
Move string from one memory location to another
.model small
.data str db “Test string” N dw ($-str)/2 dest db 10 dup(?)
.code Mov ax,@data Mov ds,ax Mov es,axLea si,strLea di,dest Cld Mov cx,N
Rep movsw
Mov ah,4chInt 21h
![Page 39: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/39.jpg)
SCASB –Compare bytes: ES:[DI] from AL & updates DI
• AL - ES:[DI]• If DF=0 then DI=DI+1• If DF=1 then DI=DI-1• Segment for memory access : ES• All flags are updated to reflect the relationship
of the destination operand to the source operand
![Page 40: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/40.jpg)
SCASW –Compare words: ES:[DI] from AX & updates DI
• AX - ES:[DI] • If DF=0 then DI=DI+2• If DF=1 then DI=DI-2• Segment for memory access : ES• All flags are updated according to result:
OF,SF,ZF,AF,CF,PF
![Page 41: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/41.jpg)
CMPSB –Compare bytes: ES:[DI] from DS:[SI] & updates DI and SI
• DS:[SI] - ES:[DI] • If DF=0 then DI=DI+1, SI=SI+1• If DF=1 then DI=DI-1, SI=SI-1• Segment for memory access : DS, ES• All flags are updated to reflect the relationship
of the destination operand to the source operand
![Page 42: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/42.jpg)
CLDMOV AX,dataMOV DS,AXMOV ES,AXMOV SI,STR1MOV DI,STR2MOV CX, size ;set counter to string lengthREPE CMPSB ;compare until equalJNZ not_equalMOV AL,’y’JMP exit
not_equal: MOV AL,’n’
exit: MOV AH,04CH INT 21H
STR1 Db ‘test string’STR2 Db ‘test string’
![Page 43: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/43.jpg)
CMPSW –Compare words: ES:[DI] from DS:[SI] & updates DI and SI
• DS:[SI] - ES:[DI] • If DF=0 then DI=DI+2, SI=SI+2• If DF=1 then DI=DI-2, SI=SI-2• Segment for memory access : DS, ES• All flags are updated to reflect the relationship
of the destination operand to the source operand
![Page 44: 8086 Instruction Set](https://reader036.vdocument.in/reader036/viewer/2022081412/544939e8b1af9f3d0c8b4714/html5/thumbnails/44.jpg)
CLDMOV AX,dataMOV DS,AXMOV ES,AXMOV SI,STR1MOV DI,STR2MOV CX, size ;set counter to string lengthREPE CMPSW ;compare until equalJNZ not_equalMOV AL,’y’JMP exit
not_equal: MOV AL,’n’
exit: MOV AH,04CH INT 21H
STR1 Dw 1234h, 5678h, 9012h, 3456hSTR2 Dw 1234h, 5678h, 9012h, 3456h