Professional Documents
Culture Documents
252
Notation et abrviations
Dans les tableaux d'indicateurs : Indicateurs O D I T S Z A P C ? ? ? * ? *
* indique un bit positionn, i.e. mis 0 ou 1 par l'instruction ? indique un bit indfini suite l'instruction indique que le bit n'est pas affect par l'instruction
Dans les oprandes : reg8 reg16 reg32 accum mem16 mem32 etc. dsigne un des registre de 8 bits : al, bl, cl ou dl dsigne un registre de 16 bits : ax, bx. cx. dx, di, si, bp, ou sp dsigne un registre de 32 bits : eax, ebx, ecx, edx, edi, esi, ebp ou esp. dsigne l'accumulateur qui peut tre al, ax ou eax selon la taille de l'opration. dsigne un emplacement mmoire de 16 bits dsigne un emplacement mmoire de 32 bits
immed8 dsigne une valeur immdiate de 8 bits immed16 dsigne une valeur immdiate de 16 bits immed32 dsigne une valeur immdiate de 32 bits Dans le temps d'excution (cycles) mp mv mode protg mode virtuel
252
Instructions
253
AAA
Ajuste la somme de deux digits BCD non compacts pour crer un rsultat BCD non compact. Aprs une instruction ADD, si la somme dpasse 9, AAA ajoute 6 au rsultat, sinon le laisse inchang. Si cette addition de 6 cause une retenue, AH est incrment de 1 et les indicateurs CF et AF sont mis 1, sinon, CF et AF sont mis 0 et AH est inchang. Dans les deux cas, les bits 4 7 de AL sont mis 0. Indicateurs O D I T S Z A P C ? ? ? * ? * cycles 3
Syntaxe aaa Exemple mov al, 07 mov bl, 05 add al, bl aaa
AAD
Convertit en binaire deux digits BCD non compacts dans AH:AL et place le rsultat dans AL, i.e. remplace AL par AL + (10 * AH), puis met AH 0. Cette instruction prcde habituellement une instruction DIV. Aprs cette division, le quotient sera dans AH et le reste dans AL La version gnralise de cette instruction permet l'ajustement de deux digits non compacts dans n'importe quelle base. Le paramtre immdiat de 8 bits contient la base en question, 0x08, 0x10, etc. Toutefois, cette version n'a pas de mnmonique et doit tre code la main : D5 immed8. Indicateurs O D I T S Z A P C 253
Instructions
254 ? Syntaxe aad Exemple mov ax,0x0704 aad mov bh,09 div bh ; 74 en BCD ; AL = 0x4A = 74 en binaire ; AH = 08 , AL = 02 * * ? * ? Cycles 10
AAM
Effectue la conversion binaire-BCD non compact du nombre situ dans AX. Tout se passe comme si AAM divisait AX par 0x0A et plaait le quotient dans AH et le reste dans AL. Cette instruction est utile aprs une instruction MUL qui a effectu la multiplication binaire de deux valeurs BCD non compact. La version gnralise de cette instruction peut convertir AX en n'importe quelle base. Un paramtre immdiat de 8 bits contient la base dsire. Cette version doit tre code la main : D4 immed8. Indicateurs O D I T S Z A P C ? * * ? * ? cycles 18
254
Instructions
255
AAS
Ajuste la diffrence de deux digits en BCD non compact pour crer un rsultat BCD non compact. Aprs une instruction SUB, si la diffrence dpasse 9, ou si AF = 1, AAS soustrait 6 au rsultat, sinon le laisse inchang. Si cette soustraction de 6 ncessite un emprunt, le registre AH est dcrment de 1 et CF et AF sont mis 1, Sinon, CF et AF sont mis 0 et AH est inchang. Dans les deux cas, les bits 4 7 de AL sont mis 0. Indicateurs O D I T S Z A P C ? ? ? * ? * Cycles 3
Syntaxe aas Exemple mov al, 0x0105 mov bl, 06 sub al, bl aas ; 15 en BCD ; AL = 0x00FF ; AX = 0x0009
ADC
Additionne l'oprande source, l'oprande destination et CF. Le rsultat est inscrit dans l'oprande destination. Cette instruction est utilise pour additionner les portions les plus significatives de nombres s'tendent sur plusieurs mots ou plusieurs doubles mots. Indicateurs O D I T S Z A P C * * * * * * Cycles 1 3 2 Instructions 255
Syntaxe adc reg, reg adc mem, reg adc reg, mem
256 adc reg, immed adc mem, immed Exemple Soit deux nombres de 64 bits dbutant aux adresses A et B. On veut les additionner et placer la rponse dans A. mov eax, A ; double mot de poids faible add eax, B ; somme mov A, eax ; criture du rsultat mov eax, A+4 ; double mot de poids fort adc eax, B+4 ; au cas o il y aurait une retenue de A + B mov A+4, eax ; criture du rsultat 1 3
ADD
Add
Additionne l'oprande source et l'oprande destination et place la somme dans l'oprande destination. Indicateurs O D I T S Z A P C * * * * * * Cycles 1 3 2 1 3
Syntaxe add add add add add reg, reg mem, reg reg, mem reg, immed mem, immed
AND
Logical AND
Effectue le ET logique bit par bit entre les oprandes source et destination, et enregistre le rsultat dans l'oprande destination. Chaque bit du rsultat est 1 si les bits correspondants des oprandes sont tous deux 1. Sinon, le bit du rsultat est 0. 256 Instructions
257
Indicateurs
Syntaxe and and and and and Exemple mov ax, 0x3435 and ax, 0x0F0F reg, reg mem. reg reg, mem reg, immed mem, immed
BOUND
Dtermine si le premier oprande (indice dans un tableau) est l'intrieur des limites du tableau spcifies par le second oprande. L'indice dans le tableau est un entier sign dans un registre. Si le registre est de 16 bits, le second oprande est un emplacement mmoire de 32 bits contenant dans son mot de poids faible la limite infrieure et dans sont mot de poids fort la limite suprieure de l'indice. Si le registre est de 32 bits, le seconde oprande est un emplacement mmoire de 64 bits avec les deux limites exprimes sur 32 bits. Si la valeur du registre est infrieure la limite du bas ou suprieure la limite du haut, il y a dclenchement d'une exception #BR (no 5 dans IVT). Indicateurs O D I T S Z A P C
Cycles 8 - 32 8 - 32
Instructions
257
258 Exemple Supposons que bx est un index dans un tableau de 1000 lments numrots de 1 1000. On place 0x000103E8 l'adresse Limit. Si bx n'est pas entre 1 et 1000 (0x03E8) inclusivement, il y aura interruption. bound bx, Limit
BSF/BSR
Bit Scan
Balaye un oprande mot ou double mot pour trouver le premier bit dont la valeur soit 1. Si un bit 1 est trouv, ZF est mis 0 et le registre destination contient l'indice du premier bit 1 trouv. Si aucun bit 1 n'est trouv, ZF est mis 1 et la destination est indfinie. BSF (Bit Scan Forwerd) balaye du bit 0 au bit le plus significatif. BSR (Bit Scan Reverse) balaye du bit le plus significatif au bit 0. Indicateurs O D I T S Z A P C * Cycles 6-34 6-42 6-35 6-43 7-39 7-71 7-40 7-72
Syntaxe bsf bsf bsf bsf bsr bsr bsr bsr reg16, reg16 reg32, reg32 reg16, mem16 reg32, mem32 reg16, reg16 reg32, reg32 reg16, mem16 reg32, mem32
BSWAP
Byte Swap
chante le premier octet avec le quatrime et le second avec le troisime dans un registre de 32 bits. Cette instruction ne change aucun bit l'intrieur des octets et sert passer du
258
Instructions
259 mode little endian au mode big endian et vice-versa. Pour changer deux octets dans un mot (registre de 16 bits), utiliser plutt l'instruction XCHG. Indicateurs O D I T S Z A P C
Syntaxe bswap Exemple mov eax, 0x12345678 bswap eax ; EAX = 0x78 563412
Cycles 1
BT/BTC/BTR/BTS
Bit Tests
Copie la valeur d'un bit d'un champ de bits vers CF o il pourra tre test au moyen d'une instruction subsquente jc ou jnc. L'oprande source spcifie la position du bit dans le champ. L'oprande destination spcifie le champ de bits. Il peut s'agir d'un registre ou d'un emplacement mmoire. S'il s'agit d'un registre, l'instruction utilise le modulo 16 ou 32 selon la taille du registre. S'il s'agit d'un emplacement mmoire, celle-ci dsigne l'adresse du dbut du champ de bits. L'oprande source spcifie alors un offset sign entre 2-31 et 231-1 s'il est un registre, entre 0 31 s'il est une valeur immdiate. BT copie simplement le bit dans CF. BTC copie le bit dans CF puis le complmente dans la destination. BTR copie le bit dans CF puis le met 0 dans la destination. BTS copie le bit dans CF puis le met 1 dans la destination. Indicateurs Syntaxe bt bt bt bt btc reg16, immed8/32 mem16, immed8/32 reg16, reg16/32 mem16, reg16/32 reg16, immed8/32 Instructions O D I T S Z A P C * Cycles 4 4 4 9 7 259
260 btc btc btc mem16, immed8/32 reg16, reg16/32 mem16, reg16/32 8 7 13
CALL
Call Procedure
Appelle une procdure. L'instruction empile l'adresse de l'instruction suivante, puis saute l'adresse spcifie par l'oprande. Lors d'un appel near, l'offset IP est pouss sur la pile et l'offset de la destination est charg dans IP. Lors d'un appel far, le segment CS est empil et le segment de la destination est charg dans CS. Ensuite, l'offset IP est empil et le nouvel offset est charg dans IP. Une instruction RET subsquente dpilera l'adresse de retour, de sorte que l'excution continuera avec celle qui suit l'appel. Indicateurs O D I T S Z A P C
Syntaxe call call call call call tiquette loign reg mem32 r/m32
Cycles 1 4 2 2 5
260
Instructions
261
CBW
Convertit un octet sign dans AL en un mot sign dans AX en rpliquant le bit de signe de AL dans tous les bits de AH. Indicateurs O D I T S Z A P C
Syntaxe cbw Exemple mov cbw mov cbw al, 0x92 ; AL = 0xFF92 al, 0x84 ; AL = 0x0084
Cycles 3
CDQ
Convertit un double mot sign dans EAX en un quadword sign dans la paire EDX:EAX en rpliquant le bit de signe de EAX dans tous les bits de EDX. Indicateurs O D I T S Z A P C
Cycles 2
Instructions
261
262
CLC
Met le bit CF 0.
Indicateurs
O D I T S Z A P C 0 Cycles 2
Syntaxe clc
CLD
Met le bit DF 0. Toutes les instructions de chane subsquentes procderont vers le haut (des adresses basses aux adresses hautes) en incrmentant les registres d'index appropris. Indicateurs O D I T S Z A P C 0 Cycles 2
Syntaxe cld
CLI
Met IF 0. Quand IF est 0, les interruptions masquables ne sont pas reconnues tant que IF n'est pas remis 1 au moyen de l'instruction STI. En mode protg, CLI ne met IF 0 que si le niveau de privilge de la tche courante est infrieur ou gal la valeur des bits IOPL. Sinon, une erreur de protection gnrale se produit. Indicateurs O D I T S Z A P C 0
262
Instructions
263
Syntaxe cli
Cycles 7
CMC
Syntaxe cmc
CMP
Compare deux oprandes en prvision d'une instruction subsquente de saut conditionnel (jcondition) ou de set conditionnel (setcondition). Cette opration est effectue en soustrayant l'oprande source de l'oprande destination et en positionnant les indicateurs en fonction du rsultat. Indicateurs O D I T S Z A P C * * * * * * Cycles 1 2 2 1 2
Syntaxe cmp cmp cmp cmp cmp reg, reg mem, reg reg, mem reg, immed mem, immed
CMPS/CMPSB/CPMSW/CMPSD
Instructions
Compare String
263
264
Compare l'octet, le mot ou le double mot source dont l'adresse est dans ESI (DS:SI) avec l'octet, le mod ou le double mot destination dont l'adresse est dans EDI (DS:DI). La comparaison est effectue en soustrayant l'lment destination de l'lment source et les indicateurs sont mis jour selon le rsultat (qui n'est pas enregistr). Remarquer que c'est le sens inverse de l'instruction CMP. Aprs la comparaison, EDI et ESI sont ajusts selon la taille des oprandes et l'tat de DF. Ils sont incrments si DF avait pralablement t mis zro avec CLD ou dcrments si DF avait t mis 1 avec STD. Avec la forme CMPS de l'instruction, des oprandes doivent tre fournis pour indiquer la taille des lments de donnes traiter. Une drogation de segment peut tre donne pour la source (mais pas pour la destination). Lorsqu'on utilise l'une des formes CMPSB (octets), CMPSW (mots) ou CMPSD (doubles mots), c'est le choix d'instruction qui dtermine la taille des lments traiter. CMPS et ses variantes sont souvent utilises avec un prfixe de rptition. On utilise REPNE (ou REPNZ) pour trouver le premier accord entre deux chanes et REPE (ou REPZ) pour trouver le premier dsaccord. Avant l'instruction, ECX doit contenir le nombre maximum d'itrations. Aprs REPNE CMPS, ZF est 0 si aucun accord n'a t trouv. Aprs REPE CMPS, ZF est 1 si aucun dsaccord n'a t trouv. ZF est mis 1 ou 0 selon le rsultat de la dernire comparaison, et non selon la valeur de ECX mme si ECX dcrot jusqu' 0. Indicateurs O D I T S Z A P C * * * * * * Cycles 5 5 5 5
Syntaxe cmps cmpsb cmpsw cmpsd src, dest [[src]], [[dest]] [[src]], [[dest]] [[src]], [[dest]]
264
Instructions
265
CMPXCHG
Compare l'oprande destination AL, AX ou EAX. S'il est gal, l'oprande source est copi dans la destination. Sinon, la destination est copie dans AL, AX ou EAX. L'instruction positionne les indicateurs selon le rsultat de la comparaison. Indicateurs O D I T S Z A P C * * * * * * Cycles 6 6
CWD
Convertit le mot sign dans AX en un double mot sign dans la paire DX:AX en rpliquant le bit de signe de AX dans tous les bits de DX. Indicateurs O D I T S Z A P C * * * * * * Cycles 2
CWDE
Instructions
265
266 Convertit un mot sign dans AX en un double mot sign dans EAX en rpliquant le bit de signe de AX dans les 16 bits de poids fort de EAX. Indicateurs O D I T S Z A P C
Cycles 3
DAA
Ajuste le rsultat d'une addition en un nombre BCD compact infrieur 100 (dcimal). L'instruction d'addition prcdente devrait placer sa somme de 8 bits (binaire) dans AL. DAA convertit cette somme binaire en format BCD compact avec le digit dcimal le moins significatif dans les 4 bits de poids faible et le digit le plus significatif dans les 4 bits de poids fort. Si la somme est suprieure 0x99 aprs l'ajustement, CF et AF sont mis 1. Sinon, CF et AF sont mis 0. Si demi-octet de poids faible de AL est suprieur 9 ou que AF = 1, alors DAA ajoute 6 AL et AF = 1 et CF = (CF | retenue de AL+6). Sinon AF = 0. Ensuite, si le demi-octet de poids fort est suprieur 9, alors DAA ajoute 0x60 AL et CF = 1. Sinon, CF = 0. Indicateurs O D I T S Z A P C * * * * * * Cycles 3
Syntaxe daa Exemple mov mov add daa 266 al, 0x35 bl, 0x27 al, bl ; 35 en BCD compact ; 27 en BCD compact ; AL = 0x5C ; AL = 0x62 = 62 en BCD compact Instructions
267
DAS
Ajuste le rsultat d'une soustraction en un nombre BCD compact infrieur 100 (dcimal). L'instruction de soustraction prcdente devrait avoir plac son rsultat de 8 bits dans AL. DAS convertit cette diffrence binaire en format BCD compact avec le digit dcimal le moins significatif dans les 4 bits de poids faible et le digit le plus significatif dans les 4 bits du haut. Si la diffrence est suprieure 99h aprs l'ajustement, CF et AF sont mis 1. Sinon, CF et AF sont mis 0. Si le demi-octet de poids faible de AL est suprieur 9 ou si AF = 1, alors DAS retranche 6 AL et AF = 1 et CF = (CF | retenue de AL - 6). Sinon, AF = 0. Si le demi-octet de poids fort est suprieur 9 ou si CF = 1, alors on retranche 0x60 AL et CF = 1, sinon CF = 0. Indicateurs O D I T S Z A P C ? * * * * * Cycles 3 al, 62 bl, 35 ; 62 en BCD compact ; 35 en BCD compact ; AL = 0x2D ; AL = 0x27 = 27 en BCD compact
DEC
Decrement
Retranche 1 de l'oprande destination. Comme l'oprande est trait comme un entier non sign, l'instruction DEC n'affecte pas CF. Pour dtecter un effet sur CF, utiliser plutt l'instruction SUB.
Instructions
267
268
Indicateurs
O D I T S Z A P C * * * * * Cycles 1 3 1 1
DIV
Unsigned Divide
Effectue la division non signe de deux nombres. Si l'oprande source (le diviseur) est de 8 bits, l'oprande destination implicite (le dividende) est la paire de registres AH:AL. Le quotient va dans AL et le reste dans AH. Si la source est de 16 bits, le dividende implicite est la paire de registres DX:AX. Le quotient va dans AX et le reste dans DX. Si la source est de 32 bits, le dividende implicite est la paire de registres EDX:EAX; le quotient va dans EAX et le reste dans EDX. Indicateurs O D I T S Z A P C ? ? ? ? ? ? Cycles 17 25 41 17 - 25 - 41
Syntaxe div div div div Exemple xor mov mov div dx, dx eax, 0x9564 bx, 0x64 bx reg8 reg16 reg32 mem
268
Instructions
269
ENTER
Cre un bloc de pile pour une procdure qui reoit des paramtres passs par la pile. Quand immed16 est 0, ENTER est quivalent push bp, suivi de mov bp, sp. Le premier oprande de l'instruction ENTER spcifie le nombre d'octets rserver pour les variables locales. Le second oprande spcifie le niveau d'imbrication de la procdure. Le niveau d'imbrication devrait tre 0 pour les langages qui ne supportent pas l'accs aux variables locales des procdures de plus haut niveau (C, Basic et FORTRAN). Voir l'instruction complmentaire LEAVE pour la faon de quitter la procdure. Cette instruction n'est pas conseille car elle est plus lente que les instructions individuelles qu'elle remplace. Indicateurs O D I T S Z A P C
Cycles 11 15 15+2imm8
HLT
Halt
Arrte le CPU jusqu' ce qu'une interruption redmarre l'excution l'instruction suivant HLT. En mode protg, c'est une instruction privilgie. Indicateurs O D I T S Z A P C
Syntaxe hlt
Cycles 12
Instructions
269
270
IDIV
Signed Divide
Effectue la division signe de deux nombres. Si l'oprande source (le diviseur) est de 8 bits, l'oprande destination implicite (le dividende) est la paire de registres AH:AL. Le quotient va dans AL et le reste dans AH. Si la source est de 16 bits, l'oprande destination implicite est la paire de registres DX:AX. Le quotient va dans AX et le reste dans DX. Si la source est de 32 bits, le dividende est EDX:EAX; le quotient va dans EAX et le reste dans EDX. Indicateurs O D I T S Z A P C ? ? ? ? ? ? Cycles 22 30 46 22 - 30 - 46
Syntaxe idiv idiv idiv idiv Exemple mov mov mov idiv dx, 0xFFFF ax, 0x9564 bx, 0x3E8 bx reg8 reg16 reg32 mem
IMUL
Signed Multiply
Effectue la multiplication signe de deux nombres. Il y a trois syntaxes possibles : un oprande, deux oprandes, et trois oprandes. S'il n'y a qu'un oprande de 8 bits, la destination implicite est AL et le produit va dans AX. S'il n'y a qu'un oprande de 16 bits, la destination implicite est AX et le produit va dans la paire de registres DX:AX. S'il n'y a qu'un oprande de 32 bits, le produit va dans la paire EDX:EAX. Les indicateurs CF et OF sont mis 1 si le produit est tendu en signe dans AH pour des oprandes de 8 bits, DX pour des oprandes de 16 bits, ou dans EDX pour des oprandes de 32 bits.
270
Instructions
271 Avec la forme deux oprandes, un registre de 16 ou de 32 bits contient l'un des facteur et sert de destination pour le rsultat; l'autre facteur peut tre soit un registre, soit une donne immdiate de mme taille que le registre destination. Avec la forme trois oprandes, le premier est un registre de 16 ou de 32 bits dans lequel le rsultat sera enregistr, le deuxime est un registre de mme taille ou un oprande mmoire contenant le premier facteur, et le troisime est une valeur immdiate reprsentant l'autre facteur. Dans les deux cas, OF et CF sont mis 1 si le rsultat est trop grand pour entrer dans le registre destination. Comme la moiti de poids faible du produit est la mme pour la multiplication signe et la multiplication non signe, ces syntaxes peuvent tre utilises pour des nombres signs ou non signs. Avec la forme trois oprandes, on peut spcifier les oprandes source et destination. La source peut tre n'importe quel oprande mmoire ou registre gnral de 16 ou de 32 bits. La destination peut tre n'importe quel registre gnral de mme taille. Les indicateur OF et CF sont mis 1 si le produit n'entre pas dans la destination. Indicateurs O D I T S Z A P C * ? ? ? ? * Cycles 11 11 10 10 10
Syntaxe imul imul imul imul imul imul imul imul imul imul imul imul Exemple mov mov imul reg mem reg16, immed reg32, immed reg16, reg16, immed reg32, reg32, immed reg16, mem16, immed reg32, mem32, immed reg16, reg16 reg32, reg32 reg16, mem16 reg32, mem32
10
Instructions
271
272
IN
Copie un octet, un mot ou un double mot d'un port vers AL, AX ou EAX respectivement. L'adresse du port est spcifie dans l'oprande source, qui peut tre DX, ou une valeur immdiate de 8 bits si le numro de port est infrieur 255. En mode protg, une erreur de protection gnrale se produit si IN est utilise alors que le niveau de privilge courant est suprieur la valeur de l'indicateur IOPL. Indicateurs O D I T S Z A P C
INC
Increment
Ajoute 1 l'oprande destination. L'oprande est trait comme un nombre non sign, de sorte que l'instruction INC n'affecte pas la retenue CF. Si on a besoin de dtecter une retenue, on utilise plutt l'instruction ADD. Indicateurs O D I T S Z A P C * * * * * Cycles 1 3
272
Instructions
273
INS/INSB/INSW/INSD
Copie les donnes provenant d'un port spcifi dans l'oprande source vers une chane destination spcifie dans l'oprande destination. L'adresse de la chane doit tre dans EDI (ES:DI) mme si un oprande est fourni. Le port d'entre est spcifi dans DX. chaque itration, EDI est ajust selon la taille de l'oprande et l'tat de DF. EDI est incrment si DF avait t mis zro avec CLD et dcrment si DF avait t mis 1 avec STD. Avec la forme INS de l'instruction, un oprande destination doit tre fourni pour indiquer la taille des lments de donnes transfrer. La drogation de segment n'est pas permise. Lorsque l'une des formes INSB (octets) INSW (mots) ou INSD (doubles mots) est utilise, c'est le choix d'instruction qui dtermine la taille des lments de donnes transfrer. INS et ses variations sont normalement utilises avec le prfixe REP. Avant l'excution de REP, ECX doit contenir ne nombre d'itrations dsir. En mode protg, une erreur gnrale de protection se produit si le niveau de privilge courant est suprieur la valeur de l'indicateur IOPL. Indicateurs O D I T S Z A P C
Cycles 9, mp=6, 24, mv=22 9, mp=6, 24, mv=22 9, mp=6, 24, mv=22 9, mp=6, 24, mv=22
Instructions
273
274
INT
Interrupt
Dclenche un appel un sous-programme de traitement d'interruption logicielle. Un oprande immdiat de 8 bits (0 255) spcifie la procdure d'interruption appeler. L'appel est effectu en indexant le numro d'interruption dans la Table de vecteurs d'interruption (IVT) dbutant l'offset 0 du segment 0. En mode rel, la IVT contient des pointeurs de 4 octets (CS et IP) vers les procdures d'interruption. En mode privilgi, la IVT contient des pointeurs de 8 octets. Quand une interruption est appele en mode rel, les indicateurs, puis CS et IP sont empils, puis les indicateurs de trappe (TF) et d'interruption (IF) sont mis 0. STI pourra tre utilis ultrieurement pour restaurer les interruptions. Pour le retour d'une interruption, on utilise l'instruction IRET. Indicateurs O D I T S Z A P C * * Cycles 16, mp=31, 48
INTO
Interrupt on Overflow
Dclenche un appel au sous-programme de traitement de l'interruption logicielle 4 si OF est 1. Le comportement par dfaut de MS-DOS pour l'interruption 4 est de retourner sans rien faire. Pour que INTO fonctionne correctement, il faut donc dfinir une procdure d'interruption pour l'interruption 4. Indicateurs O D I T S Z A P C * * Cycles 13, mp=27, 44
Syntaxe into
274
Instructions
275
IRET/IRETD
Interrupt Return
Retourne le contrle d'une procdure d'interruption au code interrompu. En mode rel, l'instruction IRET dpile IP, CS et les indicateurs (dans cet ordre) et poursuit l'excution. Sur le Pentium, on doit utiliser IRETD, pour dpiler un pointeur d'instruction de 32 bits quand on retourne d'une interruption appele par un segment de 32 bits. Le suffixe F empche que du code d'pilogue soit gnr quand on termine un bloc PROC. On l'utilise pour terminer des procdures de traitement d'interruption. Indicateurs O D I T S Z A P C * * * * * * * * * Cycles 8, 10, mp=27 10, mp=27
Jcondition
Jump Conditionally
Continue l'excution l'tiquette spcifie si la condition donne par les indicateurs est vraie. Si la condition est fausse, il n'y a pas de saut et l'excution continue l'instruction suivante. Les sauts short sont de -128 127 octets par rapport au dbut de l'instruction suivante, et les sauts near de 32768 32767. L'assembleur gnre le plus petit saut possible moins qu'on spcifie explicitement la taille du saut. Quand le processeur est en mode mmoire plate, les sauts courts sont de 128 +127 octets, et les sauts near sont de 2 +2 gigaoctets. Il n'y a pas de sauts far. Indicateurs O D I T S Z A P C
Cycles 1
Instructions
275
276
JCXZ/JECXZ
Jump if CX is Zero
JCXZ continue l'excution du programme l'tiquette spcifie si CX = 0. On utilise JECXZ pour effectuer un saut si ECX = 0. Si CX ou ECX n'est pas 0, l'excution continue l'instruction suivante. L'tiquette doit tre moins de 128 +127 octets de l'instruction qui suit le saut. Indicateurs O D I T S Z A P C
Cycles 6, 5
JMP
Jump Unconditionally
Continue l'excution du programme l'tiquette spcifie par l'oprande destination. Les sauts sont short (entre 128 et 127 octets par rapport l'instruction suivant le saut), near (entre 32768 et 32767 octets) ou far (dans un segment de code diffrent). moins que la distance ne soit spcifie explicitement, l'assembleur choisit le saut le plus petit possible. Avec des sauts short et near, l'oprande spcifie une nouvelle adresse IP. Avec les sauts far, l'oprande spcifie de nouvelles adresses IP et CS. Les diffrentes conditions sont prsentes en annexe. Indicateurs O D I T S Z A P C
Syntaxe jmp jmp jmp jmp jmp tiquette reg16 reg32 mem16 mem32
Cycles 1
276
Instructions
LAHF
Transfre les bits 0 7 du registre FLAGS dans AH. Ceci comprend SF, ZF, AF, PF et CF mais pas TF, IF ni OF. Indicateurs O D I T S Z A P C
Syntaxe lahf
Cycles 2
LAR
Copie les droits d'accs d'un slecteur dans le registre spcifi. L'oprande source doit tre une oprande registre ou mmoire contenant un slecteur. L'oprande destination doit tre un registre qui recevra les droits d'accs si le slecteur est valide et accessible avec le niveau de privilge courant. Indicateurs O D I T S Z A P C * Cycles 8
Syntaxe lar lar lar lar reg16, reg16 reg32, reg32 reg16, mem16 reg32, mem32
Instructions
277
278
LDS/LES/LFS/LGS/LSS
Lit et enregistre le far pointer spcifi par l'oprande mmoire source. L'instruction place la valeur de segment du pointeur dans DS, ES, FS, GS ou SS, dpendant de l'instruction. Ensuite elle place la valeur de l'offset du pointeur dans l'oprande destination. Indicateurs O D I T S Z A P C
Syntaxe lds les lfs lgs lss reg, mem reg, mem reg, mem reg, mem reg, mem
Cycles 4 4 4 4 4, mp=8
LEA
Calcule l'adresse effective (offset) de l'oprande mmoire source et enregistre le rsultat dans le registre destination. Si l'oprande source est une adresse mmoire directe, l'assembleur code l'instruction comme si c'tait la forme plus performante MOV reg, immed (quivalente MOV reg, OFFSET mem). Indicateurs O D I T S Z A P C
Cycles 1
278
Instructions
279
LEAVE
Met fin au bloc de pile d'une procdure. LEAVE renverse l'action d'une instruction ENTER prcdente en restaurant SP et BP aux valeurs qu'ils avaient avant que le bloc de pile de la procdure soit initialis. LEAVE est quivalent mov sp, bp suivi de pop bp. Cette instruction est dconseille parce qu'elle est plus lente que les intructions qu'elle remplace. Indicateurs O D I T S Z A P C
Syntaxe leave
Cycles 3
LOCK
Interdit l'accs du bus d'autres processeurs durant l'excution de la prochaine instruction. C'est un prfixe. Elle doit prcder une instruction qui accde une rgion de la mmoire laquelle un autre processeur pourrait essayer d'accder en mme temps. Indicateurs O D I T S Z A P C
Cycles 1
280 ajust selon la taille de l'oprande et l'tat de DF. ESI est incrment si DF avait t mis 0 avec CLD ou dcrment si DF avait t mis 1 avec STD. Avec la forme LODS de l'instruction, un oprande doit tre fourni pour indiquer la taille des lments de donnes traiter. Une drogation de segment peut tre fournie. Lorsque l'une des formes LODSB (octets), LODSW (mots) ou LODSB (doubles mots) est utilise, c'est le choix d'instruction qui dtermine la taille des lments de donnes traiter, et si l'lment sera charg dans AL, AX ou EAX. LODS et ses variations ne sont pas utilises avec un prfixe de rptition, car il n'est pas utile de charger des donnes mmoire un mme registre. Indicateurs O D I T S Z A P C
Cycles 2 2 2 2
LOOP/LOOPW/LOOPD Loop
Boucle de faon rptitive vers une tiquette donne. LOOP dcrmente ECX en mode 32 bits ou CX en mode 16 bits (sans changer aucun indicateur) et si le rsultat n'est pas 0, continue l'excution l'adresse spcifie par l'oprande. On peut utiliser LOOPW pour forcer le test de CX ou LOOPD pour forcer celui de ECX. Quand CX est 0 aprs avoir t dcrment, l'excution continue l'instruction suivante. L'oprande doit spcifier une tiquette short (entre 128 et +127) partir de l'instruction suivant le LOOP. Cette instruction est dconseille parce qu'elle est plus lente que les instructions qu'elle remplace. Indicateurs O D I T S Z A P C
280
Instructions
Syntaxe loope loopew looped loopz loopzw loopzd etiquette etiquette etiquette etiquette etiquette etiquette
Cycles 7, 8
LSL
Charge la limite de segment d'un slecteur dans un registre spcifi. L'oprande source doit tre un oprande registre ou mmoire contenant un slecteur. L'oprande destination doit tre un registre qui recevra la limite de segment si le slecteur est valide et visible au
Instructions
281
282 niveau de privilge courant. L'indicateur ZF est mis 1 si la limite de segment est transfre, et mis zro sinon. Indicateurs O D I T S Z A P C
Syntaxe lsl lsl lsl lsl reg16, reg16 reg32, reg32 reg16, mem16 reg32, mem32
Cycles 8
MOV
Move Data
Copie la valeur de l'oprande source dans l'oprande destination. Si l'oprande destination est SS, les interruptions sont interdites jusqu' l'excution de l'instruction. Indicateurs O D I T S Z A P C
Syntaxe mov mov mov mov mov mov mov mov mov reg, reg mem, reg reg, mem mem, immed reg, immed segreg, reg16 segreg, mem16 reg16, segreg mem16, segreg
Cycles 1 1 1 1 1 2, 3 2, 3 1 1
282
Instructions
283
MOV
Copie une valeur d'un registre spcial de ou vers un registre gnral de 32 bits. Les registres spciaux incluent les registres de contrle CR0, CR2 et CR3, les registres de dboguage DR0, DR1, DR2, DR3, DR6 et DR7, et les registres de test TR3, TR4, TR5, TR6 et TR7. Indicateurs O D I T S Z A P C ? ? ? ? ? ? Cycles 22 12 21, 46 14 4 11, 12 11, 12 11, 12 11, 12
Syntaxe mov mov mov mov mov mov mov mov mov eax, cr0 eax, cr2 eax, cr3 eax, cr4 controlreg, reg32 reg32, debugreg debugreg, reg32 reg32, testreg testreg, reg32
MOVS/MOVSB/MOVSW/MOVSD
Copie une chane d'une partie de la mmoire une autre. EDI (DS:SI) doit pointer vers la chane source et EDI (ES:DI) vers l'adresse destination, mme si des oprandes sont fournis. Pour chaque lment dplac, EDI et ESI sont ajusts selon ta taille des oprandes et l'tat de DF. Ils sont incrments si DF avait t mis 0 avec CLD auparavant, ou dcrments s'il avait t mis 1 avec STD. Avec la forme MOVS de l'instruction, des oprandes doivent tre fournis pour indiquer la taille des lments de donnes traiter. Une drogation de segment peut tre donne pour l'oprande source mais pas pour la destination. Lorsqu'on utilise l'une des formes MOVSB (octets), MOVW (mots) ou MOVSD (doubles mots), c'est le choix d'instruction qui dtermine la taille des lments de donnes traiter.
Instructions
283
284 MOVS et ses variantes sont normalement utilises avec le prfixe REP. Indicateurs O D I T S Z A P C
Cycles 4 4
MOVSX
Copie et tend en signe la valeur de l'oprande source et place le rsultat dans le registre destination. MOVSX est utilise pour copier un oprande source sign de 8 bits ou 16 bits dans un registre plus grand de 16 bits ou de 32 bits. Indicateurs O D I T S Z A P C
Syntaxe movsx movxs Exemple mov al, 0x9E movsx bx, al ; BX = 0xFF9E reg, reg reg, mem
Cycles 3 3
284
Instructions
285
MOVZX
Copie et tend en zros la valeur de l'oprande source et place le rsultat dans le registre destination. MOVZX est utilise pour copier un oprande source non sign de 8 bits ou 16 bits dans un registre plus grand de 16 bits ou de 32 bits. Indicateurs O D I T S Z A P C
Syntaxe movzx movzx Exemple mov movzx al, 0x9E bl, al ; BL = 0x009E reg, reg reg, mem
Cycles 3 3
MUL
Unsigned Multiply
Multiplie l'oprande destination implicite par un oprande source spcifi. Les deux oprandes sont traits comme des nombres non signs. Si un seul oprande de 8 bits est donn, la destination implicite est AL et le produit va dans AX. Si un seul oprande de 16 bits est donn, la destination implicite est AX et le produit va dans la paire de registres DX:AX. Si l'oprande est de 32 bits, le produit va dans la paire de registres EDX:EAX. CF et OF sont mis 1 si AH n'est par 0 pour des oprandes de 8 bits ou si DX n'est pas 0 pour des oprandes de 16 bits. Indicateurs O D I T S Z A P C * ? ? ? ? * Cycles 8, 11, 10
Instructions
285
286 mov mov mul eax, 0x9FFFFFFF ebx, 3 ebx ; EDX = 0x00000001; EAX = 0xDFFFFFFD
NEG
Remplace l'oprande par son complment 2. NEG effectue cette opration en soustrayant l'oprande de 0. Si l'oprande est 0, l'indicateur de retenue est mis 0, sinon, il est mis 1. Si l'oprande contient la valeur ngative la plus grande possible (-128 pour 8 bits ou 32768 pour 16 bits), la valeur ne change pas, mais les bits de retenue et de dpassement de capacit sont mis 1. Indicateurs O D I T S Z A P C * * * * * * Cycles 1 3
NOP
No Operation
N'effectue aucune opration. NOP peut tre utilise pour raliser des dlais ou l'alignement des instructions. Indicateurs O D I T S Z A P C
Syntaxe nop
Cycles 1
286
Instructions
287
NOT
Inverse chaque bit de l'oprande en mettant 0 les bits qui sont 1 et 1 les bits qui sont 0. Indicateurs O D I T S Z A P C
Cycles 1 3
OR
Inclusive OR
Effectue l'opration OU bit par bit entre les oprandes source et destination et enregistre le rsultat dans l'oprande destination. Pour chaque position de bit dans les oprandes, si l'un ou l'autre des deux bits est 1, le bit correspondant du rsultat est 1. Sinon, le bit correspondant du rsultat est mis 0. Indicateurs O D I T S Z A P C 0 * * ? * 0 Cycles 1 3 2 1 3
Syntaxe or or or or or Exemple mov ax, 0x0405 or ax,0x3030 ; AX = 45 en BCD non compact ; AX = 45 en ASCII reg, reg mem, reg reg, mem reg, immed mem, immed
Instructions
287
288
OUT
Output to Port
Copie un octet, un mot ou un double mot de l'accumulateur vers un port. L'adresse du port est spcifie par l'oprande destination, qui peut tre DX ou une constante de 8 bits. Indicateurs O D I T S Z A P C
288
Instructions
289 Syntaxe outs dx, src outsb outsw outsd Cycles 13, pm=10, 27, vm=24
POP
Pop
Dpile le sommet de la pile dans l'oprande destination. La valeur ESP (SS:SP) est copie dans l'oprande destination et ESP est incrment de 2 ou 4 selon la taille de l'oprande. L'oprande destination peut tre un emplacement mmoire, un registre gnral ou un registre de segment autre que CS. Utiliser RET pour dpiler CS. Indicateurs O D I T S Z A P C
Cycles 1 3
POPA/POPAD
Pop All
Dpile des 16 octets au sommet de la pile dans les 8 registres gnraux. Les registres sont dpils dans l'ordre suivant :DI, SI, BP, SP, BX, DX, CX, AX. Les valeurs pour le registre SO est supprime plutt que copie dans SP. POPA dpile toujours des registres de 16 bits. Utiliser POPAD pour dpiler des registres de 32 bits. Indicateurs O D I T S Z A P C
Instructions
289
POPF/POPFD
Pop Flags
Dpile la valeur situe au sommet de la pile dans le registre d'indicateurs. POPF dpile toujours dans FLAGS. Utiliser POPFD pour dpiler dans le registre de 32 bits EFLAGS.. Indicateurs O D I T S Z A P C * * * * * * * * * Cycles 6, pm=4
PUSH/PUSHW/PUSHD
Push
Empile l'oprande source sur la pile. SP est dcrment de 2 ou de 4 selon la dimension de l'oprande, et la valeur de la source est copie l'adresse ESP (SS:SP). L'oprande peut tre une adresse mmoire, un registre gnral ou un registre de segment. Il peut aussi tre une constante. PUSH SP sauve la valeur de SP aprs l'empilement. PUSHW et PUSHD empilent respectivement un mot et un double mot. Indicateurs O D I T S Z A P C
Cycles 1
290
Instructions
291
PUSHA/PUSHAD
Push All
Empile les huit registres gnraux. Ces derniers sont empils dans l'ordre suivant : AX, CX, DX, BX, SP, BP, SI, DI. La valeur empile pour SP est la valeur avant l'instruction PUSHA empile toujours des registres de 16 bits. Utiliser PUSHAD pour empiler des registres de 32 bits. Indicateurs O D I T S Z A P C
Cycles 5
PUSHF/PUSHFD
Push Flags
Empile le registre d'indicateurs. PUSHF empile toujours le registre d'indicateurs de 16 bits FLAGS. Utiliser PUSHFD pour empiler le registre de 32 bits EFLAGS. Indicateurs O D I T S Z A P C
Instructions
291
292
Cycles 4, mp=3
RCL/RCR/ROL/ROR
Rotate
Effectue une rotation des bits de l'oprande destination du nombre de bits spcifi dans l'oprande source. RCL et ROL font une rotation vers la gauche; RCR et ROR, vers la droite. ROL et ROR font une rotation du nombre de bits dans l'oprande. Pour chaque rotation, le bit de gauche ou le bit de droite est copi dans CF en plus d'effectuer une rotation. RCL et RCE font une rotation incluant CF. CF devient ainsi une extension de l'oprande, de sorte qu'une rotation sur 9 bits est effectue pour des oprandes de 8 bits, de 17 bits pour des oprandes de 16 bits, et de 33 bits pour des oprandes de 32 bits. L'oprande source peut tre CL ou une constante de 8 bits. Les nombres de rotations suprieurs 31 sont tronqus modulo 32. OF n'est modifi que par les rotations sur un seul bit et vaut MSB(dest) XOR CF. Pour des rotations de plusieurs bits, OF est indfini. Indicateurs O D I T S Z A P C * *
ROL CF RCL
CF
292
Instructions
293 ROR CF RCR CF Syntaxe rol ror rcl rcr rol ror rcl rcr rol ror rcl rcr rol ror rcl rcr rol ror rcl rcr rol ror rcl rcr reg, 1 reg, 1 reg, 1 reg, 1 mem, 1 mem, 1 mem, 1 mem, 1 reg, cl reg, cl reg, cl reg, cl mem, cl mem, cl mem, cl mem, cl reg, immed8 reg, immed8 reg, immed8 reg, immed8 mem, immed8 mem, immed8 mem, immed8 mem, immed8 Instructions Cycles 1 1 1 1 3 3 3 3 4 4 7-24 7-24 4 4 9-26 9-26 1 1 8-25 8-25 3 3 10-27 10-27 293
294
Exemples mov rol clc mov rcl eax, 0x8FFFFFFF eax, 1 ; EAX = 0x1FFFFFFF; CF = 1; OF = 1; eax, 0x8FFFFFFF eax, 1 ; EAX = 0x1FFFFFFE; CF = 1; OF = 1;
RDTSC
Copie le contenu du registre de 64 bits TSC (Time Stamp Counter) dans la paire de registres EDS:EAX. Ce registre est incrment chaque cycle d'horloge Indicateurs O D I T S Z A P C
Syntaxe rdtsc
Cycles 6, 11
REP
Repeat String
Rpte une instruction de chane le nombre de fois indiqu par CX. CX est d'abord compar 0; s'il est 0, l'excution passe l'instruction suivante. Sinon, CX est dcrment, l'instruction de chane est excute et la boucle continue. REP est utilise avec MOVS, STOS, INS et OUTS. Indicateurs O D I T S Z A P C
Cycles 6, 13n
294
Instructions
295 rep movsw rep movsd rep stos dest rep stosb rep stosw rep stosw rep stosd rep ins dest, dx rep insb rep insw rep insd rep outs dx, src rep outsb rep outsd rep outsw rep outsd 6, 9+3n
Syntaxe repe cmps src, dest repe cmpsb repe cmpsw repe cmpsd
Instructions
295
296 repe scas dest repe scasb repz scasw repe scasw repe scasd repne cmps src, dest repne cmpsb repne cmpsw repne cmpsd repne scas dest repne scasb repne scasw repne scasd 7, 9+4n
7, 9+4n
7, 9+4n
RET/RETN/RETF
Retourne d'une procdure en continuant l'excution l'adresse dpile du sommet de la pile. Une valeur immdiate peut tre fournie pour indiquer un nombre d'octets supplmentaires dpiler. Cette valeur est sert ajuster la pile pour des arguments empils avant l'appel de la procdure. Indicateurs O D I T S Z A P C
ROL/ROR
Rotate
296
Instructions
SAHF
Copie AH dans les bits 0 7 du registre EFLAGS. Copie SF, ZF, AF, PF et CF mais pas OF, DF, IF ni TF. Indicateurs O D I T S Z A P C * * * * * Cycles 2
Syntaxe sahf
SAL/SAR
Voir SHL / SHR / SAL/ SAR.
Shift
SBB
Ajoute CF l'oprande source, puis soustrait cette valeur de l'oprande destination. Le rsultat est enregistr dans l'oprande destination. SBB est utilise pour soustraire la partie la moins significative de nombres de prcision multiple. Indicateurs O D I T S Z A P C * * * * * * Cycles 1 3 2 1
Syntaxe sbb sbb sbb sbb reg, reg mem, reg reg, mem reg, immed
Instructions
297
298 sbb Exemple Soit deux nombres de 64 bits dbutant aux adresses A et B. On veut les soustraire B de A et placer la rponse dans A. mov eax, A ; double mot de poids faible sub eax, B ; diffrence mov A, eax ; criture du rsultat mov eax, A+4 ; double mot de poids fort sbb eax, B+4 ; au cas o il y aurait un emprunt de A - B mov A+4, eax ; criture du rsultat mem, immed 3
SCAS/SCASB/SCASW/SCASD
Parcourt une chane dont l'adresse est dans EDI (ES:DI) pour trouver la valeur spcifie dans AL, AX ou EAX. Pour chaque lment, l'lment destination est soustrait de la valeur de l'accumulateur et les indicateurs sont positionns en fonction du rsultat, mais ce dernier n'est pas enregistr. EDI est ajust selon la taille des oprandes et l'tat de l'indicateur de direction DF. ESI est incrment si DF avait t mis zro avec CLD, ou dcrment si DF avait t mis 1 avec STD. Avec la forme SCAS de l'instruction, un oprande doit tre fourni pour indiquer la taille des lments de donnes traiter. La drogation de segment n'est pas permise. Lorsque l'une des formes SCASB (octets), SCASW (mots) ou SCASD (doubles mots) est utilise, c'est le choix d'instruction qui dtermine la taille des lments de donnes traiter, et si l'lment recherch est dans AL, AX ou EAX. SCAS et ses variantes sont normalement utilises avec un prfixe de rptition. REPNE (ou REPNZ) est utilis pour trouver le premier lment d'une chane qui corresponde la valeur de l'accumulateur. REPE (ou REPZ) est utilise pour trouver le premier dsaccord. Avant la recherche, ECX (CX en mode 16 bits) doit contenir le nombre maximum d'itrations dsir. Aprs l'instruction REPNE SCAS, ZF est 0 si la chane ne contient pas la valeur spcifie. Aprs un REPE SCAS, ZF est 1 si la chane ne contient rien d'autre que la valeur spcifie. la fin de l'instruction, EDI (ES:DI) pointe sur l'lment qui suit (si DF = 0) ou qui prcde (si DF = 1) l'accord ou le dsaccord. Si ECX atteint 0, EDI pointe l'lment qui suit ou prcde la dernire comparaison. L'indicateur de zro reflte le rsultat de la dernire comparaison, et non la valeur de ECX.
298
Instructions
SETcondition
Set Conditionally
Met l'octet spcifi 1 (0xFF) si la condition est vraie, ou 0 (0x00) si la condition est fausse. Indicateurs O D I T S Z A P C
Cycles 1 2
SGDT/SIDT/SLDT
Copie un registre de table de descripteurs dans un oprande mmoire spcifi. SGDT enregistre le registre de Table Globale de Descripteurs (GDTR); SIDT, le registre de Table de Vecteurs d'Interruption (IVT), et SLDT, le registre de Table Locale de Descripteurs. Ces instructions ne sont utiles qu'en mode privilgi. Indicateurs O D I T S Z A P C
Instructions
299
300 Syntaxe sgdt sidt sldt sldt mem48 mem48 reg16 mem16 Cycles 4 4 2 2
SHL/SHR/SAL/SAR
Shift
Dcale les bits de l'oprande destination le nombre de fois spcifi par l'oprande source. SAL et SHL dcalent vers la gauche, SAR et SHR vers la droite. Avec SHL, SAL et SHR, le bit dcal la fin de l'oprande est copi dans CF et le bit le plus gauche ou le plus droite libr par le dcalage est remplac par 0. Avec SAR, le bit dcal la fin de l'oprande est copi dans CF et le bit le plus gauche libr par le dcalage conserve sa valeur antrieure, prservant ainsi le signe de l'oprande. SAL et SHL sont synonymes. Le nombre de dcalages peut tre dans CL ou une valeur immdiate de 8 bits. Les nombres de dcalages suprieurs 31 sont tronqus modulo-32. Le bit OF n'est affect que pour un dcalage de 1 bit. Pour des dcalages multiples, OF est indfini. Indicateurs O D I T S Z A P C * * * ? * *
300
Instructions
301
Syntaxe sar sal shr sal sar sal shl shr sar sal shl shr sar sal shl shr sar sal shl shr sar sal shl shr Exemples mov sar mov sar mov shr ax, 0x1234 ax, 2 bx, 0x9106 bx, 3 cx, 0x9106 cx, 3 ; AX = 0x048D ; BX = 0xF220 ; CX = 0x1220 reg, 1 reg, 1 reg, 1 reg, 1 mem, 1 mem, 1 mem, 1 mem, 1 reg, cl reg, cl reg, cl reg, cl mem, cl mem, cl mem. cl mem, cl reg, immed8 reg, immed8 reg, immed8 reg, immed8 mem, immed8 reg, immed8 reg, immed8 reg, immed8
Cycles 1
Instructions
301
302
SHLD/SHRD
Dcale les bits de l'oprande source vers l'oprande destination. Le nombre de bits de dcalage est spcifi par le troisime oprande. SHLD dcale le premier oprande vers la gauche du nombre de positions spcifi dans le troisime oprande. Les positions libres par le dcalage sont remplies par les bits les plus significatifs du deuxime oprande. SHRD dcale le premier oprande vers la droite du nombre de positions spcifi dans le troisime oprande. Les positions libres par le dcalage sont remplies par les bits les moins significatifs du deuxime oprande. Le nombre de dcalages peut tre dans CL ou une valeur immdiate de 8 bits. Si un nombre de dcalages suprieur 31 est fourni, il est tronqu modulo 32. Indicateurs O D I T S Z A P C ? * * ? * * Cycles 4 4
Syntaxe shld shld shld shld shrd shrd shrd shrd shld shld shld shld shrd shrd 302 reg16, reg16, immed8 reg32, reg32, immed8 mem16, reg16, immed8 mem32, reg32, immed8 reg16, reg16, immed8 reg32, reg32, immed8 mem16, reg16, immed8 mem32, reg32, immed8 reg16, reg16, cl reg32, reg32, cl mem16, reg16, cl mem32, reg32, cl reg16, reg16, cl reg32, reg32, cl
4 4
4 5
Instructions
STC
Syntaxe stc
STD
Met l'indicateur de direction DF 1. Toutes les instructions de chane subsquentes procderont vers le bas, i.e. ESI et/ou EDI seront dcrments. Indicateurs O D I T S Z A P C 1 Cycles 2
Syntaxe std
STI
Met l'indicateur d'interruption IF 1, ce qui autorise les interruptions matrielles. Si les interruptions avaient t interdites par une instruction CLI antrieure, les interruptions en attente ne seront pas traites immdiatement; mais seulement aprs l'instruction qui suit STI.
Instructions
303
STOS/STOSB/STOSW/STOSD
Copie la valeur de AL, AX ou EAX dans un emplacement mmoire dont l'adresse est contenue dans EDI (ES:DI). Ensuite, EDI est ajust selon la taille de l'lment transfr et l'tat de l'indicateur de direction. EDI est incrment si DF avait t mis 0 avec CLD ou dcrment si DF avait t mis 1 avec STD. Avec la forme STOS de l'instruction, un oprande doit tre fourni pour indiquer la taille des lments copier. La drogation de segment n'est pas permise. Lorsque l'une des formes STOSB (octets), STOSW (mots) ou STOSD (doubles mots) est utilise, c'est le choix d'instruction qui dtermine la taille des lments de donnes traiter et si l'lment provient de AL, AX ou EAX. STOS et ses variantes sont souvent utilises avec le prfixe REP pour remplir une chane avec une mme valeur. Avant d'utiliser l'instruction REP, ECX doit contenir la nombre d'itrations dsir. Indicateurs O D I T S Z A P C
Cycles 3
304
Instructions
305
SUB
Subtract
Soustrait l'oprande source de l'oprande destination et enregistre le rsultat dans l'oprande destination.. Indicateurs O D I T S Z A P C * * * * * * Cycles 1 3 2 1 3
Syntaxe sub sub sub sub sub reg, reg mem, reg reg, mem reg, immed mem, immed
TEST
Logical Compare
TEST effectue une opration AND bit par bit entre les deux oprandes mais n'enregistre pas le rsultat. Les indicateurs sont modifis en consquence. Cette instruction est utilise pour positionner les indicateurs en vue d'une instruction conditionnelle subsquente telle que jcondition ou setcondition. Indicateurs O D I T S Z A P C 0 * * ? * 0 Cycles 1 2 2 1 2
Syntaxe test test test test test Exemple test ax. ax ; ZF = 1 si AX = 0, sinon ZF = 0 reg, reg mem, reg reg, mem reg, immed mem, immed
Instructions
305
306
VERR/VERW
Dtermine si le slecteur de segment spcifi est atteignable et si on peut y lire (VERR) ou y crire (VERW) avec le niveau de privilge courant. Si oui, Z = 1, sinon, Z = 0. Indicateurs O D I T S Z A P C * Cycles 7 7 7 7
WAIT
Wait
Suspend l'excution du processeur jusqu' ce que ce dernier reoive via la broche BUSY# l'indication que le coprocesseur a termin une opration simultane. Cette instruction tait utilise avec le coprocesseur 80x87. Indicateurs O D I T S Z A P C
Syntaxe wait
Cycles 1
XADD
Additionne les oprandes source et destination, et place la somme dans la destination. En mme temps, la valeur originale de la destination est place dans la source. Les indicateurs sont ajusts selon le rsultat de l'addition.
306
Instructions
307
Indicateurs
O D I T S Z A P C * * * * * * Cycles 3 4
Syntaxe xadd mem, reg xadd reg, reg Exemple mov mov xadd al, 0x08 bl, 0x03 al, bl
; AL = 0x0B, BL = 0x08
XCHG
Exchange
Syntaxe xchg reg, reg xchg reg, mem xchg mem, reg
Cycles 3 3 3
XLAT/XLATB
Translate
Change la valeur de AL d'un index de table en entre dans la table. Avant l'instruction, AL est un index non sign dans une table dont l'adresse est dans EBX (DS:BX). Aprs l'instruction, AL contient la valeur de la table l'index spcifi. Aucun oprande n'est ncessaire, mais on peut en fournir un titre de documentation. XLATB est un synonyme de XLAT.
Instructions
307
308
Indicateurs
O D I T S Z A P C
Cycles 4
Exemple Table db '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' lea ebx, Table mov al, 0x0E xlatb ; AL = 'E'; conversion binaire-ASCII
XOR
Exclusive OR
Effectue le ou disjonctif bit par bit entre l'oprande source et l'oprande destination et enregistre le rsultat dans l'oprande destination. Pour chaque position de bit des oprandes, si les deux bits sont diffrents, le bit correspondant du rsultat est 1. Sinon, le bit correspondant du rsultat est 1. Indicateurs O D I T S Z A P C 0 * * ? * 0 Cycles 1 3 2 1 3 ; EAX = 0x00000000 ; AL = NOT AL
Syntaxe xor xor xor xor xor Exemple xor xor eax, eax al, 0xFF reg, reg mem, reg reg, mem reg, immed mem, immed
308
Instructions
309
Instructions
309
310
6. Mots rservs
310
Instructions
311 Les identificateurs que vous utiliserez dans vos programmes ne peuvent pas figurer parmi les mots rservs.
Les directives
ALIGN, .ALPHA, ASSUME, BYTE, .CODE, COMM, COMMENT, .CONST, .CREF, .DATA, .DATA?, DB, DD, DF, DOSSEG, DQ, DT, DW, DWORD, ELSE, .ELSE, END, ENDIF, ENDM, ENDP, ENDS, .EQU, ERRnn, EVEN, EXITM, EXTRN, EXTERN, .FARDATA, .FARDATA?, FWORD, GROUP, IF, .IF, IF1, IF2, IFB, IFDEF, IFDIF, IFE, IFDN, IFNB, IFNDEF, INCLUDE, INCLUDELIB, IRP, IRPC, LABEL, .LALL, .LFCOND, .LIST, LOCAL, MACRO, .MODEL, NAME, ORG, &OUT, PAGE, PROC, PUBLIC, PURGE, QWORD, .RADIX, RECORD, REOT, .SALL, SEGMENT, .SEQ, .SFCOND, .STACK, STRUC, STRUCT, SUBTTL, .TFCOND, TITLE, TWORD, UNION, WORD, .XALL, .XCREF, .XLIST
Les oprateurs
AND, BYTE, COMMENT, CON, DUP, EQ, FAR, GE, GT, HIGH, LE, LENGTH, LINE, LOLW, LT, MASK, MOD, NE, NEAR, NOT, NOTHING, OFFSET, OR, PTR, SEG, SHL, SHORT, SHR, SIZE, SIZEOF, STACK, THIS, TYPE, WHILE, WIDTH, WORD, XOR.
Instructions
311