Les Secrets du Microprocesseur 802861. Caracteristiques principalesCe chapitre donne une description succincte de ce microprocesseur. Son but n'est pas d'etudier tous les aspects de la structure et de l'utilisation du 80286. On se reportera a des ouvrages plus specialises pour des informations complementaires. La description concerne principalement le mode reel, compatible entre tous les 80x86 (86, 88, 286, 386, 486). C'est le mode utilise par tous les OM en principe, avec des executables sous MS-DOS (yapp, PCPAKRAT, ...). En mode Windows ou OS2, le mode est different (mode protege ou pagine). Le microprocesseur 80286 fait partie de la famille des microprocesseurs 16 bits iAPX286 (INTEL).
2. Organisation interneLe microprocesseur se compose de quatre zones qui travaillent en partie independamment : 3. Registres internesSelecteur Acces Base Limite |------|------||--|--||-------|--------||----|-----| |------|------| |-------------|------|-----|-----|-----|-----|-----| AX| AH | AL |CS| Code Segment| | | | --------------- ---------------------------------------------------- BX| BH | BL |DS| Data Segment| | | | --------------- ---------------------------------------------------- CX| CH | CL |SS|Stack Segment| | | | --------------- ---------------------------------------------------- DX| DH | DL |ES|Extra Segment| | | | |------|------| |-------------|------|-----|-----|-----|-----|-----| |-------------| |-------------|-----|-----|-----|-----|-----| SI|Source Index | LDTR| Selecteur | | | --------------- --------------------------------------------- DI| Dest. Index | TR| Selecteur | | | |-------------| |-------------------------------------------- |-------------| GDTR| | | BP|Base Pointeur| ------------------------------- --------------- IDTR| | | SP|Stack Point. | |-----|-----|-----|-----|-----| --------------- |--------|--------||----|-----| IP|Inst. Point. | Base Limite |-------------| |-------------| | Indicateurs |FLAGS --------------- | Mach. Status|MSW |-------------| - Registres internes du 80286 4 registres generaux 16 bits : AX, BX, CX, DX.15 0 |--------------|--------------| AX | AH | AL |Accumulateur ------------------------------- BX | BH | BL |Base ------------------------------- CX | CH | CL |Compteur ------------------------------- DX | DH | DL |Donnee |--------------|--------------| Chaque registre se compose de 2 registres de 8 bits : Chaque registre beneficie de fonctions particulieres :
2 registres d'index pour l'adressage indexe :Ils servent en general a reperer un element dans un tableau dont la base est pointee soit par BX dans DS, soit par BP dans SS. En particulier ils permettent des transferts de tableau avec SI associe a DS et DI a ES. 15 0 |-----------------------------| | SI (Source Index) |Index source ------------------------------- | DI (Destination Index) |Index destination |-----------------------------| 3 registres pointeur :15 0 |-----------------------------| | BP (Base Pointer) |Pointeur de base ------------------------------- | SP (Stack Pointer) |Pointeur de pile ------------------------------- | IP (Instruction Pointer) |Pointeur d'instruction |-----------------------------|.SP (pointeur de pile) : generation des adresses de la pile. .BP (pointeur de base) : genere l'adresse de base (segment) des donnees. .IP (pointeur d'instruction) : genere l'adresse de l'instruction suivante (deplacement dans le segment). 4 registres segments (mode reel) :15 0 |-----------------------------| | CS (Code Segment) |Segment programme ------------------------------- | DS (Data Segment) |Segment de donnees ------------------------------- | SS (Stack Segment) |Segment de pile ------------------------------- | ES (Extra Segment) |Segment de donnees supplem. |-----------------------------| En mode reel, ces registres determinent la segmentation de la memoire en zones de 64 ko ; ils permettent au microprocesseur de calculer l'adresse physique sur 20 bits pour les acces a la memoire centrale. En mode protege, ces registres deviennent des registres de selection du descripteur segment, ils pointent le descripteur du segment dans la table des descripteurs segment ; cette table est soit globale (GDT) soit locale (LDT). Chaque registre CS, DS, SS, ES, se compose alors de la maniere suivante : 15 2 1 0 |----------------------|--|--|--| | INDEX |TI| RPL | |----------------------|--|--|--|
Memorise l'adresse de base (trois octets) et la limite (deux octets) du segment GDT, c'est-a-dire de la table des descripteurs globaux. Ce registre n'est accessible que par les instructions LGDT (Load GDT) et SGDT (Store GDT). Memorise l'adresse selecteur (deux octets), la base (trois octets) et la limite (deux octets) du segment LDT, c'est-a-dire de la table des descripteurs locaux. Seul le selecteur est visible. La partie cachee n'est accessible que par les instructions LLDT (Load LDT) et SLDT (Store LDT). Il est charge a l'initialisation et a chaque commutation de tache. Memorise l'adresse selecteur (deux octets), la base (trois octets) et la limite (deux octets) du segment TSS, c'est-a-dire de la table de commutation de tache. Seul le selecteur est visible. La partie cachee n'est accessible que par les instructions LTR (Load TR) et STR (Store TR). 4 registres caches (48 bits) associes respectivement aux registres segment CS, DS, SS, ES :DROITS 24BITS BASE 16BITS DIMENSION D'ACCES ADRESSE SEGMENT DU SEGMENT 47 40 39 16 15 0 |------|------|------|------|------|------| | | | |CS ------------------------------------------- | | | |DS ------------------------------------------- | | | |SS ------------------------------------------- | | | |ES |------|------|------|------|------|------| Ces registres ne sont pas accessibles directement par le programmeur ; ils contiennent les descripteurs du segment. Le descripteur est charge dans un de ces registres par des instructions de type LDS, LES, MOV, qui modifient SS, DS, ES, ou par des instructions telles que CALL ou JMP, qui modifient CS. 2 registres d'etat :15 0 |---------------|---------------| | FLAGSH | FLAGSL |Registre d'etat ----------------|---------------- | MSW (Machine Status Word) |Mot d'etat machine |-------------------------------|FLAGS (registre d'etat indicateurs). 15 0 |-------------------------------| | FLAGSH | ----|---|---|---|---|---|---|---- |b15|b14|b13|b12|B11|b10|b9 |b8 | --------------------------------- | . |NT | IOPL |OF |DF |IF |TF | |---|---|---|---|---|---|---|---| |-------------------------------| | FLAGSL | ----|---|---|---|---|---|---|---- |b7 |b6 |b5 |b4 |B3 |b2 |b1 |b0 | --------------------------------- |SF |ZF | . |AF | . |PF | . |CF | |---|---|---|---|---|---|---|---| MSW (registre d'etat machine)|-------------------------------| | REGISTRE D'ETAT MACHINE | ---- - - - - ---|---|---|---|---- |b15.........b4 |b3 |b2 |b1 |b0 | ---- - - - - -------------------- |...Reserve.....|TS |EM |MP |PE | |--- - - - - ---|---|---|---|---| 4. Adressage de la memoireEn mode reel (compatible), l'acces a la memoire est realise comme pour la famille iAPX86. L'espace adressable est de 1 Mo. Ce champ d'adresse est decoupe en segments de 64 ko. L'adresse de debut du segment est donnee par le registre segment. Le deplacement dans le segment est donne par une adresse effective AE, calculee suivant le mode d'adressage. 15 0 15 0 ------------------------ ------------------- | SEGMENT |0000| | AE | ------------------------ ------------------- 19 DS | | 0 | | BP DI SS | | | | IP CS | | | | BX ES \ / \ / SI ---------------------------------- | + | ---------------------------------- 19 | | 0 | | | | \ / 23 20 19 0 --------- ------------------------------ |0 0 0 0| |Adresse physique sur 20 bits| --------- ------------------------------ Ainsi, l'adresse physique sur 24 bits d'une donnee est calculee a partir de la somme d'un deplacement AE a l'interieur du segment de 64 ko et de l'adresse de debut du segment (donnee par un registre segment : DS, CS, ES, SS). En mode protege, les adresses physiques sont attribuees par des adresses logiques (virtuelles). Ce principe repose sur la segmentation ; un segment est une zone entiere de memoire n'excedant pas 64 ko. Chaque segment est defini par : Il est decrit par un descripteur de segment, situe en memoire.
Une adresse (donnee ou code) comprend : Le selecteur pointe la table des descripteurs, situee en memoire ; cette
table est soit globale (GDT), soit local (LDT), suivant le bit TI du
selecteur.
DESCRIPTEUR DE SEGMENT DE CODE 7 0 7 0 |-----------------------|-------------------------| | Reserve pour 80386 (tout doit etre a zero) | +6 ---|--|--|--|--|--|--|--|-------------------------- | P| DPL | 1| 1| C| R| A| Base (23-16) | +4 ---|--|--|--|--|--|--|--|-------------------------- | Base (15-0) | +2 --------------------------------------------------- | Limite (15-0) | 0 |-----------------------|-------------------------| DESCRIPTEUR DE SEGMENT DE DONNEES 7 0 7 0 |-----------------------|-------------------------| | Reserve pour 80386 (tout doit etre a zero) | +6 ---|--|--|--|--|--|--|--|-------------------------- | P| DPL | 1| 0|ED| W| A| Base (23-16) | +4 ---|--|--|--|--|--|--|--|-------------------------- | Base (15-0) | +2 --------------------------------------------------- | Limite (15-0) | 0 |-----------------------|-------------------------| DESCRIPTEUR DE SEGMENT SYSTEME (decrit un segment d'etat de tache TSS) 7 0 7 0 |-----------------------|-------------------------| | Reserve pour 80386 (tout doit etre a zero) | +6 ---|--|--|--|--|--|--|--|-------------------------- | P| DPL | 0| 0| 0| Type| Base (23-16) | +4 ---|--|--|--|--|--|--|--|-------------------------- | Base (15-0) | +2 --------------------------------------------------- | Limite (15-0) | 0 |-----------------------|-------------------------| DESCRIPTEUR DE GUICHET 7 0 7 0 |-----------------------|-------------------------| | Reserve pour 80386 (tout doit etre a zero) | +6 ---|--|--|--|--|--|--|--|--|--|--|----------------- | P| DPL | 0| 0| 1| Type| x x x|Nb de mots/typ00| +4 ---|--|--|--|--|--|--|-----|--|--|----------|--|--- | Selecteur destination | x x| +2 --------------------------------------------|--|--- | Deplacement destination (sauf pour typ01,11 | 0 |-----------------------|-------------------------|
Memoire RAM Memoire RAM | | |----------------- | | | | | --------------- | | | Descripteur|Reserve | | | | --------|------ | | | de |Droit |Base | | | | Registre LDTR |d'acces|23-16|--| | | | + segment--------|------ | | --------------- |-----------|---------| |Base 15-0 |--| | | Donnee |-| |Deplacement|Selecteur| --------------- | | --------------- | |-----|-----|----|----| |Limite 15-0 |-----| | | | | |------------------------ | | | | | | | | | | | | | | | | | | | | LDT | | | | | | |Table des | |-------------------- | | |descripteurs | | | | | locaux | |-----------------------------------------------------------| 15 2 1 0 |----------------------|--|--|--| | INDEX |TI| RPL | SELECTEUR |----------------------|--|--|--| - Mecanisme d'acces a un segment avec LDTR 5. Jeu d'instruction7 categories d'instructions : transfert de donnees, operations arithmetiques, operations logiques, operations sur des chaines de caracteres, instructions de branchement, controle du processeur, macro instructions. |-|--------------------------------------------------| |1|INSTRUCTIONS DE TRANSFERT | | -------------------|-------------------------------- | |MOV,XCHG |Deplace, echange | | |PUSH,POP |Operations sur les piles | | |IN,OUT |Transfert avec les ports d'E/S | | |XLAT |Traduction | | |LEA,LDS,LES |Chargement registre ou pointeur| | |LAHF,SAHF,PUSHF,..|Transfert du registre FLAGS | ---------------------|-------------------------------- |2|INSTRUCTIONS ARITHMETIQUES | | -------------------|-------------------------------- | |ADC,ADD,SBB,SUB,..|Addition, soustraction | | |AAA,DAA,AAS,CBW,..|Ajustement et conversion | | |INC,DEC |Incremente, decremente | | |MUL,DIV,NEG |Multiplication, division | | |CMP |Comparaison | ---------------------|-------------------------------- |3|INSTRUCTIONS LOGIQUES | | -------------------|-------------------------------- | |NOT,AND |Complement, Et | | |OR,XOR |Ou inclusif, exclusif | | |TEST |Comparaison logique | | |SHL,SHR,ROL,ROR,..|Rotation et decalages | ---------------------|-------------------------------- |4|INSTRUCTIONS DE MANIPULATION DE CHAINES | | -------------------|-------------------------------- | |MOVS,INS, |Deplacement, transferts | | |CMPS,SCAS |Comparaison, recherche | | |LODS,STOS |Chargement, rangement | | |REP,REPE,REPZ,....|Prefixe de repetition | ---------------------|-------------------------------- |5|INSTRUCTIONS DE BRANCHEMENT | | -------------------|-------------------------------- | |CALL |Appel d'un sous-programme | | |RET,IRET |Retour d'un sous-programme | | |JMP,JZ,JNZ,... |Saut | | |LOOP,LOOPNE |Boucle | | |INT,INTO, |Interruption | ---------------------|-------------------------------- |6|INSTRUCTIONS DE CONTROLE DU MICROPROCESSEUR | | -------------------|-------------------------------- | |CLC,STC,.. |Positionnement indicateur | | |LGDT,SGDT LIDT,.. |Operations sur les descripteurs| | |ARPL,.. |Ajustement de privilege | | |HLT,LOCK,ESC,.. |Arret,ver. bus,extensions | ---------------------|-------------------------------- |7|MACRO-INSTRUCTIONS | | -------------------|-------------------------------- | |ENTER,LEAVE,BOUND |Procedures | |-|------------------|-------------------------------| 6. Signaux d'entrees-sorties|-----|-----|------------------------------------------| | BHE*| A0 | Fonction | -------------------------------------------------------- | 0 | 0 |Transfert d'un mot | | 0 | 1 |Transfert d'un octet sur D15-D8 (impaire) | | 1 | 0 |Transfert d'un octet sur D7-D0 (paire) | | 1 | 1 |Reserve | |-----|-----|------------------------------------------| |-----|-----|-----------------------------| | S1* | S0* | Etat cycle bus | ------------------------------------------- | 0 | 0 |Reconnaissance d'interruption| | 0 | 1 |Lecture | | 1 | 0 |Ecriture | |-----|-----|-----------------------------| Instructions 80286|octet poids faible | 0 1 2 3 4 5 6 7 --------------|--------|--------|--------|-------|-------|-------|-------- poids|ADD |ADD |ADD |ADD |ADD |ADD |PUSH |POP | 0|b.f.r/m |w.f.r/m |b.t.r/m |w.t.r/m |b.ia |w.ia |ES |ES | forts--------------------------------------------------------------------- |ADC |ADC |ADC |ADC |ADC |ADC |PUSH |POP | 1|b.f.r/m |w.f.r/m |b.t.r/m |w.t.r/m |b.i |w.i |SS |SS | --------------------------------------------------------------------- |AND |AND |AND |AND |AND |AND |SEG = |DAA | 2|b.f.r/m |w.f.r/m |b.t.r/m |w.t.r/m |b.i |w.i |ES | | --------------------------------------------------------------------- |XOR |XOR |XOR |XOR |XOR |XOR |SEG = |AAA | 3|b.f.r/m |w.f.r/m |b.t.r/m |w.t.r/m |b.i |w.i |SS | | --------------------------------------------------------------------- |INC |INC |INC |INC |INC |INC |INC |INC | 4|AX |CX |DX |BX |SP |BP |SI |DI | --------------------------------------------------------------------- |PUSH |PUSH |PUSH |PUSH |PUSH |PUSH |PUSH |PUSH | 5|AX |CX |DX |BX |SP |BP |SI |DI | --------------------------------------------------------------------- |PUSHA |POPA |BOUND |ARPL | | | | | 6| | | | | | | | | --------------------------------------------------------------------- |JO |JNO |JC/JB/ |JNC/JNB/|JE/ |JNE/ |JBE/ |JNBE/ | 7| | |JNAE |JAE |JZ |JNZ |JNA |JA | --------------------------------------------------------------------- |Immediat|Immediat|Immediat|Immediat|TEST |TEST |XCHG |XCHG | 8|b.r/m |w.r/m |b.r/m |is.r/m |b.r/m |w.r/m |b.r/m |w.r/m | --------------------------------------------------------------------- |XCHG |XCHG |XCHG |XCHG |XCHG |XCHG |XCHG |XCHG | 9|AX |CX |DX |BX |SP |BP |SI |DI | --------------------------------------------------------------------- |MOV |MOV |MOV |MOV |MOVS |MOVS |CMPS |CMPS | A|m AL |m AX |AL m |AX m |b |w |b |w | --------------------------------------------------------------------- |MOV |MOV |MOV |MOV |MOV |MOV |MOV |MOV | B|i AL |i CL |i DL |i BL |i AH |i CH |i DH |i BH | --------------------------------------------------------------------- |Shift,n |Shift,n |RET |RET |LES |LDS |MOV |MOV | C|b |w |(I+SP) | | | |b.i.r/m|w.i.r/m| --------------------------------------------------------------------- |Shift |Shift |Shift |Shift |AAM |AAD | |XLAT | D|b |w |b.v |w.v | | | | | --------------------------------------------------------------------- |LOOPNZ/ |LOOPZ/ |LOOP |JCXZ |IN |IN |OUT |OUT | E|LOOPNE |LOOPE | | |b |w |b |w | --------------------------------------------------------------------- |LOCK | |REP |REPZ |HLT |CMC |Groupe1|Groupe1| F| | |REPNZ | | | |b.r/m |w.r/m | --------------|--------|--------|--------|-------|-------|-------|-------- | 0 1 2 3 4 5 6 7 |octet poids faible |octet poids faible | 8 9 A B C D E F -------------|-------|--------|-------|--------|--------|--------|-------- poids|OR |OR |OR |OR |OR |OR |PUSH |MODE | 0|b.f.r/m|w.f.r/m|b.t.r/m |w.t.r/m|b.i |w.i |CS |PROT. | forts--------------------------------------------------------------------- |SBB |SBB |SBB |SBB |SBB |SBB |PUSH |POP | 1|b.f.r/m|w.f.r/m|b.t.r/m |w.t.r/m|b.i |w.i |DS |DS | --------------------------------------------------------------------- |SUB |SUB |SUB |SUB |SUB |SUB |SEG = |DAS | 2|b.f.r/m|w.f.r/m|b.t.r/m |w.t.r/m|b.i |w.i |CS | | --------------------------------------------------------------------- |CMP |CMP |CMP |CMP |CMP |CMP |SEG = |AAS | 3|b.f.r/m|w.f.r/m|b.t.r/m |w.t.r/m|b.i |w.i |DS | | --------------------------------------------------------------------- |DEC |DEC |DEC |DEC |DEC |DEC |DEC |DEC | 4|AX |CX |DX |BX |SP |BP |SI |DI | --------------------------------------------------------------------- |POP |POP |POP |POP |POP |POP |POP |POP | 5|AX |CX |DX |BX |SP |BP |SI |DI | --------------------------------------------------------------------- |PUSH |IMUL |PUSH |IMUL |INS |INS |OUTS |OUTS | 6|b.i |b.r/m |w.i |w.r/m |b |w |b |w | --------------------------------------------------------------------- |JS |JNS |JP/ |JNP/ |JL/ |JNL/ |JLE/ |JNLE/ | 7| | |JPE |JPO |JNGE |JGE |JNG |JG | --------------------------------------------------------------------- |MOV |MOV |MOV |MOV |MOV |LEA |MOV |POP | 8|b.f.r/m|w.f.r/m|b.t.r/m |w.t.r/m|sr.f.r/m| |sr.t.r/m|w.t.r/m| --------------------------------------------------------------------- |CBW |CWD |CALL |WAIT |PUSHF |POPF |SAHF |LAHF | 9| | |l.d | | | | | | --------------------------------------------------------------------- |TEST |TEST |STOS |STOS |LODS |LODS |SCAS |SCAS | A|b,ia |w,ia |b |w |b |w |b |w | --------------------------------------------------------------------- |MOV |MOV |MOV |MOV |MOV |MOV |MOV |MOV | B|i AX |i CX |i DX |i BX |i SP |i BP |i SI |i DI | --------------------------------------------------------------------- |ENTER |LEAVE |RET |RET |INT |INT |INTO |IRET | C| | |l.(i+SP)|l |Type 3 |(autres)| | | --------------------------------------------------------------------- |ESC |ESC |ESC |ESC |ESC |ESC |ESC |ESC | D|0 |1 |2 |3 |4 |5 |6 |7 | --------------------------------------------------------------------- |CALL |JMP |JMP |JMP |IN |IN |OUT |OUT | E|d |d |l.d |si.d |v.b |v.w |v.b |v.w | --------------------------------------------------------------------- |CLC |STC |CLI |STI |CLD |STD |Groupe2 |Groupe2| F| | | | | | |b.r/m |w.r/m | -------------|-------|--------|-------|--------|--------|--------|-------- | 8 9 A B C D E F |octet poids faible |--------|------|-------|-------|-------|-------|-------|-------|--------| |mod _r/m|000 |001 |010 |011 |100 |101 |110 |111 | -------------------------------------------------------------------------- |MODE |SLDT |STR |LLDT |LTR |VERR |VERW | | | | ----------------------------------------------------------------- |PROTEGE |SGDT |SIDT |LGDT |LIDT |SMSW | |LMSW | | -------------------------------------------------------------------------- |Immediat|ADD |OR |ADC |SBB |AND |SUB |XOR |CMP | | | | | | | | | | | -------------------------------------------------------------------------- |Shift |ROL |ROR |RCL |RCR |SHL/SAL|SHR | |SAR | | | | | | | | | | | -------------------------------------------------------------------------- |Groupe 1|TEST | |NOT |NEG |MUL |IMUL |DIV |IDIV | | | | | | | | | | | -------------------------------------------------------------------------- |Groupe 2|INC |DEC |CALL |CALL |JMP |JMP |PUSH |PUSH | | | | |id |I.id |id |I.id |I.id |reg.srce| |--------|------|-------|-------|-------|-------|-------|-------|--------| b = operation sur octet m = memoire d = direct r/m = second octet f = du registre CPU si = intersegment court i = immediat sr = registre segment ia = immediat vers accumulateur t = vers registre CPU id = indirect v = variable is = octet immediat w = operation sur mot l = intersegment long z = zero |------------|----|----|----|----| |2xOctet | 06H| 01H| 00H| 02H| ---------------------------------- | |CTS |LGDT|LLDT|LAR | |INSTRUCTIONS| |SGDT|SLDT|LSL | |MODE | |LIDT|LTR | | |PROTEGE | |SIDT|STR | | | | |LMSW|VERR| | | | |SMSW|VERW| | |------------|----|----|----|----| Principaux formats d'instruction (code operation sur un octet)1x octet 2x octet 3x octet 4x octet 5x octet |-----------| 1| opcode | |-----------| |-----------|-----------| 2| opcode |mod reg r/m| |-----------|-----------| |-----------|-----------|-----------| 3| opcode |mod reg r/m| dp8 | |-----------|-----------|-----------| |-----------|-----------|-----------|-----------| 4| opcode |mod reg r/m| lsb dp16 msb | |-----------|-----------|-----------|-----------| |-----------|-----------|-----------| 5| opcode |mod reg r/m| data8 | |-----------|-----------|-----------| |-----------|-----------|-----------|-----------| 6| opcode |mod reg r/m| lsb data16 msb | |-----------|-----------|-----------|-----------| |-----------|-----------|-----------|-----------| 7| opcode |mod reg r/m| dp8 | data8 | |-----------|-----------|-----------|-----------| |-----------|-----------| 8| opcode | data8 | |-----------|-----------| |-----------|-----------|-----------| 9| opcode | lsb data16 msb | |-----------|-----------|-----------| |-----------|-----------|-----------| 10| opcode | lsb dp16 msb | |-----------|-----------|-----------| |-----------|-----------|-----------|-----------|-----------| 11| opcode | lsb dp16 msb | lsb seg16 msb | |-----------|-----------|-----------|-----------|-----------| Format type d'une instruction |---------------|---------------|---------|---------|---------|---------| | 1xoctet | 2xoctet | 3xoctet | 4xoctet | 5xoctet | 6xoctet | --|-|-|-|-|-|-|---|-|-|-|-|-|-|------------------------------------------ |7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0| | | | | --|-|-|-|-|-------|---|-|---|-|-- | | | | | opcode |d|w|mod| reg | r/m | | | | | |-----------|-|-|---|-----|-----|---------|---------|---------|---------| dp8 = deplacement sur 8 bits mod = mode d'adressage selectionne dp16 = deplacement sur 16 bits reg = indique un registre data8 = deplacement sur 8 bits r/m = indique le mode de calcul de data16 = deplacement sur 16 bits l'adresse (en fonction de mod) seg16 = segment sur 16 bits msb = poids forts d = sens de l'operation par lsb = poids faibles rapport au registre "reg" w = operation sur un octet (0) 0 : reg est la source ou un mot (1) 1 : reg est le resultat MODE DE CALCUL DE L'ADRESSE EFFECTIVE AE|---|----------------------------------------------------------| | | mod | | ---------------|--------------|--------------|-------------- |r/m| 00 | 01 | 10 | 11 | | | | | -------|------- | | | | | w=0 | w=1 | ---------------------------------------------------------------- |000| (BX)+(SI) | (BX)+(SI)+dp8|(BX)+(SI)+dp16| AL | AX | ---------------------------------------------------------------- |001| (BX)+(DI) | (BX)+(DI)+dp8|(BX)+(DI)+dp16| CL | CX | ---------------------------------------------------------------- |010| (BP)+(SI) | (BP)+(SI)+dp8|(BP)+(SI)+dp16| DL | DX | ---------------------------------------------------------------- |011| (BX)+(DI) | (BX)+(DI)+dp8|(BX)+(DI)+dp16| BL | BX | ---------------------------------------------------------------- |100| (SI) (**) | (SI)+dp8 | (SI)+dp16 | AH | SP | ---------------------------------------------------------------- |101| (DI) (**) | (DI)+dp8 | (DI)+dp16 | CH | BP | ---------------------------------------------------------------- |110| dp16 (*) | (BP)+dp8 | (BP)+dp16 | DH | SI | ---------------------------------------------------------------- |111| (BX) (**) | (BX)+dp8 | (BX)+dp16 | BH | DI | |---|--------------|--------------|--------------|------|------| --------------------------------------------------------------------------- AAA |Pas d'operande. |x...xxmxm |Corrige resultat addition 2 chiffres ASCII en un nombre BCD| |Exemple : ADD AL,37H avec AX=0034H donne AX=006BH | | AAA donne AX=0101H (soit 7+4=11 en decimal) | --------------------------------------------------------------------------- AAD |Pas d'operande. |x...mmxmx |Ajustement ASCII pour division. | |Converti 1 nombre decimal ASCII contenu dans AX en 1 nombre| |nombre binaire equivalent dans AX | |Exemple : AL = 33H et AH = 35H donne AL = 23H et AH = 00H | --------------------------------------------------------------------------- AAM |Pas d'operande. |x...mmxmx |Ajustement ASCII pour multiplication | |Corrige le resultat binaire d'une multiplication en 2 nombr| |ASCII en un nombre decimal BCD | |Exemple : MUL AL,BL avec AL=37H et BL=39H donne AX=0C3FH | | AAM donne AX=0603H (soit 7x9=63 en decimal) | --------------------------------------------------------------------------- AAS |Pas d'operande. |x...xxmxm |Ajustement ASCII pour soustraction. | |Corrige le resultat d'une soustraction de 2 nombres ASCIIen| |un nombre binaire | |Exemple : SUB AL,37H avec AL=3334H donne AX=33FDH | | AAM donne AX=3207H (soit 34-7=27 en decimal) | --------------------------------------------------------------------------- ADC |Destination, source |m...mmmmm |Addition avec retenue | --------------------------------------------------------------------------- ADD |Destination, source |m...mmmmm |Addition sans retenue | --------------------------------------------------------------------------- AND |Destination, source |0...mmxm0 |ET logique entre 2 operandes | --------------------------------------------------------------------------- ARPL |Destination, source (uniquement en mode protege) |.....m... |Ajustement du champ RPL d'un selecteur(ExINT06H mode reel) | --------------------------------------------------------------------------- BOUND|Destination, source |......... |Test d'un registre entre 2 limites | --------------------------------------------------------------------------- CALL |Destination |......... |Execution d'un sous-programme avec retour sur RET | --------------------------------------------------------------------------- CBW |Pas d'operande |......... |Conversion d'un octet signe en un mot | --------------------------------------------------------------------------- CLC |Pas d'operande |........0 |Effacement de la retenue CF | --------------------------------------------------------------------------- CLD |Pas d'operande |0........ |Increment. automatique des operations de chaine (DF mis a0)| --------------------------------------------------------------------------- CLI |Pas d'operande |..0...... |Suppression des interruptions externes (IF force a 0) | --------------------------------------------------------------------------- CLTS |Pas d'operande |......... |Mise a 0 de l'indicateur TS du registre d'etat machine MSW | --------------------------------------------------------------------------- CMC |Pas d'operande |........m |Inversion de l'indicateur CF | --------------------------------------------------------------------------- CMP |Destination, source |m...mmmmm |Comparaison de 2 operandes | --------------------------------------------------------------------------- CMPS |Destination, source |m...mmmmm |Compare 2 operandes dans chaines + incrementation SI et DI | --------------------------------------------------------------------------- CWD |Pas d'operande |......... |Conversion mot signe dans AX en double mot etendu dans DX | --------------------------------------------------------------------------- DAA |Pas d'operande |x...mmmmm |Ajuste en BCD le resultat AL d'une addition 2 nombres BCD | --------------------------------------------------------------------------- DAS |Pas d'operande |x...mmmmm |Ajuste en BCD le resultat AL d'une soustrac. 2 nombres BCD | --------------------------------------------------------------------------- DEC |Destination |m...mmmmm |Decrementation de 1 de l'operande destination | --------------------------------------------------------------------------- DIV |Source |x...xxxxx |Division non signee | --------------------------------------------------------------------------- ENTER|Nombre d'octet, niveau d'imbrication (0 a 31) |......... |Allocation memoire pile pour passage de parametres | --------------------------------------------------------------------------- ESC |Operande externe, adresse |......... |Transmission d'une instruction a un coprocesseur | --------------------------------------------------------------------------- HLT |Pas d'operande |......... |Arret 80286; reactive par interruption INT(non masquee),NMI| --------------------------------------------------------------------------- IDIV |Source |x...xxxxx |Division Accu/source, AL ou AX = quotient, AH ou DX = reste| --------------------------------------------------------------------------- IMUL |Source |m...xxxxm |Multiplication AL * Source = AX ou AX * Source = DX:AX | --------------------------------------------------------------------------- IN |Source |......... |Lecture du port d'E/S source mis dans accumulateur | --------------------------------------------------------------------------- INC |Destination |m...mmmm. |Incrementation de 1 de l'operande destination | --------------------------------------------------------------------------- INS |Pas d'operande |......... |Entree d'une chaine du port DX vers la memoire ES:DI | |+ decrement (DF=1) ou incremente(DF=0)de1(INSB)ou2(INSW) | --------------------------------------------------------------------------- INT |Type d'interruption (0 a 255) |..00..... |Interruption logicielle | --------------------------------------------------------------------------- INTO |Pas d'operande |..m0..... |Validation d'interrupt sur overflow OF=1(corresp a INT04H) | --------------------------------------------------------------------------- IRET |Pas d'operande |mmmmmmmmm |Retour d'interruption avec restitution IP,CS et FLAGS | --------------------------------------------------------------------------- JMP |Destination |......... |Saut inconditionnel (si non commut tache,FLAGS conserve) |mmmmmmmmm --------------------------------------------------------------------------- Jcond|Deplacement 8 bits |......... |Saut conditionnel a l'adresse IP + deplacement | |JA/JNBE Si superieur et non egal non signe (CFet ZF = 0) | |JAE/JNB Si superieur ou egal non signe (CF=0) | |JB/JNAE Si inferieur et non egal non signe (CF=1) | |JBE/JNA Si inferieur ou egal non signe (CF=1 ou ZF=1) | |JC Si retenue (idd JB/JNAE) non signe (CF=1) | |JCXZ Si CX = 0 | |JE/JZ Si egal non signe (ZF=1) | |JG/JNLE Si superieur et non egal signe (SF=OF et ZF=0)| |JGE/JNL Si superieur ou egal signe (SF=OF) | |JL/JNGE Si inferieur et non egal signe (SF><OF) | |JLE/JNG Si inferieur ou egal signe (SF><OF ouZF=1)| |JNC Si pas de retenue non signe (CF= 0) | |JNE/JNZ Si non egal non signe (ZF= 0) | |JNO Si pas de debordement signe (OF= 0) | |JNS Si positif signe (SF= 0) | |JNP/JPO Si parite impaire non signe (PF= 0) | |JO Si debordement signe (OF= 1) | |JP/JPE Si parite paire non signe (PF= 1) | |JS Si negatif signe (SF=1) | --------------------------------------------------------------------------- LAHF |Pas d'operande |......... |Chargement des flags dans AH.(AH=SF,ZF,x,AF,x,PF,x,CF) | --------------------------------------------------------------------------- LAR |Destination, source (en mode protege uniquement) |.....1... |Chargement octet de droit d'acces. (Except INT06H en reel) | --------------------------------------------------------------------------- LDS |Destination, source |......... LES |Chargement pointeur 32 bits dans DS/ES suivant instruct. | --------------------------------------------------------------------------- LEA |Destination, source |......... |Chargement registre avec adresse effective | --------------------------------------------------------------------------- LEAVE|Pas d'operande |......... |Desallocation memoire en pile (inverse de ENTER) | --------------------------------------------------------------------------- LGDT |Source |......... LIDT |Chargement des registres GDTR/IDTR suivant instruction | --------------------------------------------------------------------------- LLDT |Source (uniquement en mode protege) |......... |Chargement de LDTR (Exception INT06H en mode reel) | --------------------------------------------------------------------------- LMSW |Source |......... |Chargement d'un mot d'etat machine | --------------------------------------------------------------------------- LOCK |Pas d'operande |......... |Prefixe d'activation du signal LOCK* pour verrouillage | |acces externes aux bus durant l'instruction suivante | --------------------------------------------------------------------------- LODS |Source |......... |Chargement chaine caracteres dans AX ou AL + SI decremente | |(DF=1) ou incremente (DF=0) de 1 (LODSB) ou 2 (LODSW) | --------------------------------------------------------------------------- LOOP |Deplacement |......... |Saut incond. a IP+deplacement tant que CX <>0 +CX=CX-1 | --------------------------------------------------------------------------- LOOPx|Deplacement |......... |Saut cond a IP+deplacement tant que CX <>0 + CX=CX-1 | |LOOPE/LOOPZ et si ZF=1 | |LOOPNE/LOOPNZ et si ZF=0 | --------------------------------------------------------------------------- LSL |Destination, source (uniquement mode protege,INT06H sinon) |.....m... |Chargement de la limite d'un segment dans un registre | --------------------------------------------------------------------------- LTR |Source |......... |Chargement du registre de tache | --------------------------------------------------------------------------- MOV |Destination, source |......... |Transfert de donnees | --------------------------------------------------------------------------- MOVS |Chaine destination, chaine source |......... |Transfert de donne + SI et DI incrementes (DF=0) ou | |decrementes de 1 (MOVSB) ou de 2 (MOVSW) | --------------------------------------------------------------------------- MUL |Source |m...xxxxm |Multiplication non signee AL*operande=AX | | ou AX*operande=DX:AX | --------------------------------------------------------------------------- NEG |Destination |m...mmmmm |Complement a 2 | --------------------------------------------------------------------------- NOP |Pas d'operande |......... |Pas d'operation (3 cycles machine, code op sur 1octet) | --------------------------------------------------------------------------- NOT |Destination |......... |Operation logique NON (inverse tous les bits) | --------------------------------------------------------------------------- OR |Destination, source |0...mmxm0 |Operat. logique OU inclusif Destination=Destination ou src | --------------------------------------------------------------------------- OUT |Source |......... |Ecriture port d'E/S source avec la donnee dans accumulateur| --------------------------------------------------------------------------- OUTS |Pas d'operande |......... |Sortie chaine port DX vers la memoire ES:DI + decrement | |(DF=1) ou increment (DF=0) de 1 (OUTSB) ou 2 (OUTSW) | --------------------------------------------------------------------------- POP |Destination |......... |Restitution d'un mot par la pile a l'adresse destination | --------------------------------------------------------------------------- POP* |Pas d'operande |......... |Restitution registre (DS,ES ou SS) par pile; (SP)=(SP)+2 | --------------------------------------------------------------------------- POPA |Pas d'operande |......... |Restitut. registres DI,SI,BP,SP,BX,DX,CX,AX; (SP)=(SP)+16 | --------------------------------------------------------------------------- POPF |Pas d'operande |mmmmmmmmm |Restitution du registre des indicateurs FLAGS; (SP)=(SP)+2 | --------------------------------------------------------------------------- PUSH |Source |......... |Sauvegarde d'un mot a l'adresse source dans la pile | --------------------------------------------------------------------------- PUSH*|Pas d'operande |......... |Sauvegarde 1 registre (DS,ES ou SS) dans pile; (SP)=(SP)-2 | --------------------------------------------------------------------------- PUSHA|Pas d'operande |......... |Sauvegarde DI,SI,BP,SP,BX,DX,CX,AX dans pile; (SP)=(SP)-16 | --------------------------------------------------------------------------- PUSHF|Pas d'operande |......... |Sauvegarde des indicateurs FLAGS dans la pile; (SP)=(SP)-2 | --------------------------------------------------------------------------- RCL |Destination, compteur (ou CL) |m.......m |Rotation gauche de donnee destination;n bits avec retenue | --------------------------------------------------------------------------- RCR |Destination, compteur (ou CL) |m.......m |Rotation droite de donnee destination ; n bits avec retenu | --------------------------------------------------------------------------- REP |Prefixe pour repeter instruction suivante tant que CX><0 |......... --------------------------------------------------------------------------- REP* |Prefixe repetition condition. instruction tant que CX><0 | |REPNE/REPNZ et non zero ou non egal (ZF=0) |......... |REPE/REPZ et zero ou egal (ZF=1) |......... --------------------------------------------------------------------------- RET |Valeur de depilement facultative |......... |Retour de sous-programme avec passage parametres eventuel | --------------------------------------------------------------------------- ROL |Destination, compteur (ou CL) |m.......m |Rotation gauche de donnee destination ;n bits sans retenue | --------------------------------------------------------------------------- RCR |Destination, compteur (ou CL) |m.......m |Rotation droite de donnee destination ;n bits sans retenue | --------------------------------------------------------------------------- SAHF |Pas d'operande |....mmmmm |Transfert de AH dans FLAGS (b0=CF,b2=PF,b4=AF,b6=ZF,b7=SF) | --------------------------------------------------------------------------- SAL |Destination, compteur (ou CL) |m...mmxmm |Decalage gauche de donnee destination; n bits avec retenue | --------------------------------------------------------------------------- SAR |Destination, compteur (ou CL) |m...mmxmm |Decalage droite signe donnee destination; n bits avec reten| --------------------------------------------------------------------------- SBB |Destination, source |m...mmmmm |Soustraction avec retenue; (dest)=(dest)-(srce)-(CF) | --------------------------------------------------------------------------- SCAS |Pas d'operande |m...mmmmm |Comparaison donnee (accu) a une chaine de donnees pointee | |par ES:DI ; (DI)=(DI)-1 si DF=1 ou (DI)=(DI)+1 si DF=0 | |de 1 (SCASB) ou 2 (SCASW) | --------------------------------------------------------------------------- SGDT |Destination |......... SIDT |Memorisation registre GDTR ou IDTR a l'adresse destination | --------------------------------------------------------------------------- SHR |Destination |m...mmxmm |Decalage a gauche non signe de la donnee destination;n bits| |avec retenue | --------------------------------------------------------------------------- SLDT |Destination |......... |Stockage de LDTR dans un registre ou en memoire | --------------------------------------------------------------------------- SMSW |Destination |......... |Stockage de MSW dans un registre ou en memoire | --------------------------------------------------------------------------- STC |Pas d'operande |........1 |Positionnement de la retenue CF=1 | --------------------------------------------------------------------------- STD |Pas d'operande |.1....... |Positionnement de l'indicateur de direction DF=1 | --------------------------------------------------------------------------- STI |Pas d'operande |..1...... |Positionnement indicateur autorisation d'interruption IF=1 | --------------------------------------------------------------------------- STOS |Destination |......... |Stockage donnee (accu) dans une chaine de donnees pointee | |par ES:DI ; (DI)=(DI)-1 si DF=1 ou (DI)=(DI)+1 si DF=0 | |de 1 (STOSB) ou 2 (STOSW) | --------------------------------------------------------------------------- STR |Destination (uniquement mode protege,sinon except.INT06H) |......... |Stockage du registre TR dans un registre ou en memoire | --------------------------------------------------------------------------- SUB |Destination, source |m...mmmmm |Soustraction sans retenue; (dest)=(dest)-(srce) | --------------------------------------------------------------------------- TEST |Destination, source |0...mmxm0 |ET logique entre destination et source | --------------------------------------------------------------------------- VERR |Source (uniquement en mode protege,sinon except. INT06H) |.....m... VERW |Test segment en lecture ou ecriture: accessible = ZF a 1 | --------------------------------------------------------------------------- WAIT |Pas d'operande |......... |Met le 80286 en attente tant que la ligne BUSY* est active | --------------------------------------------------------------------------- XCHG |Destination, source |......... |Echange contenu registre destination avec celui d'une srce | |Le signal LOCK est active durant l'echange | --------------------------------------------------------------------------- XLAT |Destination, source |......... |Traduction de table: (AL)=(BX+DS:AL) | --------------------------------------------------------------------------- XOR |Destination, source |0...mmxm0 |Ou exclusif : (dest)=(dest)XOR(srce) | --------------------------------------------------------------------------- | |ODITSZAPC src = source dest= destination m = modifie par l'instruction en fonction du resultat x = indefini apres execution de l'instruction . = non affecte O = Overflow flag D = Direction flag I = Interrupt enable flag T = Trap flag S = Sign flag Z = Zero flag A = Auxiliary flag P = Parity flag C = Carry flag |------------------|--------------||------------------|--------------| | Mnemonique | Code || Mnemonique | Code | ---------------------------------------------------------------------- |AAA |37 ||CMP AX,XXYY |3D YY XX | |AAD |D5 0A ||CMPS |A6 | |AAM |D4 0A ||CMPS |A7 | |AAS |3F ||CS: |2E | |ADC [BX+SI],AL |10 00 ||CWD |99 | |ADC [BX+SI],AX |11 00 ||DAA |27 | |ADC AL,[BX+SI] |12 00 ||DAS |2F | |ADC AX,[BX+SI] |13 00 ||DECB [BX+SI] |FE 08 | |ADC [BX+SI],XX |80 10 XX ||DECW [BX+SI] |FF 08 | |ADC [BX+SI],XXYY |81 10 YY XX ||DEC AX |48 | |ADC [BX+SI],+XX |83 10 XX ||DEC CX |49 | |ADC AL,XX |14 XX ||DEC DX |4A | |ADC AX,XXYY |15 YY XX ||DEC BX |4B | |ADD [BX+SI],AL |00 00 ||DEC SP |4C | |ADD [BX+SI],AX |01 00 ||DEC BP |4D | |ADD AL,[BX+SI] |02 00 ||DEC SI |4E | |ADD AX,[BX+SI] |03 00 ||DEC DI |4F | |ADD [BX+SI],XX |80 00 XX ||DIVB [BX+SI] |F6 30 | |ADD [BX+SI],XXYY |81 00 YY XX ||DIVW [BX+SI] |F7 30 | |ADD [BX+SI],+XX |83 00 XX ||DS: |3E | |ADD AL,XX |04 XX ||ENTER XXYYZZ |C8 ZZ YY XX | |ADD AX,XXYY |05 YY XX ||ES: |26 | |AND [BX+SI],AL |20 00 ||ESC | | |AND [BX+SI],AX |21 00 ||HLT |F4 | |AND AL,[BX+SI] |22 00 ||IDVB [BX+SI] |F6 38 | |AND AX,[BX+SI] |23 00 ||IDVW [BX+SI] |F7 38 | |AND [BX+SI],XX |80 40 XX ||IMULB [BX+SI] |F6 28 | |AND [BX+SI],XXYY |81 40 YY XX ||IMULW [BX+SI] |F7 28 | |AND [BX+SI],+XX |83 40 XX ||IN AL,XX |E4 XX | |AND AL,XX |24 XX ||IN AL,XXYY |E5 YY XX | |AND AX,XXYY |25 YY XX ||IN AL,DX |EC | |ARPL AX,[BX+SI] |63 00 ||IN AX,DX |ED | |BOUND AX,[BX+SI] |62 00 ||INC AX |40 | |CALL XXYY |E8 YY XX ||INC CX |41 | |CALL [BX+SI] |FF 10 ||INC DX |42 | |CALL [BX+SI] (F) |FF 18 ||INC BX |43 | |CALL XXYY VVWW |9A YY XX WW VV||INC SP |44 | |CBW |98 ||INC BP |45 | |CLC |F8 ||INC SI |46 | |CLD |FC ||INC DI |47 | |CLI |FA ||INT 3 |CC | |CLTS |0F 06 ||INT XX |CD XX | |CMC |F5 ||INTO |CE | |CMP [BX+SI],AL |38 00 ||IRET |CF | |CMP [BX+SI],AX |39 00 ||JA XX |77 XX | |CMP AL,[BX+SI] |3A 00 ||JAE XX |73 XX | |CMP AX,[BX+SI] |3B 00 ||JB XX |72 XX | |CMP [BX+SI],XX |80 38 XX ||JBE XX |76 XX | |CMP [BX+SI],XXYY |81 38 YY XX ||JC XX |72 XX | |CMP [BX+SI],+XX |83 38 XX ||JCXZ |E3 XX | |CMP AL,XX |3C XX ||JE XX |74 XX | |------------------|--------------||------------------|--------------| |------------------|--------------||------------------|--------------| | Mnemonique | Code || Mnemonique | Code | ---------------------------------------------------------------------- |JG XX |7F XX ||MOV AX,[BX+SI] |8B 00 | |JGE XX |7D XX ||MOV [BX+SI],XX |C6 00 XX | |JL XX |7C XX ||MOV [BX+SI],XXYY |C7 00 YY XX | |JLE XX |7E XX ||MOV AL,XX |B0 XX | |JMP XXYY |E9 YY XX ||MOV AX,XXYY |B8 YY XX | |JMP +XX |EB XX ||MOV AL,[XXYY] |A0 YY XX | |JMP [BX+SI] |FF 20 ||MOV AX,[XXYY] |A1 YY XX | |JMP [BX+SI] (F) |FF 28 ||MOV [XXYY],AL |A2 YY XX | |JMP XXYY VVWW |EA YY XX WW VV||MOV [XXYY],AX |A3 YY XX | |JNA XX |76 XX ||MOV AX,ES |8C C0 | |JNAE XX |72 XX ||MOV ES,AX |8E C0 | |JNB XX |73 XX ||MOVSB |A4 | |JNBE XX |77 XX ||MOVSW |A5 | |JNC XX |73 XX ||MUL [BX+SI] (O) |F6 20 | |JNE XX |75 XX ||MUL [BX+SI] (M) |F7 20 | |JNG XX |7E XX ||NEG [BX+SI] (O) |F6 18 | |JNGE XX |7C XX ||NEG [BX+SI] (O) |F7 18 | |JNL XX |7D XX ||NOP |90 | |JNLE XX |7F XX ||NOT [BX+SI] (O) |F6 10 | |JNO XX |71 XX ||NOT [BX+SI] (M) |F7 10 | |JNP XX |7B XX ||OR [BX+SI],AL |08 00 | |JNS XX |79 XX ||OR [BX+SI],AX |09 00 | |JNZ XX |75 XX ||OR AL,[BX+SI] |0A 00 | |JO XX |70 XX ||OR AX,[BX+SI] |0B 00 | |JP XX |7A XX ||OR [BX+SI],XX |80 08 XX | |JPE XX |7A XX ||OR [BX+SI],XXYY |81 08 YY XX | |JPO XX |7B XX ||OR AL,XX |0C XX | |JS XX |78 XX ||OR AX,XXYY |0D YY XX | |JZ XX |74 XX ||OUT XX,AL |E6 | |LAHF |9F ||OUT XXYY,AL |E7 | |LAR AX,[BX+SI] |0F 02 00 ||OUT DX,AL |EE | |LDS AX,[BX+SI] |C5 00 ||OUT DX,AX |EF | |LEA AX,[BX+SI] |8D 00 ||POP [BX+SI] |8F 00 | |LES AX,[BX+SI] |C4 00 ||POPA |61 | |LGDT [BX+SI] |0F 01 10 ||POPF |9D | |LIDT [BX+SI] |0F 01 18 ||POP AX |58 | |LLDT [BX+SI] |0F 00 10 ||POP BP |5D | |LMSW [BX+SI] |0F 01 30 ||POP BX |5B | |LOCK |F0 ||POP CX |59 | |LODS (M) |AC ||POP DI |5F | |LODS (O) |AD ||POP DS |1F | |LOOP XX |E2 XX ||POP DX |5A | |LOOPE XX |E1 XX ||POP ES |07 | |LOOPZ XX |E1 XX ||POP SI |5E | |LOOPNZ XX |E0 XX ||POP SP |5C | |LOOPNE XX |E2 XX ||POP SS |17 | |LSL AX,[BX+SI] |0F 03 00 ||PUSH [BX+SI] |FF 30 | |LTR [BX+SI] |0F 00 18 ||PUSHB XX |68 XX | |MOV [BX+SI],AL |88 00 ||PUSHW XXYY |6A YY XX | |MOV [BX+SI],AX |89 00 ||PUSHA |60 | |MOV AL,[BX+SI] |8A 00 ||PUSHF |9C | |------------------|--------------||------------------|--------------| |------------------|--------------||------------------|--------------| | Mnemonique | Code || Mnemonique | Code | ---------------------------------------------------------------------- |PUSH AX |50 ||SCAS (O) |AE | |PUSH BP |55 ||SCAS (M) |AF | |PUSH BX |53 ||SGDT [BX+SI] |0F 01 00 | |PUSH CS |0E ||SHL [BX+SI],1 (O) |D0 20 | |PUSH CX |51 ||SHL [BX+SI],1 (M) |D1 20 | |PUSH DI |57 ||SHL [BX+SI],CL (O)|D2 20 | |PUSH DS |1E ||SHL [BX+SI],CL (M)|D3 20 | |PUSH DX |52 ||SHR [BX+SI],1 (O) |D0 28 | |PUSH ES |06 ||SHR [BX+SI],1 (M) |D1 28 | |PUSH SI |56 ||SHR [BX+SI],CL (O)|D2 28 | |PUSH SP |54 ||SHR [BX+SI],CL (M)|D3 28 | |PUSH SS |16 ||SIDT [BX+SI] |0F 01 08 | |RCL [BX+SI],1 (O) |D0 10 ||SLDT[BX+SI] |0F 00 00 | |RCL [BX+SI],1 (M) |D1 10 ||SMSW [BX+SI] |0F 01 20 | |RCL [BX+SI],CL (O)|D2 10 ||SS: |36 | |RCL [BX+SI],CL (M)|D3 10 ||STC |F9 | |RCR [BX+SI],1 (O) |D0 18 ||STD |FD | |RCR [BX+SI],1 (M) |D1 18 ||STI |FB | |RCR [BX+SI],CL (O)|D2 18 ||STOS (O) |AA | |RCR [BX+SI],CL (M)|D3 18 ||STOS (M) |AB | |REP |F3 ||STR [BX+SI] |0F 00 08 | |REPE |F3 ||SUB [BX+SI],AL |28 00 | |REPNE |F2 ||SUB [BX+SI],AX |29 00 | |REPNZ |F2 ||SUB AL,[BX+SI] |2A 00 | |REPZ |F3 ||SUB AX,[BX+SI] |2B 00 | |RET |C3 ||SUB [BX+SI],XX |80 28 XX | |RET XXYY |C2 YY XX ||SUB [BX+SI],XXYY |81 28 YY XX | |RET (F) |CB ||SUB [BX+SI],+XX |83 28 XX | |RET XXYY (F) |CA YY XX ||SUB AL,XX |2C XX | |ROL [BX+SI],1 (O) |D0 00 ||SUB AX,XXYY |2D YY XX | |ROL [BX+SI],1 (M) |D1 00 ||TEST [BX+SI],AL |84 00 | |ROL [BX+SI],CL (O)|D2 00 ||TEST [BX+SI],AX |85 00 | |ROL [BX+SI],CL (M)|D3 00 ||TEST [BX+SI],XX |F6 00 XX | |ROR [BX+SI],1 (O) |D0 08 ||TEST [BX+SI],XXYY |F7 00 YY XX | |ROR [BX+SI],1 (M) |D1 08 ||TEST AL,XX |A8 XX | |ROR [BX+SI],CL (O)|D2 08 ||TEST AX,XXYY |A9 YY XX | |ROR [BX+SI],CL (M)|D3 08 ||VERR [BX+SI] |0F 00 20 | |SAHF |9E ||VERW [BX+SI] |0F 00 28 | |SAR [BX+SI],1 (O) |D0 38 ||WAIT |9B | |SAR [BX+SI],1 (M) |D1 38 ||XCHG [BX+SI],AL |86 00 | |SAR [BX+SI],CL (O)|D2 38 ||XCHG [BX+SI],AX |87 00 | |SAR [BX+SI],CL (M)|D3 38 ||XCHG CX,AX |91 | |SBB [BX+SI],AL |18 00 ||XCHG DX,AX |92 | |SBB [BX+SI],AX |19 00 ||XCHG BX,AX |93 | |SBB AL,[BX+SI] |1A 00 ||XCHG SP,AX |94 | |SBB AX,[BX+SI] |1B 00 ||XCHG BP,AX |95 | |SBB [BX+SI],XX |80 18 XX ||XCHG SI,AX |96 | |SBB [BX+SI],XXYY |81 18 YY XX ||XCHG DI,AX |97 | |SBB [BX+SI],+XX |83 18 XX ||XLAT |D7 | |SBB AL,XX |1C XX ||XOR [BX+SI],AL |30 00 | |SBB AX,XXYY |1D YY XX ||XOR [BX+SI],AX |31 00 | |------------------|--------------||------------------|--------------| |------------------|--------------| | Mnemonique | Code | ----------------------------------- |XOR AL,[BX+SI] |32 00 | |XOR AX,[BX+SI] |33 00 | |XOR [BX+SI],XX |80 30 XX | |XOR [BX+SI],XXYY |81 30 YY XX | |XOR AL,XX |34 XX | |XOR AX,XXYY |35 YY XX | |------------------|--------------| (O) = operation sur un octet (M) = operation sur un mot |--------------|------------------||--------------|------------------| | Code | Mnemonique || Code | Mnemonique | ---------------------------------------------------------------------- | |ESC ||24 XX |AND AL,XX | |00 00 |ADD [BX+SI],AL ||25 YY XX |AND AX,XXYY | |01 00 |ADD [BX+SI],AX ||26 |ES: | |02 00 |ADD AL,[BX+SI] ||27 |DAA | |03 00 |ADD AX,[BX+SI] ||28 00 |SUB [BX+SI],AL | |04 XX |ADD AL,XX ||29 00 |SUB [BX+SI],AX | |05 YY XX |ADD AX,XXYY ||2A 00 |SUB AL,[BX+SI] | |06 |PUSH ES ||2B 00 |SUB AX,[BX+SI] | |07 |POP ES ||2C XX |SUB AL,XX | |08 00 |OR [BX+SI],AL ||2D YY XX |SUB AX,XXYY | |09 00 |OR [BX+SI],AX ||2E |CS: | |0A 00 |OR AL,[BX+SI] ||2F |DAS | |0B 00 |OR AX,[BX+SI] ||30 00 |XOR [BX+SI],AL | |0C XX |OR AL,XX ||31 00 |XOR [BX+SI],AX | |0D YY XX |OR AX,XXYY ||32 00 |XOR AL,[BX+SI] | |0E |PUSH CS ||33 00 |XOR AX,[BX+SI] | |0F 00 00 |SLDT[BX+SI] ||34 XX |XOR AL,XX | |0F 00 08 |STR [BX+SI] ||35 YY XX |XOR AX,XXYY | |0F 00 10 |LLDT [BX+SI] ||36 |SS: | |0F 00 18 |LTR [BX+SI] ||37 |AAA | |0F 00 20 |VERR [BX+SI] ||38 00 |CMP [BX+SI],AL | |0F 00 28 |VERW [BX+SI] ||39 00 |CMP [BX+SI],AX | |0F 01 00 |SGDT [BX+SI] ||3A 00 |CMP AL,[BX+SI] | |0F 01 08 |SIDT [BX+SI] ||3B 00 |CMP AX,[BX+SI] | |0F 01 10 |LGDT [BX+SI] ||3C XX |CMP AL,XX | |0F 01 18 |LIDT [BX+SI] ||3D YY XX |CMP AX,XXYY | |0F 01 20 |SMSW [BX+SI] ||3E |DS: | |0F 01 30 |LMSW [BX+SI] ||3F |AAS | |0F 02 00 |LAR AX,[BX+SI] ||40 |INC AX | |0F 03 00 |LSL AX,[BX+SI] ||41 |INC CX | |0F 06 |CLTS ||42 |INC DX | |10 00 |ADC [BX+SI],AL ||43 |INC BX | |11 00 |ADC [BX+SI],AX ||44 |INC SP | |12 00 |ADC AL,[BX+SI] ||45 |INC BP | |13 00 |ADC AX,[BX+SI] ||46 |INC SI | |14 XX |ADC AL,XX ||47 |INC DI | |15 YY XX |ADC AX,XXYY ||48 |DEC AX | |16 |PUSH SS ||49 |DEC CX | |17 |POP SS ||4A |DEC DX | |18 00 |SBB [BX+SI],AL ||4B |DEC BX | |19 00 |SBB [BX+SI],AX ||4C |DEC SP | |1A 00 |SBB AL,[BX+SI] ||4D |DEC BP | |1B 00 |SBB AX,[BX+SI] ||4E |DEC SI | |1C XX |SBB AL,XX ||4F |DEC DI | |1D YY XX |SBB AX,XXYY ||50 |PUSH AX | |1E |PUSH DS ||51 |PUSH CX | |1F |POP DS ||52 |PUSH DX | |20 00 |AND [BX+SI],AL ||53 |PUSH BX | |21 00 |AND [BX+SI],AX ||54 |PUSH SP | |22 00 |AND AL,[BX+SI] ||55 |PUSH BP | |23 00 |AND AX,[BX+SI] ||56 |PUSH SI | |--------------|------------------||--------------|------------------| |--------------|------------------||--------------|------------------| | Code | Mnemonique || Code | Mnemonique | ---------------------------------------------------------------------- |57 |PUSH DI ||80 38 XX |CMP [BX+SI],XX | |58 |POP AX ||80 40 XX |AND [BX+SI],XX | |59 |POP CX ||81 00 YY XX |ADD [BX+SI],XXYY | |5A |POP DX ||81 08 YY XX |OR [BX+SI],XXYY | |5B |POP BX ||81 10 YY XX |ADC [BX+SI],XXYY | |5C |POP SP ||81 18 YY XX |SBB [BX+SI],XXYY | |5D |POP BP ||81 28 YY XX |SUB [BX+SI],XXYY | |5E |POP SI ||81 30 YY XX |XOR [BX+SI],XXYY | |5F |POP DI ||81 38 YY XX |CMP [BX+SI],XXYY | |60 |PUSHA ||81 40 YY XX |AND [BX+SI],XXYY | |61 |POPA ||83 00 XX |ADD [BX+SI],+XX | |62 00 |BOUND AX,[BX+SI] ||83 10 XX |ADC [BX+SI],+XX | |63 00 |ARPL AX,[BX+SI] ||83 18 XX |SBB [BX+SI],+XX | |68 XX |PUSHB XX ||83 28 XX |SUB [BX+SI],+XX | |6A YY XX |PUSHW XXYY ||83 38 XX |CMP [BX+SI],+XX | |70 XX |JO XX ||83 40 XX |AND [BX+SI],+XX | |71 XX |JNO XX ||84 00 |TEST [BX+SI],AL | |72 XX |JB XX ||85 00 |TEST [BX+SI],AX | |72 XX |JC XX ||86 00 |XCHG [BX+SI],AL | |72 XX |JNAE XX ||87 00 |XCHG [BX+SI],AX | |73 XX |JAE XX ||88 00 |MOV [BX+SI],AL | |73 XX |JNB XX ||89 00 |MOV [BX+SI],AX | |73 XX |JNC XX ||8A 00 |MOV AL,[BX+SI] | |74 XX |JE XX ||8B 00 |MOV AX,[BX+SI] | |74 XX |JZ XX ||8C C0 |MOV AX,ES | |75 XX |JNE XX ||8D 00 |LEA AX,[BX+SI] | |75 XX |JNZ XX ||8E C0 |MOV ES,AX | |76 XX |JBE XX ||8F 00 |POP [BX+SI] | |76 XX |JNA XX ||90 |NOP | |77 XX |JA XX ||91 |XCHG CX,AX | |77 XX |JNBE XX ||92 |XCHG DX,AX | |78 XX |JS XX ||93 |XCHG BX,AX | |79 XX |JNS XX ||94 |XCHG SP,AX | |7A XX |JP XX ||95 |XCHG BP,AX | |7A XX |JPE XX ||96 |XCHG SI,AX | |7B XX |JNP XX ||97 |XCHG DI,AX | |7B XX |JPO XX ||98 |CBW | |7C XX |JL XX ||99 |CWD | |7C XX |JNGE XX ||9A YY XX WW VV|CALL XXYY VVWW | |7D XX |JGE XX ||9B |WAIT | |7D XX |JNL XX ||9C |PUSHF | |7E XX |JLE XX ||9D |POPF | |7E XX |JNG XX ||9E |SAHF | |7F XX |JG XX ||9F |LAHF | |7F XX |JNLE XX ||A0 YY XX |MOV AL,[XXYY] | |80 00 XX |ADD [BX+SI],XX ||A1 YY XX |MOV AX,[XXYY] | |80 08 XX |OR [BX+SI],XX ||A2 YY XX |MOV [XXYY],AL | |80 10 XX |ADC [BX+SI],XX ||A3 YY XX |MOV [XXYY],AX | |80 18 XX |SBB [BX+SI],XX ||A4 |MOVSB | |80 28 XX |SUB [BX+SI],XX ||A5 |MOVSW | |80 30 XX |XOR [BX+SI],XX ||A6 |CMPS | |--------------|------------------||--------------|------------------| |--------------|------------------||--------------|------------------| | Code | Mnemonique || Code | Mnemonique | ---------------------------------------------------------------------- |A7 |CMPS ||D3 38 |SAR [BX+SI],CL (M)| |A8 XX |TEST AL,XX ||D4 0A |AAM | |A9 YY XX |TEST AX,XXYY ||D5 0A |AAD | |AA |STOS (O) ||D7 |XLAT | |AB |STOS (M) ||E0 XX |LOOPNZ XX | |AC |LODS (M) ||E1 XX |LOOPE XX | |AD |LODS (O) ||E1 XX |LOOPZ XX | |AE |SCAS (O) ||E2 XX |LOOP XX | |AF |SCAS (M) ||E2 XX |LOOPNE XX | |B0 XX |MOV AL,XX ||E3 XX |JCXZ | |B8 YY XX |MOV AX,XXYY ||E4 XX |IN AL,XX | |C2 YY XX |RET XXYY ||E5 YY XX |IN AL,XXYY | |C3 |RET ||E6 |OUT XX,AL | |C4 00 |LES AX,[BX+SI] ||E7 |OUT XXYY,AL | |C5 00 |LDS AX,[BX+SI] ||E8 YY XX |CALL XXYY | |C6 00 XX |MOV [BX+SI],XX ||E9 YY XX |JMP XXYY | |C7 00 YY XX |MOV [BX+SI],XXYY ||EA YY XX WW VV|JMP XXYY VVWW | |C8 ZZ YY XX |ENTER XXYYZZ ||EB XX |JMP +XX | |CA YY XX |RET XXYY (F) ||EC |IN AL,DX | |CB |RET (F) ||ED |IN AX,DX | |CC |INT 3 ||EE |OUT DX,AL | |CD XX |INT XX ||EF |OUT DX,AX | |CE |INTO ||F0 |LOCK | |CF |IRET ||F2 |REPNE | |D0 00 |ROL [BX+SI],1 (O) ||F2 |REPNZ | |D0 08 |ROR [BX+SI],1 (O) ||F3 |REP | |D0 10 |RCL [BX+SI],1 (O) ||F3 |REPE | |D0 18 |RCR [BX+SI],1 (O) ||F3 |REPZ | |D0 20 |SHL [BX+SI],1 (O) ||F4 |HLT | |D0 28 |SHR [BX+SI],1 (O) ||F5 |CMC | |D0 38 |SAR [BX+SI],1 (O) ||F6 00 XX |TEST [BX+SI],XX | |D1 00 |ROL [BX+SI],1 (M) ||F6 10 |NOT [BX+SI] (O) | |D1 08 |ROR [BX+SI],1 (M) ||F6 18 |NEG [BX+SI] (O) | |D1 10 |RCL [BX+SI],1 (M) ||F6 20 |MUL [BX+SI] (O) | |D1 18 |RCR [BX+SI],1 (M) ||F6 28 |IMULB [BX+SI] | |D1 20 |SHL [BX+SI],1 (M) ||F6 30 |DIVB [BX+SI] | |D1 28 |SHR [BX+SI],1 (M) ||F6 38 |IDVB [BX+SI] | |D1 38 |SAR [BX+SI],1 (M) ||F7 00 YY XX |TEST [BX+SI],XXYY | |D2 00 |ROL [BX+SI],CL (O)||F7 10 |NOT [BX+SI] (M) | |D2 08 |ROR [BX+SI],CL (O)||F7 18 |NEG [BX+SI] (O) | |D2 10 |RCL [BX+SI],CL (O)||F7 20 |MUL [BX+SI] (M) | |D2 18 |RCR [BX+SI],CL (O)||F7 28 |IMULW [BX+SI] | |D2 20 |SHL [BX+SI],CL (O)||F7 30 |DIVW [BX+SI] | |D2 28 |SHR [BX+SI],CL (O)||F7 38 |IDVW [BX+SI] | |D2 38 |SAR [BX+SI],CL (O)||F8 |CLC | |D3 00 |ROL [BX+SI],CL (M)||F9 |STC | |D3 08 |ROR [BX+SI],CL (M)||FA |CLI | |D3 10 |RCL [BX+SI],CL (M)||FB |STI | |D3 18 |RCR [BX+SI],CL (M)||FC |CLD | |D3 20 |SHL [BX+SI],CL (M)||FD |STD | |D3 28 |SHR [BX+SI],CL (M)||FE 08 |DECB [BX+SI] | |--------------|------------------||--------------|------------------| |--------------|------------------| | Code | Mnemonique | ----------------------------------- |FF 08 |DECW [BX+SI] | |FF 10 |CALL [BX+SI] | |FF 18 |CALL [BX+SI] (F) | |FF 20 |JMP [BX+SI] | |FF 28 |JMP [BX+SI] (F) | |FF 30 |PUSH [BX+SI] | |--------------|------------------| (O) = operation sur un octet (M) = operation sur un mot |