# X86-instructieset

De x86-instructieset is een CISC-instructieset voor computers. Deze werd eind jaren zeventig door Intel ontwikkeld voor de 8086-processor. IBM besloot de processor van Intel in zijn IBM PC te gebruiken, en doordat de pc wijdverbreid raakte, werd de x86-instructieset met voorsprong de meest gebruikte instructieset.
De x86-instructieset was oorspronkelijk een 16 bits-instructieset. In de loop der jaren is de x86-instructieset steeds uitgebreid om aan de wensen van de tijd te blijven voldoen. Belangrijke wijzigingen waren een 32 bits-modus, toevoeging van vectorregisters (MMX en SSE) en rond de eeuwwisseling de toevoeging van een 64 bits-modus: x86-64 (AMD64, EM64T).

## Gegevens van de instructieset

Er zijn drie hoofdvarianten van de x86-instructieset, de 16 bits-variant, de 32 bits-variant en de 64 bits-variant. Afhankelijk van de modus waarin een x86-processor gezet wordt, gebruikt de processor een van de varianten.

### 16 bits

| Type van architectuur: | Meerdere registers. Uitzondering is de FPU-stack, dit is een stackarchitectuur |
| Aantal registers: | Acht 16 bits-integerregisters (waarvan één gereserveerd is als stackpointer), vier segmentregisters (waarvan één gereserveerd voor de stack). De 8087-FPU heeft een stack waarin acht 80 bits-zwevendekommagetallen gezet kunnen worden. |
| Adresruimte: | 2$^{20}$ bytes (1 MiB) |
| Geheugenbeheer: | Segmentregisters |
| Vlaggen | Nul, overdracht, negatief, overflow, pariteit |
| Adresseermodi | Onmiddellijk, geheugen. De geheugenadresmodus kan een combinatie zijn van een absoluut adres, een basisregister en een indexregister |

### 32 bits

| Type van architectuur: | Meerdere registers. Uitzondering is de FPU-stack, dit is een stackarchitectuur |
| Aantal registers: | Acht 32 bits-integerregisters (waarvan één gereserveerd is als stackpointer), zes segmentregisters (waarvan één gereserveerd voor de stack). De 80387-FPU heeft een stack waarin acht 80 bits-zwevendekommagetallen gezet kunnen worden. Deze kunnen ook werken als acht vectorregisters (MMX). Processoren met SSE hebben bovendien acht extra vectorregisters |
| Adresruimte: | 2$^{32}$ bytes (4 GiB) |
| Geheugenbeheer: | Segmentregisters, geheugenpaginering |
| Vlaggen | Nul, overdracht, negatief, overflow, pariteit |
| Adresseermodi | Onmiddellijk, geheugen. De geheugenadresmodus kan een combinatie zijn van een absoluut adres, een basisregister en een indexregister met schaling |

### 64 bits

| Type van architectuur: | Meerdere registers. Uitzondering is de FPU-stack, dit is een stackarchitectuur |
| Aantal registers: | Zestien 64 bits-integerregisters (waarvan één gereserveerd is als stackpointer), zes segmentregisters (waarvan één gereserveerd voor de stack). De FPU heeft een stack waarin acht 80 bits-zwevendekommagetallen gezet kunnen worden. Deze kunnen ook werken als acht vectorregisters (MMX). Processoren met SSE hebben bovendien 16 extra vectorregisters |
| Adresruimte: | 2$^{48}$ bytes (256 TiB) |
| Geheugenbeheer: | Segmentregisters, geheugenpaginering |
| Vlaggen | Nul, overdracht, negatief, overflow, pariteit |
| Adresseermodi | Onmiddellijk, geheugen. De geheugenadresmodus kan een combinatie zijn van een absoluut adres, een basisregister en een indexregister met schaling |

## Fabrikanten

