427 lines
25 KiB
Plaintext
427 lines
25 KiB
Plaintext
6-8
|
||
|
||
Opcodes Instruction Description
|
||
|
||
37 AAA ASCII adjust AL (carry into AH) after addition
|
||
D5 0A AAD ASCII adjust before division (AX = 10*AH + AL)
|
||
D4 0A AAM ASCII adjust after multiply (AL/10: AH=Quo AL=Rem)
|
||
3F AAS ASCII adjust AL (borrow from AH) after subtraction
|
||
14 ib ADC AL,ib Add with carry immediate byte into AL
|
||
15 iw ADC AX,iw Add with carry immediate word into AX
|
||
80 /2 ib ADC eb,ib Add with carry immediate byte into EA byte
|
||
10 /r ADC eb,rb Add with carry byte register into EA byte
|
||
83 /2 ib ADC ew,ib Add with carry immediate byte into EA word
|
||
81 /2 iw ADC ew,iw Add with carry immediate word into EA word
|
||
11 /r ADC ew,rw Add with carry word register into EA word
|
||
12 /r ADC rb,eb Add with carry EA byte into byte register
|
||
13 /r ADC rw,ew Add with carry EA word into word register
|
||
|
||
04 ib ADD AL,ib Add immediate byte into AL
|
||
05 iw ADD AX,iw Add immediate word into AX
|
||
80 /0 ib ADD eb,ib Add immediate byte into EA byte
|
||
00 /r ADD eb,rb Add byte register into EA byte
|
||
83 /0 ib ADD ew,ib Add immediate byte into EA word
|
||
81 /0 iw ADD ew,iw Add immediate word into EA word
|
||
01 /r ADD ew,rw Add word register into EA word
|
||
02 /r ADD rb,eb Add EA byte into byte register
|
||
03 /r ADD rw,ew Add EA word into word register
|
||
0F 20 #ADD4S Add CL nibbles BCD from DS:SI into ES:DI (CL even,NZ)
|
||
|
||
24 ib AND AL,ib Logical-AND immediate byte into AL
|
||
25 iw AND AX,iw Logical-AND immediate word into AX
|
||
80 /4 ib AND eb,ib Logical-AND immediate byte into EA byte
|
||
20 /r AND eb,rb Logical-AND byte register into EA byte
|
||
83 /4 ib AND ew,ib Logical-AND immediate byte into EA word
|
||
81 /4 iw AND ew,iw Logical-AND immediate word into EA word
|
||
21 /r AND ew,rw Logical-AND word register into EA word
|
||
22 /r AND rb,eb Logical-AND EA byte into byte register
|
||
23 /r AND rw,ew Logical-AND EA word into word register
|
||
63 /r *ARPL ew,rw Adjust RPL of EA word not smaller than RPL of rw
|
||
|
||
62 /r *BOUND rw,md INT 5 if rw not between [md] and [md+2] inclusive
|
||
9A cd CALL cd Call far segment, immediate 4-byte address
|
||
E8 cw CALL cw Call near, offset relative to next instruction
|
||
FF /3 CALL ed Call far segment, address at EA doubleword
|
||
FF /2 CALL ew Call near, offset absolute at EA word
|
||
0F FF ib #CALL80 ib Call 8080-emulation code at INT number ib
|
||
98 CBW Convert byte into word (AH = top bit of AL)
|
||
F8 CLC Clear carry flag
|
||
FC CLD Clear direction flag so SI and DI will increment
|
||
FA CLI Clear interrupt enable flag; interrupts disabled
|
||
6-9
|
||
|
||
0F 12/0 #CLRBIT eb,CL Clear bit CL of eb
|
||
0F 13/0 #CLRBIT ew,CL Clear bit CL of ew
|
||
0F 1A/0 ib #CLRBIT eb,ib Clear bit ib of eb
|
||
0F 1B/0 ib #CLRBIT ew,ib Clear bit ib of ew
|
||
0F 06 *CLTS Clear task switched flag
|
||
F5 CMC Complement carry flag
|
||
3C ib CMP AL,ib Subtract immediate byte from AL for flags only
|
||
3D iw CMP AX,iw Subtract immediate word from AX for flags only
|
||
80 /7 ib CMP eb,ib Subtract immediate byte from EA byte for flags only
|
||
38 /r CMP eb,rb Subtract byte register from EA byte for flags only
|
||
83 /7 ib CMP ew,ib Subtract immediate byte from EA word for flags only
|
||
81 /7 iw CMP ew,iw Subtract immediate word from EA word for flags only
|
||
39 /r CMP ew,rw Subtract word register from EA word for flags only
|
||
3A /r CMP rb,eb Subtract EA byte from byte register for flags only
|
||
3B /r CMP rw,ew Subtract EA word from word register for flags only
|
||
|
||
0F 26 #CMP4S Compare CL nibbles CD at DS:SI from ES:DI (CL even,NZ)
|
||
A6 CMPS mb,mb Compare bytes ES:[DI] from [SI], advance SI and DI
|
||
A7 CMPS mw,mw Compare words ES:[DI] from [SI], advance SI and DI
|
||
A6 CMPSB Compare bytes ES:[DI] from DS:[SI], advance SI and DI
|
||
A7 CMPSW Compare words ES:[DI] from DS:[SI], advance SI and DI
|
||
99 CWD Convert word to doubleword (DX = top bit of AX)
|
||
|
||
27 DAA Decimal adjust AL after addition
|
||
2F DAS Decimal adjust AL after subtraction
|
||
FE /1 DEC eb Decrement EA byte by 1
|
||
FF /1 DEC ew Decrement EA word by 1
|
||
48+rw DEC rw Decrement word register by 1
|
||
F6 /6 DIV eb Unsigned divide AX by EA byte (AL=Quo AH=Rem)
|
||
F7 /6 DIV ew Unsigned divide DXAX by EA word (AX=Quo DX=Rem)
|
||
C8 iw 00 *ENTER iw,0 Make stack frame, iw bytes local storage, 0 levels
|
||
C8 iw 01 *ENTER iw,1 Make stack frame, iw bytes local storage, 1 level
|
||
C8 iw ib *ENTER iw,ib Make stack frame, iw bytes local storage, ib levels
|
||
Fany Floating point set is in Chapter 7
|
||
F4 HLT Halt
|
||
|
||
F6 /7 IDIV eb Signed divide AX by EA byte (AL=Quo AH=Rem)
|
||
F7 /7 IDIV ew Signed divide DXAX by EA word (AX=Quo DX=Rem)
|
||
F6 /5 IMUL eb Signed multiply (AX = AL * EA byte)
|
||
F7 /5 IMUL ew Signed multiply (DXAX = AX * EA word)
|
||
6B /r ib *IMUL rw,ib Signed multiply immediate byte into word register
|
||
69 /r iw *IMUL rw,iw Signed multiply immediate word into word register
|
||
69 /r iw *IMUL rw,ew,iw Signed multiply (rw = EA word * immediate word)
|
||
6B /r ib *IMUL rw,ew,ib Signed multiply (rw = EA word * immediate byte)
|
||
|
||
E4 ib IN AL,ib Input byte from immediate port into AL
|
||
EC IN AL,DX Input byte from port DX into AL
|
||
E5 ib IN AX,ib Input word from immediate port into AX
|
||
ED IN AX,DX Input word from port DX into AX
|
||
|
||
FE /0 INC eb Increment EA byte by 1
|
||
FF /0 INC ew Increment EA word by 1
|
||
40+rw INC rw Increment word register by 1
|
||
6C *INS eb,DX Input byte from port DX into [DI]
|
||
6D *INS ew,DX Input word from port DX into [DI]
|
||
6C *INSB Input byte from port DX into ES:[DI]
|
||
6D *INSW Input word from port DX into ES:[DI]
|
||
6-10
|
||
|
||
CC INT 3 Interrupt 3 (trap to debugger) (far call, with flags
|
||
CD ib INT ib Interrupt numbered by immediate byte pushed first)
|
||
CE INTO Interrupt 4 if overflow flag is 1
|
||
CF IRET Interrupt return (far return and pop flags)
|
||
|
||
77 cb JA cb Jump short if above (CF=0 and ZF=0) above=UNSIGNED
|
||
73 cb JAE cb Jump short if above or equal (CF=0)
|
||
72 cb JB cb Jump short if below (CF=1) below=UNSIGNED
|
||
76 cb JBE cb Jump short if below or equal (CF=1 or ZF=1)
|
||
72 cb JC cb Jump short if carry (CF=1)
|
||
E3 cb JCXZ cb Jump short if CX register is zero
|
||
74 cb JE cb Jump short if equal (ZF=1)
|
||
7F cb JG cb Jump short if greater (ZF=0 and SF=OF) greater=SIGNED
|
||
7D cb JGE cb Jump short if greater or equal (SF=OF)
|
||
7C cb JL cb Jump short if less (SF/=OF) less=SIGNED
|
||
7E cb JLE cb Jump short if less or equal (ZF=1 or SF/=OF)
|
||
|
||
EB cb JMP cb Jump short (signed byte relative to next instruction)
|
||
EA cd JMP cd Jump far (4-byte immediate address)
|
||
E9 cw JMP cw Jump near (word offset relative to next instruction)
|
||
FF /4 JMP ew Jump near to EA word (absolute offset)
|
||
FF /5 JMP md Jump far (4-byte address in memory doubleword)
|
||
|
||
76 cb JNA cb Jump short if not above (CF=1 or ZF=1)
|
||
72 cb JNAE cb Jump short if not above or equal (CF=1)
|
||
73 cb JNB cb Jump short if not below (CF=0)
|
||
77 cb JNBE cb Jump short if not below or equal (CF=0 and ZF=0)
|
||
73 cb JNC cb Jump short if not carry (CF=0)
|
||
75 cb JNE cb Jump short if not equal (ZF=0)
|
||
7E cb JNG cb Jump short if not greater (ZF=1 or SF/=OF)
|
||
7C cb JNGE cb Jump short if not greater or equal (SF/=OF)
|
||
7D cb JNL cb Jump short if not less (SF=OF)
|
||
7F cb JNLE cb Jump short if not less or equal (ZF=0 and SF=OF)
|
||
|
||
71 cb JNO cb Jump short if not overflow (OF=0)
|
||
7B cb JNP cb Jump short if not parity (PF=0)
|
||
79 cb JNS cb Jump short if not sign (SF=0)
|
||
75 cb JNZ cb Jump short if not zero (ZF=0)
|
||
70 cb JO cb Jump short if overflow (OF=1)
|
||
7A cb JP cb Jump short if parity (PF=1)
|
||
7A cb JPE cb Jump short if parity even (PF=1)
|
||
7B cb JPO cb Jump short if parity odd (PF=0)
|
||
78 cb JS cb Jump short if sign (SF=1)
|
||
74 cb JZ cb Jump short if zero (ZF=1)
|
||
|
||
9F LAHF Load: AH = flags SF ZF xx AF xx PF xx CF
|
||
0F 02 /r *LAR rw,ew Load: high(rw) = Access Rights byte, selector ew
|
||
C5 /r LDS rw,ed Load EA doubleword into DS and word register
|
||
8D /r LEA rw,m Calculate EA offset given by m, place in rw
|
||
C9 *LEAVE Set SP to BP, then POP BP (reverses previous ENTER)
|
||
C4 /r LES rw,ed Load EA doubleword into ES and word register
|
||
|
||
0F 01 /2 *LGDT m Load 6 bytes at m into Global Descriptor Table reg
|
||
0F 01 /3 *LIDT m Load 6 bytes at m into Interrupt Descriptor Table reg
|
||
0F 00 /2 *LLDT ew Load selector ew into Local Descriptor Table reg
|
||
0F 01 /6 *LMSW ew Load EA word into Machine Status Word
|
||
F0 LOCK (prefix) Assert BUSLOCK signal for the next instruction
|
||
6-11
|
||
|
||
0F 33/r #LODBITS rb,rb Load AX with DS:SI,bit rb (incr. SI,rb), rb+1 bits
|
||
0F 3B/0 ib #LODBITS rb,ib Load AX with DS:SI,bit rb (incr. SI,rb), ib+1 bits
|
||
AC LODS mb Load byte [SI] into AL, advance SI
|
||
AD LODS mw Load word [SI] into AX, advance SI
|
||
AC LODSB Load byte [SI] into AL, advance SI
|
||
AD LODSW Load word [SI] into AX, advance SI
|
||
|
||
E2 cb LOOP cb noflags DEC CX; jump short if CX/=0
|
||
E1 cb LOOPE cb noflags DEC CX; jump short if CX/=0 and equal (ZF=1)
|
||
E0 cb LOOPNE cb noflags DEC CX; jump short if CX/=0 and not equal
|
||
E0 cb LOOPNZ cb noflags DEC CX; jump short if CX/=0 and ZF=0
|
||
E1 cb LOOPZ cb noflags DEC CX; jump short if CX/=0 and zero (ZF=1)
|
||
0F 03 /r *LSL rw,ew Load: rw = Segment Limit, selector ew
|
||
0F 00 /3 *LTR ew Load EA word into Task Register
|
||
|
||
A0 iw MOV AL,xb Move byte variable (offset iw) into AL
|
||
A1 iw MOV AX,xw Move word variable (offset iw) into AX
|
||
8E /3 MOV DS,mw Move memory word into DS
|
||
8E /3 MOV DS,rw Move word register into DS
|
||
C6 /0 ib MOV eb,ib Move immediate byte into EA byte
|
||
88 /r MOV eb,rb Move byte register into EA byte
|
||
8E /0 MOV ES,mw Move memory word into ES
|
||
8E /0 MOV ES,rw Move word register into ES
|
||
|
||
8C /1 MOV ew,CS Move CS into EA word
|
||
8C /3 MOV ew,DS Move DS into EA word
|
||
C7 /0 iw MOV ew,iw Move immediate word into EA word
|
||
8C /0 MOV ew,ES Move ES into EA word
|
||
89 /r MOV ew,rw Move word register into EA word
|
||
8C /2 MOV ew,SS Move SS into EA word
|
||
B0+rb ib MOV rb,ib Move immediate byte into byte register
|
||
8A /r MOV rb,eb Move EA byte into byte register
|
||
B8+rw iw MOV rw,iw Move immediate word into word register
|
||
8B /r MOV rw,ew Move EA word into word register
|
||
|
||
8E /2 MOV SS,mw Move memory word into SS
|
||
8E /2 MOV SS,rw Move word register into SS
|
||
A2 iw MOV xb,AL Move AL into byte variable (offset iw)
|
||
A3 iw MOV xw,AX Move AX into word register (offset iw)
|
||
A4 MOVS mb,mb Move byte [SI] to ES:[DI], advance SI and DI
|
||
A5 MOVS mw,mw Move word [SI] to ES:[DI], advance SI and DI
|
||
A4 MOVSB Move byte DS:[SI] to ES:[DI], advance SI and DI
|
||
A5 MOVSW Move word DS:[SI] to ES:[DI], advance SI and DI
|
||
6-12
|
||
|
||
F6 /4 MUL eb Unsigned multiply (AX = AL * EA byte)
|
||
F7 /4 MUL ew Unsigned multiply (DXAX = AX * EA word)
|
||
F6 /3 NEG eb Two's complement negate EA byte
|
||
F7 /3 NEG ew Two's complement negate EA word
|
||
NIL (prefix) Special "do-nothing" opcode assembles no code
|
||
90 NOP No Operation
|
||
F6 /2 NOT eb Reverse each bit of EA byte
|
||
F7 /2 NOT ew Reverse each bit of EA word
|
||
0F 16/0 #NOTBIT eb,CL Complement bit CL of eb
|
||
0F 17/0 #NOTBIT ew,CL Complement bit CL of ew
|
||
0F 1E/0 ib #NOTBIT eb,ib Complement bit ib of eb
|
||
0F 1F/0 ib #NOTBIT ew,ib Complement bit ib of ew
|
||
|
||
0C ib OR AL,ib Logical-OR immediate byte into AL
|
||
0D iw OR AX,iw Logical-OR immediate word into AX
|
||
80 /1 ib OR eb,ib Logical-OR immediate byte into EA byte
|
||
08 /r OR eb,rb Logical-OR byte register into EA byte
|
||
83 /1 ib OR ew,ib Logical-OR immediate byte into EA word
|
||
81 /1 iw OR ew,iw Logical-OR immediate word into EA word
|
||
09 /r OR ew,rw Logical-OR word register into EA word
|
||
0A /r OR rb,eb Logical-OR EA byte into byte register
|
||
0B /r OR rw,ew Logical-OR EA word into word register
|
||
|
||
E6 ib OUT ib,AL Output byte AL to immediate port number ib
|
||
E7 ib OUT ib,AX Output word AX to immediate port number ib
|
||
EE OUT DX,AL Output byte AL to port number DX
|
||
EF OUT DX,AX Output word AX to port number DX
|
||
6E *OUTS DX,eb Output byte [SI] to port number DX, advance SI
|
||
6F *OUTS DX,ew Output word [SI] to port number DX, advance SI
|
||
6E *OUTSB Output byte DS:[SI] to port number DX, advance SI
|
||
6F *OUTSW Output word DS:[SI] to port number DX, advance SI
|
||
|
||
1F POP DS Set DS to top of stack, increment SP by 2
|
||
07 POP ES Set ES to top of stack, increment SP by 2
|
||
8F /0 POP mw Set memory word to top of stack, increment SP by 2
|
||
58+rw POP rw Set word register to top of stack, increment SP by 2
|
||
17 POP SS Set SS to top of stack, increment SP by 2
|
||
61 *POPA Pop DI,SI,BP,SP,BX,DX,CX,AX (SP value is ignored)
|
||
9D POPF Set flags register to top of stack, increment SP by 2
|
||
|
||
0E PUSH CS Set [SP-2] to CS, then decrement SP by 2
|
||
1E PUSH DS Set [SP-2] to DS, then decrement SP by 2
|
||
06 PUSH ES Set [SP-2] to ES, then decrement SP by 2
|
||
6A ib *PUSH ib Push sign-extended immediate byte
|
||
68 iw *PUSH iw Set [SP-2] to immediate word, then decrement SP by 2
|
||
FF /6 PUSH mw Set [SP-2] to memory word, then decrement SP by 2
|
||
50+rw PUSH rw Set [SP-2] to word register, then decrement SP by 2
|
||
16 PUSH SS Set [SP-2] to SS, then decrement SP by 2
|
||
60 *PUSHA Push AX,CX,DX,BX,original SP,BP,SI,DI
|
||
9C PUSHF Set [SP-2] to flags register, then decrement SP by 2
|
||
|
||
D0 /2 RCL eb,1 Rotate 9-bit quantity (CF, EA byte) left once
|
||
D2 /2 RCL eb,CL Rotate 9-bit quantity (CF, EA byte) left CL times
|
||
C0 /2 ib *RCL eb,ib Rotate 9-bit quantity (CF, EA byte) left ib times
|
||
D1 /2 RCL ew,1 Rotate 17-bit quantity (CF, EA word) left once
|
||
D3 /2 RCL ew,CL Rotate 17-bit quantity (CF, EA word) left CL times
|
||
C1 /2 ib *RCL ew,ib Rotate 17-bit quantity (CF, EA word) left ib times
|
||
6-13
|
||
|
||
D0 /3 RCR eb,1 Rotate 9-bit quantity (CF, EA byte) right once
|
||
D2 /3 RCR eb,CL Rotate 9-bit quantity (CF, EA byte) right CL times
|
||
C0 /3 ib *RCR eb,ib Rotate 9-bit quantity (CF, EA byte) right ib times
|
||
D1 /3 RCR ew,1 Rotate 17-bit quantity (CF, EA word) right once
|
||
D3 /3 RCR ew,CL Rotate 17-bit quantity (CF, EA word) right CL times
|
||
C1 /3 ib *RCR ew,ib Rotate 17-bit quantity (CF, EA word) right ib times
|
||
|
||
F3 REP (prefix) Repeat following MOVS,LODS,STOS,INS, or OUTS CX times
|
||
65 #REPC (prefix) Repeat following CMPS or SCAS CX times or until CF=0
|
||
F3 REPE (prefix) Repeat following CMPS or SCAS CX times or until ZF=0
|
||
64 #REPNC (prfix) Repeat following CMPS or SCAS CX times or until CF=1
|
||
F2 REPNE (prfix) Repeat following CMPS or SCAS CX times or until ZF=1
|
||
F2 REPNZ (prfix) Repeat following CMPS or SCAS CX times or until ZF=1
|
||
F3 REPZ (prefix) Repeat following CMPS or SCAS CX times or until ZF=0
|
||
|
||
CB RETF Return to far caller (pop offset, then seg)
|
||
C3 RET Return to near caller (pop offset only)
|
||
CA iw RETF iw RET (far), pop offset, seg, iw bytes
|
||
C2 iw RET iw RET (near), pop offset, iw bytes pushed before Call
|
||
|
||
D0 /0 ROL eb,1 Rotate 8-bit EA byte left once
|
||
D2 /0 ROL eb,CL Rotate 8-bit EA byte left CL times
|
||
C0 /0 ib *ROL eb,ib Rotate 8-bit EA byte left ib times
|
||
D1 /0 ROL ew,1 Rotate 16-bit EA word left once
|
||
D3 /0 ROL ew,CL Rotate 16-bit EA word left CL times
|
||
C1 /0 ib *ROL ew,ib Rotate 16-bit EA word left ib times
|
||
0F 28/0 #ROL4 eb Rotate nibbles: Heb=Leb HAL,Leb=LAL LAL=Heb
|
||
|
||
D0 /1 ROR eb,1 Rotate 8-bit EA byte right once
|
||
D2 /1 ROR eb,CL Rotate 8-bit EA byte right CL times
|
||
C0 /1 ib *ROR eb,ib Rotate 8-bit EA byte right ib times
|
||
D1 /1 ROR ew,1 Rotate 16-bit EA word right once
|
||
D3 /1 ROR ew,CL Rotate 16-bit EA word right CL times
|
||
C1 /1 ib *ROR ew,ib Rotate 16-bit EA word right ib times
|
||
0F 2A/0 #ROR4 eb Rotate nibbles: Leb=Heb Heb=LAL AL=eb
|
||
|
||
9E SAHF Store AH into flags SF ZF xx AF xx PF xx CF
|
||
D0 /4 SAL eb,1 Multiply EA byte by 2, once
|
||
D2 /4 SAL eb,CL Multiply EA byte by 2, CL times
|
||
C0 /4 ib *SAL eb,ib Multiply EA byte by 2, ib times
|
||
D1 /4 SAL ew,1 Multiply EA word by 2, once
|
||
D3 /4 SAL ew,CL Multiply EA word by 2, CL times
|
||
C1 /4 ib *SAL ew,ib Multiply EA word by 2, ib times
|
||
|
||
D0 /7 SAR eb,1 Signed divide EA byte by 2, once
|
||
D2 /7 SAR eb,CL Signed divide EA byte by 2, CL times
|
||
C0 /7 ib *SAR eb,ib Signed divide EA byte by 2, ib times
|
||
D1 /7 SAR ew,1 Signed divide EA word by 2, once
|
||
D3 /7 SAR ew,CL Signed divide EA word by 2, CL times
|
||
C1 /7 ib *SAR ew,ib Signed divide EA word by 2, ib times
|
||
6-14
|
||
|
||
1C ib SBB AL,ib Subtract with borrow immediate byte from AL
|
||
1D iw SBB AX,iw Subtract with borrow immediate word from AX
|
||
80 /3 ib SBB eb,ib Subtract with borrow immediate byte from EA byte
|
||
18 /r SBB eb,rb Subtract with borrow byte register from EA byte
|
||
83 /3 ib SBB ew,ib Subtract with borrow immediate byte from EA word
|
||
81 /3 iw SBB ew,iw Subtract with borrow immediate word from EA word
|
||
19 /r SBB ew,rw Subtract with borrow word register from EA word
|
||
1A /r SBB rb,eb Subtract with borrow EA byte from byte register
|
||
1B /r SBB rw,ew Subtract with borrow EA word from word register
|
||
|
||
AE SCAS mb Compare bytes AL - ES:[DI], advance DI
|
||
AF SCAS mw Compare words AL - ES:[DI], advance DI
|
||
AE SCASB Compare bytes AX - ES:[DI], advance DI
|
||
AF SCASW Compare words AX - ES:[DI], advance DI
|
||
|
||
0F 14/0 #SETBIT eb,CL Set bit CL of eb
|
||
0F 15/0 #SETBIT ew,CL Set bit CL of ew
|
||
0F 1C/0 ib #SETBIT eb,ib Set bit ib of eb
|
||
0F 1D/0 ib #SETBIT ew,ib Set bit ib of ew
|
||
0F 01 /0 *SGDT m Store 6-byte Global Descriptor Table register to M
|
||
|
||
D0 /4 SHL eb,1 Multiply EA byte by 2, once
|
||
D2 /4 SHL eb,CL Multiply EA byte by 2, CL times
|
||
C0 /4 ib *SHL eb,ib Multiply EA byte by 2, ib times
|
||
D1 /4 SHL ew,1 Multiply EA word by 2, once
|
||
D3 /4 SHL ew,CL Multiply EA word by 2, CL times
|
||
C1 /4 ib *SHL ew,ib Multiply EA word by 2, ib times
|
||
D0 /5 SHR eb,1 Unsigned divide EA byte by 2, once
|
||
D2 /5 SHR eb,CL Unsigned divide EA byte by 2, CL times
|
||
C0 /5 ib *SHR eb,ib Unsigned divide EA byte by 2, ib times
|
||
D1 /5 SHR ew,1 Unsigned divide EA word by 2, once
|
||
D3 /5 SHR ew,CL Unsigned divide EA word by 2, CL times
|
||
C1 /5 ib *SHR ew,ib Unsigned divide EA word by 2, ib times
|
||
|
||
0F 01 /1 *SIDT m Store 6-byte Interrupt Descriptor Table register to M
|
||
0F 00 /0 *SLDT ew Store Local Descriptor Table register to EA word
|
||
0F 01 /4 *SMSW ew Store Machine Status Word to EA word
|
||
F9 STC Set carry flag
|
||
FD STD Set direction flag so SI and DI will decrement
|
||
FB STI Set interrupt enable flag, interrupts enabled
|
||
|
||
0F 31/r #STOBITS rb,rb Store AX to ES:DI,bit rb (incr. DI,rb), rb+1 bits
|
||
0F 39/0 ib #STOBITS rb,ib Store AX to ES:DI,bit rb (incr. DI,rb), ib+1 bits
|
||
AA STOS mb Store AL to byte [DI], advance DI
|
||
AB STOS mw Store AX to word [DI], advance DI
|
||
AA STOSB Store AL to byte ES:[DI], advance DI
|
||
AB STOSW Store AX to word ES:[DI], advance DI
|
||
0F 00 /1 *STR ew Store Task Register to EA word
|
||
6-15
|
||
|
||
2C ib SUB AL,ib Subtract immediate byte from AL
|
||
2D iw SUB AX,iw Subtract immediate word from AX
|
||
80 /5 ib SUB eb,ib Subtract immediate byte from EA byte
|
||
28 /r SUB eb,rb Subtract byte register from EA byte
|
||
83 /5 ib SUB ew,ib Subtract immediate byte from EA word
|
||
81 /5 iw SUB ew,iw Subtract immediate word from EA word
|
||
29 /r SUB ew,rw Subtract word register from EA word
|
||
2A /r SUB rb,eb Subtract EA byte from byte register
|
||
2B /r SUB rw,ew Subtract EA word from word register
|
||
0F 22 #SUB4S Sub CL nibbles BCD at DS:SI from ES:DI (CL even,NZ)
|
||
|
||
A8 ib TEST AL,ib AND immediate byte into AL for flags only
|
||
A9 iw TEST AX,iw AND immediate word into AX for flags only
|
||
F6 /0 ib TEST eb,ib AND immediate byte into EA byte for flags only
|
||
84 /r TEST eb,rb AND byte register into EA byte for flags only
|
||
F7 /0 iw TEST ew,iw AND immediate word into EA word for flags only
|
||
85 /r TEST ew,rw AND word register into EA word for flags only
|
||
84 /r TEST rb,eb AND EA byte into byte register for flags only
|
||
85 /r TEST rw,ew AND EA word into word register for flags only
|
||
|
||
0F 10/0 #TESTBIT eb,CL Test bit CL of eb, set Z flag
|
||
0F 11/0 #TESTBIT ew,CL Test bit CL of ew, set Z flag
|
||
0F 18/0 ib #TESTBIT eb,ib Test bit ib of eb, set Z flag
|
||
0F 19/0 ib #TESTBIT ew,ib Test bit ib of ew, set Z flag
|
||
9B WAIT Wait until BUSY pin is inactive (HIGH)
|
||
0F 00 /4 *VERR ew Set ZF=1 if segment can be read, selector ew
|
||
0F 00 /5 *VERW ew Set ZF=1 if segment can be written to, selector ew
|
||
|
||
9r XCHG AX,rw Exchange word register with AX
|
||
86 /r XCHG eb,rb Exchange byte register with EA byte
|
||
87 /r XCHG ew,rw Exchange word register with EA word
|
||
86 /r XCHG rb,eb Exchange EA byte with byte register
|
||
9r XCHG rw,AX Exchange with word register
|
||
87 /r XCHG rw,ew Exchange EA word with word register
|
||
|
||
D7 XLAT mb Set AL to memory byte [BX + unsigned AL]
|
||
D7 XLATB Set AL to memory byte DS:[BX + unsigned AL]
|
||
34 ib XOR AL,ib Exclusive-OR immediate byte into AL
|
||
35 iw XOR AX,iw Exclusive-OR immediate word into AX
|
||
80 /6 ib XOR eb,ib Exclusive-OR immediate byte into EA byte
|
||
30 /r XOR eb,rb Exclusive-OR byte register into EA byte
|
||
83 /6 ib XOR ew,ib Exclusive-OR immediate byte into EA word
|
||
81 /6 iw XOR ew,iw Exclusive-OR immediate word into EA word
|
||
31 /r XOR ew,rw Exclusive-OR word register into EA word
|
||
32 /r XOR rb,eb Exclusive-OR EA byte into byte register
|
||
33 /r XOR rw,ew Exclusive-OR EA word into word register
|
||
|
||
* Starred forms will not execute on 8086/8088! See note at top of chart.
|
||
# These instructions work only on NEC chips! See note at top of chart.
|
||
|
||
|