Aanvankelijk werden x86-processoren alleen door Intel gefabriceerd, hoewel NEC wel de V20- en V30-processoren met 8088-compatibele instructieset leverde. In de tijd van de 80386-processor besloot Intel zijn ontwerp aan andere fabrikanten in licentie te geven. Deze fabrikanten, AMD en Cyrix, konden vervolgens zelfstandig hun eigen x86-processoren op de markt brengen.
Toen de 80486 enige tijd op de markt was, leek het er op dat Intel spijt kreeg van zijn besluit zijn processoren in licentie te geven. Nieuwe licenties werden stopgezet en er ontbrandde een jarenlange rechtsstrijd tegen AMD over de auteursrechten op delen van de processor. Deze rechtszaak werd uiteindelijk geschikt, waarbij AMD het recht kreeg x86-processoren te maken, maar zij deze vanaf dan zelf diende te ontwerpen. Sindsdien ontwerpen zowel Cyrix als AMD hun eigen processoren.

## Last uit het verleden

De x86-architectuur gaat al lang mee. Sinds eind jaren 70 is er veel aan inzicht veranderd in hoe processoren het best gebouwd kunnen worden, en er zijn steeds meer instructies bij gekomen waarvan sommige oude overbodig maken, en andere omslachtig geïmplementeerd zijn omdat het anders onmogelijk was ze in de bestaande instructieset in te passen. Velen vinden de x86-instructieset daarom onelegant.
De reden dat men deze instructieset vandaag de dag nog steeds gebruikt, is dat er heel veel software voor de x86-instructieset geschreven is, zodat het ondoenlijk is geworden de hele wereld op een andere instructieset over te laten gaan.
Zoiets is in het verleden een aantal keren geprobeerd. De bekendste voorbeelden hiervan zijn de instructiesets van ARM, de PowerPC (RISC-architectuur) en de Itanium (VLIW-architectuur). De ontwikkeling had maar één enkel doel: een door moderne technieken ontwikkelde processor zou dusdanig veel krachtiger worden dan een willekeurige x86-processor dat deze het op den duur zou verliezen.
Dit is echter niet gebeurd. De achterliggende reden is dat ook de ideeën achter de PowerPC ietwat achterhaald raakten, en alhoewel de processor als minder "lelijk" beschouwd wordt dan de x86-processoren, dragen beide inmiddels een last uit het verleden mee. Een ietwat praktischere reden was dat de PowerPC nooit veel voordeel gaf om de x86-processoren te kunnen verdringen, en op bepaalde momenten zelfs iets achterliep.

## Tabel van de instructieset

De instructieset is verre van eenvoudig. De operand van veel instructies wordt beschreven in een zogenoemde mod/rm-byte. De operand kan een register zijn maar ook een adres in het geheugen. De mod/rm-byte bevat:
* bits 7 6: mod
* bits 5 4 3: reg
* bits 2 1 0: r/m
In veel instructies wordt het deel reg, bits 5 4 3, gebruikt om de opcode uit te breiden.
In onderstaande tabellen leest u in de linkerkolom de bits 7-3 van de opcode, de eerste byte van de eerste instructie. Bovenaan staan de bits 2-0. Voor de instructies waarbij het deel reg van de mod/rm-byte wordt gebruikt om de opcode uit te breiden, vindt u deze waarde in de kolom reg.
Een speciaal geval is de instructie POP CS, met de opcode 0F. Deze instructie wordt als volkomen nutteloos beschouwd. In de latere versies van de processor werd deze instructie dan ook verwijderd en ging 0F dienen om een opcode van twee bytes aan te kondigen. De instructies die met 0F beginnen vindt u in de tweede tabel.
Legenda :
| ac | accumulator, AL, AX of EAX |
| r | register, zie volgende tabel |
| rm | register of adres in het geheugen, afhankelijk van de mod/rm-byte |
| seg | segmentregister: 00=ES, 01=CS, 10=SS, 11=DS, of 0=FS, 1=GS |
| im | immediate waarde |
De operanden kunnen een lengte hebben van 8 of 16 bits, met ingang van de 80386 ook 32 bits. Bij veel instructies wordt de lengte van de operand bepaald door bit 0 van de opcode: is deze nul, dan heeft de operand 8 bits. Is deze niet nul, dan bepaalt de instelling van de processor wat de operandlengte is (16 of 32). Deze kan worden veranderd met het prefix 66.
| Codering van registers | Codering van registers | Codering van registers | Codering van registers | Codering van segmentregisters | Codering van segmentregisters | Codering van segmentregisters |
| code | 8 bits | 16 bits | 32 bits | code | in 06-3F | in 65, 66, 0FA |
| 000 | AL | AX | EAX | 00 | ES |
| 001 | CL | CX | ECX | 01 | CS |
| 010 | DL | DX | EDX | 10 | SS |
| 011 | BL | BX | EBX | 11 | DS |
| 100 | AH | SP | ESP | 0 | | FS |
| 101 | CH | BP | EBP | 1 | | GS |
| 110 | DH | SI | ESI | | | |
| 111 | BH | DI | EDI | | | |
De volledige instructieset staat in de tabellen hieronder
| bits 7-3 | reg | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 00 | | ADD rm,rm | ADD rm,rm | ADD rm,rm | ADD rm,rm | ADD ac,im | ADD ac,im | PUSH seg | POP seg (0F is POP CS in 8086, daarna prefix, zie volgende tabel) |
| 08 | | OR rm,rm | OR rm,rm | OR rm,rm | OR rm,rm | OR ac,im | OR ac,im | | PUSH seg | POP seg (0F is POP CS in 8086, daarna prefix, zie volgende tabel) |
| 10 | | ADC rm,rm | ADC rm,rm | ADC rm,rm | ADC rm,rm | ADC ac,im | ADC ac,im | | PUSH seg | POP seg (0F is POP CS in 8086, daarna prefix, zie volgende tabel) |
| 18 | | SBB rm,rm | SBB rm,rm | SBB rm,rm | SBB rm,rm | SBB ac,im | SBB ac,im | | PUSH seg | POP seg (0F is POP CS in 8086, daarna prefix, zie volgende tabel) |
| 20 | | AND rm,rm | AND rm,rm | AND rm,rm | AND rm,rm | AND ac,im | AND ac,im | (segment override prefix) | DAA |
| 28 | | SUB rm,rm | SUB rm,rm | SUB rm,rm | SUB rm,rm | SUB ac,im | SUB ac,im | (segment override prefix) | DAS |
| 30 | | XOR rm,rm | XOR rm,rm | XOR rm,rm | XOR rm,rm | XOR ac,im | XOR ac,im | (segment override prefix) | AAA |
| 38 | | CMP rm,rm | CMP rm,rm | CMP rm,rm | CMP rm,rm | CMP ac,im | CMP ac,im | (segment override prefix) | AAS |
| 40 | | INC r | INC r | INC r | INC r | INC r | INC r | INC r | INC r |
| 48 | | DEC r | DEC r | DEC r | DEC r | DEC r | DEC r | DEC r | DEC r |
| 50 | | PUSH r | PUSH r | PUSH r | PUSH r | PUSH r | PUSH r | PUSH r | PUSH r |
| 58 | | POP r | POP r | POP r | POP r | POP r | POP r | POP r | POP r |
| 60 | | PUSHA | POPA | BOUND (vanaf 80186) | ARPL | (segment override prefix) | (segment override prefix) | Operand size (prefix) | Address size (prefix) |
| 68 | | PUSH im | IMUL rm,r | PUSH im | IMUL rm,r | INS | INS | OUTS | OUTS |
| 70 | | JO near | JNO near | JB near | JNB near | JE near | JNE near | JBE near | JNBE near |
| 78 | | JS near | JNS near | JP near | JP near | JL near | JNL near | JLE near | JNLE near |
| 80 | 0 | ADD rm,im | ADD rm,im | ADD rm,im | ADD rm,im | TEST rm,r | TEST rm,r | XCHG rm,r | XCHG rm,r |
| 80 | 1 | OR rm,rm | OR rm,rm | OR rm,rm | OR rm,rm | | | | TEST rm,r | TEST rm,r | XCHG rm,r | XCHG rm,r |
| 80 | 2 | ADC rm,im | ADC rm,im | ADC rm,im | ADC rm,im | | | | TEST rm,r | TEST rm,r | XCHG rm,r | XCHG rm,r |
| 80 | 3 | SBB rm,im | SBB rm,im | SBB rm,im | SBB rm,im | | | | TEST rm,r | TEST rm,r | XCHG rm,r | XCHG rm,r |
| 80 | 4 | AND rm,im | AND rm,im | AND rm,im | AND rm,im | | | | TEST rm,r | TEST rm,r | XCHG rm,r | XCHG rm,r |
| 80 | 5 | SUB rm,im | SUB rm,im | SUB rm,im | SUB rm,im | | | | TEST rm,r | TEST rm,r | XCHG rm,r | XCHG rm,r |
| 80 | 6 | XOR rm,im | XOR rm,im | XOR rm,im | XOR rm,im | | | | TEST rm,r | TEST rm,r | XCHG rm,r | XCHG rm,r |
| 80 | 7 | CMP rm,im | CMP rm,im | CMP rm,im | CMP rm,im | | | | TEST rm,r | TEST rm,r | XCHG rm,r | XCHG rm,r |
| 88 | 0 | MOV rm,r | MOV rm,r | MOV r,rm | MOV r,rm | MOV rm,seg | LEA | MOV seg,rm | POP rm |
| 88 | 1 | MOV rm,r | MOV rm,r | MOV r,rm | MOV r,rm | MOV rm,seg | LEA | MOV seg,rm | |
| 88 | 2 | MOV rm,r | MOV rm,r | MOV r,rm | MOV r,rm | MOV rm,seg | LEA | MOV seg,rm | |
| 88 | 3 | MOV rm,r | MOV rm,r | MOV r,rm | MOV r,rm | MOV rm,seg | LEA | MOV seg,rm | |
| 88 | 4 | MOV rm,r | MOV rm,r | MOV r,rm | MOV r,rm | MOV rm,seg | LEA | MOV seg,rm | |
| 88 | 5 | MOV rm,r | MOV rm,r | MOV r,rm | MOV r,rm | MOV rm,seg | LEA | MOV seg,rm | |
| 88 | 6 | MOV rm,r | MOV rm,r | MOV r,rm | MOV r,rm | | LEA | |
| 88 | 7 | MOV rm,r | MOV rm,r | MOV r,rm | MOV r,rm | | LEA | | |
| 90 | | NOP | XCHG ac,r | XCHG ac,r | XCHG ac,r | XCHG ac,r | XCHG ac,r | XCHG ac,r | XCHG ac,r |
| 98 | | CBW | CWD | CALL far | WAIT | PUSHF | POPF | SAHF | LAHF |
| A0 | | MOV ac,m | MOV ac,m | MOV m,ac | MOV m,ac | MOVS | MOVS | CMPS | CMPS |
| A8 | | TEST ac,im | TEST ac,im | STOS | STOS | LODS | LODS | SCAS | SCAS |
| B0 | | MOV r,im | MOV r,im | MOV r,im | MOV r,im | MOV r,im | MOV r,im | MOV r,im | MOV r,im |
| B8 | | MOV r,im | MOV r,im | MOV r,im | MOV r,im | MOV r,im | MOV r,im | MOV r,im | MOV r,im |
| C0 | 0 | ROL rm,im | ROL rm,im | RET near | RET near | LES | LDS | MOV rm,im | MOV rm,im |
| C0 | 1 | ROR rm,im | ROR rm,im | RET near | RET near | LES | LDS | | |
| C0 | 2 | RCL rm,im | RCL rm,im | RET near | RET near | LES | LDS | | |
| C0 | 3 | RCR rm,im | RCR rm,im | RET near | RET near | LES | LDS | | |
| C0 | 4 | SHL / SAL rm,im | SHL / SAL rm,im | RET near | RET near | LES | LDS | | |
| C0 | 5 | SHR rm,im | SHR rm,im | RET near | RET near | LES | LDS | | |
| C0 | 6 | gelijk aan SHL / SAL | gelijk aan SHL / SAL | RET near | RET near | LES | LDS | | |
| C0 | 7 | SAR rm,im | SAR rm,im | RET near | RET near | LES | LDS | | |
| C8 | | ENTER | LEAVE | RET far | RET far | INT 3 | INT type | INTO | IRET |
| D0 | 0 | ROL rm,1 | ROL rm,1 | ROL rm,CL | ROL rm,CL | AAM | AAD | SETALC | XLAT |
| D0 | 1 | ROR rm,1 | ROR rm,1 | ROR rm,CL | ROR rm,CL | | AAM | AAD | SETALC | XLAT |
| D0 | 2 | RCL rm,1 | RCL rm,1 | RCL rm,CL | RCL rm,CL | | AAM | AAD | SETALC | XLAT |
| D0 | 3 | RCR rm,1 | RCR rm,1 | RCR rm,CL | RCR rm,CL | | AAM | AAD | SETALC | XLAT |
| D0 | 4 | SHL/SAL rm,1 | SHL/SAL rm,1 | SHL/SAL rm,CL | SHL/SAL rm,CL | | AAM | AAD | SETALC | XLAT |
| D0 | 5 | SHR rm,1 | SHR rm,1 | SHR rm,CL | SHR rm,CL | | AAM | AAD | SETALC | XLAT |
| D0 | 6 | gelijk aan SHL / SAL | gelijk aan SHL / SAL | gelijk aan SHL / SAL | gelijk aan SHL / SAL | | AAM | AAD | SETALC | XLAT |
| D0 | 7 | SAR rm,1 | SAR rm,1 | SAR rm,CL | SAR rm,CL | | AAM | AAD | SETALC | XLAT |
| D8 | | Processor extension | Processor extension | Processor extension | Processor extension | Processor extension | Processor extension | Processor extension | Processor extension |
| E0 | | LOOPNZ short | LOOPZ short | LOOP short | JCXZ short | IN port | IN port | OUT port | OUT port |
| E8 | | CALL near | JMP near | JMP far | JMP short | IN | IN | OUT | OUT |
| F0 | 0 | LOCK (prefix) | ICEBP (vanaf 80386) SMI (sommige chips van AMD) | REPNE (prefix) | REPE (prefix) | HLT | CMC | TEST rm,im | TEST rm,im |
| F0 | 1 | LOCK (prefix) | ICEBP (vanaf 80386) SMI (sommige chips van AMD) | REPNE (prefix) | REPE (prefix) | HLT | CMC | TEST rm,im | TEST rm,im |
| F0 | 2 | LOCK (prefix) | ICEBP (vanaf 80386) SMI (sommige chips van AMD) | REPNE (prefix) | REPE (prefix) | HLT | CMC | NOT rm | NOT rm |
| F0 | 3 | LOCK (prefix) | ICEBP (vanaf 80386) SMI (sommige chips van AMD) | REPNE (prefix) | REPE (prefix) | HLT | CMC | NEG | NEG |
| F0 | 4 | LOCK (prefix) | ICEBP (vanaf 80386) SMI (sommige chips van AMD) | REPNE (prefix) | REPE (prefix) | HLT | CMC | MUL ac,rm | MUL ac,rm |
| F0 | 5 | LOCK (prefix) | ICEBP (vanaf 80386) SMI (sommige chips van AMD) | REPNE (prefix) | REPE (prefix) | HLT | CMC | IMUL ac,rm | IMUL ac,rm |
| F0 | 6 | LOCK (prefix) | ICEBP (vanaf 80386) SMI (sommige chips van AMD) | REPNE (prefix) | REPE (prefix) | HLT | CMC | DIV ac,rm | DIV ac,rm |
| F0 | 7 | LOCK (prefix) | ICEBP (vanaf 80386) SMI (sommige chips van AMD) | REPNE (prefix) | REPE (prefix) | HLT | CMC | IDIV ac,rm | IDIV ac,rm |
| F8 | 0 | CLC | STC | CLI | STI | CLD | STD | INC rm | INC rm |
| F8 | 1 | CLC | STC | CLI | STI | CLD | STD | DEC rm | DEC rm |
| F8 | 2 | CLC | STC | CLI | STI | CLD | STD | CALL near ind | CALL near ind |
| F8 | 3 | CLC | STC | CLI | STI | CLD | STD | CALL far ind | CALL far ind |
| F8 | 4 | CLC | STC | CLI | STI | CLD | STD | JMP near ind | JMP near ind |
| F8 | 5 | CLC | STC | CLI | STI | CLD | STD | JMP far ind | JMP far ind |
| F8 | 6 | CLC | STC | CLI | STI | CLD | STD | PUSH rm | PUSH rm |
| F8 | 7 | CLC | STC | CLI | STI | CLD | STD | | |
| Instructies met voorvoegsel 0F ||||||||||
| bits 15-3 | reg | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 0F00 | 0 | SLDT | SGDT | LAR | LSL | | LOADALL (alleen 80286) | CLTS | LOADALL (alleen 80386) RES3 (AMD 386) RES4 (AMD 486) ICERET (vanaf 486) |
| 0F00 | 1 | STR | SIDT | LAR | LSL | | LOADALL (alleen 80286) | CLTS | LOADALL (alleen 80386) RES3 (AMD 386) RES4 (AMD 486) ICERET (vanaf 486) |
| 0F00 | 2 | LLDT | LGDT | LAR | LSL | | LOADALL (alleen 80286) | CLTS | LOADALL (alleen 80386) RES3 (AMD 386) RES4 (AMD 486) ICERET (vanaf 486) |
| 0F00 | 3 | LTR | LIDT | LAR | LSL | | LOADALL (alleen 80286) | CLTS | LOADALL (alleen 80386) RES3 (AMD 386) RES4 (AMD 486) ICERET (vanaf 486) |
| 0F00 | 4 | VERR | SMSW | LAR | LSL | | LOADALL (alleen 80286) | CLTS | LOADALL (alleen 80386) RES3 (AMD 386) RES4 (AMD 486) ICERET (vanaf 486) |
| 0F00 | 5 | VERW | | LAR | LSL | | LOADALL (alleen 80286) | CLTS | LOADALL (alleen 80386) RES3 (AMD 386) RES4 (AMD 486) ICERET (vanaf 486) |
| 0F00 | 6 | | LMSW | LAR | LSL | | LOADALL (alleen 80286) | CLTS | LOADALL (alleen 80386) RES3 (AMD 386) RES4 (AMD 486) ICERET (vanaf 486) |
| 0F00 | 7 | | INVLPG (vanaf 486) | LAR | LSL | | LOADALL (alleen 80286) | CLTS | LOADALL (alleen 80386) RES3 (AMD 386) RES4 (AMD 486) ICERET (vanaf 486) |
| 0F08 | | INVD (vanaf 486) | WBINVD (vanaf 486) |
| 0F10 | | UMOV (386, 486) | UMOV (386, 486) | UMOV (386, 486) | UMOV (386, 486) |
| 0F18 | | | | | | | | | |
| 0F20 | | MOV van of naar control- of testregister | MOV van of naar control- of testregister | MOV van of naar control- of testregister | MOV van of naar control- of testregister | MOV van of naar control- of testregister | MOV van of naar control- of testregister | MOV van of naar control- of testregister | |
| 0F28 | | | | | | | | | |
| 0F30 | | WRMSR (vanaf 80386) | RDTSC (vanaf Pentium) | RDMSR (vanaf 80386) | | | | | |
| 0F38 | | | | | | | | | |
| 0F40 | | | | | | | | | |
| 0F48 | | | | | | | | | |
| 0F50 | | | | | | | | | |
| 0F58 | | | | | | | | | |
| 0F60 | | | | | | | | | |
| 0F68 | | | | | | | | | |
| 0F70 | | | | | | | | | |
| 0F78 | | SVDC (Cyrix 486) | RSDC (Cyrix 486) | SVLDT (Cyrix 486) | RSLDT (Cyrix 486) | SVTS (Cyrix 486) | RSTS (Cyrix 486) | SMINT (Cyrix 486) | |
| 0F80 | | JO far | JNO far | JB far | JNB far | JE far | JNE far | JBE far | JNBE far |
| 0F88 | | JS far | JNS far | JP far | JP far | JL far | JNL far | JLE far | JNLE far |
| 0F90 | | SETO rm | SETNO rm | SETB rm | SETNB rm | SETE rm | SETNE rm | SETBE rm | SETNBE rm |
| 0F98 | | SETS rm | SETNS rm | SETP rm | SETP rm | SETL rm | SETNL rm | SETLE rm | SETNLE rm |
| 0FA0 | | PUSH seg | POP seg | CPUID (vanaf 486) | BT rm,r | SHLD, rm,im | SHLD rm,CL | XBTS (80386) CMPXCHG (vanaf Pentium) | IBTS (oorspr. 80386) CMPXCHG (vanaf Pentium) |
| 0FA8 | | PUSH seg | POP seg | RSM (vanaf 80386) | BTS rm,r | SHRD, rm,im | SHRD rm,CL | | IMUL r,rm |
| 0FB0 | | CMPXCHG (vanaf Pentium) | | LSS | BTR rm,r | LFS | LGS | MOVZX rm,r | MOVZX rm,r |
| 0FB8 | 4 | | | BT rm,im | BTC rm,r | BSF | BSF | MOVSX rm,r | MOVSX rm,r |
| 0FB8 | 5 | | | BTS rm,im | BTC rm,r | BSF | BSF | MOVSX rm,r | MOVSX rm,r |
| 0FB8 | 6 | | | BTR rm,im | BTC rm,r | BSF | BSF | MOVSX rm,r | MOVSX rm,r |
| 0FB8 | 7 | | | BTC rm,im | BTC rm,r | BSF | BSF | MOVSX rm,r | MOVSX rm,r |
| 0FC0 | 0 | XADD | XADD | | | | | |
| 0FC0 | 1 | XADD | XADD | | | | | | CMPXCHG8B (vanaf Pentium) |
| 0FC0 | 2 | XADD | XADD | | | | | | |
| 0FC0 | 3 | XADD | XADD | | | | | | |
| 0FC0 | 4 | XADD | XADD | | | | | | |
| 0FC0 | 5 | XADD | XADD | | | | | | |
| 0FC0 | 6 | XADD | XADD | | | | | | |
| 0FC0 | 7 | XADD | XADD | | | | | | |
| 0FC8 | | BSWAP (vanaf 486) | BSWAP (vanaf 486) | BSWAP (vanaf 486) | BSWAP (vanaf 486) | BSWAP (vanaf 486) | BSWAP (vanaf 486) | BSWAP (vanaf 486) | BSWAP (vanaf 486) |
| 0FD0 | | | | | | | | | |
| 0FD8 | | | | | | | | | |
| 0FE0 | | | | | | | | | |
| 0FE8 | | | | | | | | | |
| 0FF0 | | | | | | | | | |
| 0FF8 | | | | | | | | | |