Vous êtes sur la page 1sur 61

5.

Instructions de base du Pentium

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

ASCII Adjust After Addition

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

; AL = 0x0C ; AX = 0x0102 = 12 en BCD non compact

AAD

ASCII Adjust Before Division

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

ASCII Adjust After Multiply

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

Syntaxe aam Exemple mov al, 05 mov dl, 07 mul dl aam

; AX = 0x0023 ; AX = 0x0305 = 35 en BCD

254

Instructions

255

AAS

ASCII Adjust After Subtraction

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

Add with Carry

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

O D I T S Z A P C 0 * * ? * 0 Cycles 1 3 2 1 3 ; 45 en ASCII ; conversion ASCII-BCD ; AX = 0x0405 = 45 en BCD non compact

Syntaxe and and and and and Exemple mov ax, 0x3435 and ax, 0x0F0F reg, reg mem. reg reg, mem reg, immed mem, immed

BOUND

Check Array Bounds

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

Syntaxe bound reg16, mem32 bound reg32, mem64

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

idem pour btr et bts Exemple mov bt ax, 0x2467 ax, 3 ; CF = 0

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

Convert Byte to Word

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

Convert Double to Quad

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

Syntaxe cdq Exemple mov eax, 0x92070A25 cdq ; EDX = 0xFFFFFFFF

Cycles 2

Instructions

261

262

CLC
Met le bit CF 0.

Clear Carry Flag

Indicateurs

O D I T S Z A P C 0 Cycles 2

Syntaxe clc

CLD

Clear Direction Flag

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

Clear Interrupt Flag

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

Complement Carry Flag

Complmente l'indicateur de retenue CF. Indicateurs O D I T S Z A P C * Cycles 2

Syntaxe cmc

CMP

Compare Two Operands

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 and Exchange

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

Syntaxe cmpxchg cmpxchg mem, reg reg, reg

CWD

Convert Word to Double

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

Syntaxe cwd Exemple mov cwd ax, 0xAF04 ; DX = 0xFFFF

CWDE

Convert Word to Extended Double

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

Syntaxe cwde Exemple mov ax, 0x9ABC cwde ; EAX = 0xFFFF9ABC

Cycles 3

DAA

Decimal Adjust After Addition

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

Decimal Adjust After Subtraction

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

Syntaxe das Exemple mov mov sub das

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

Syntaxe dec dec dec dec reg8 mem reg16 reg32

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

; EAX = 38244 = dividende ; BX = 100 = diviseur ; DX = 0x002C (44), AX = 0x017E (382)

268

Instructions

269

ENTER

Make Stack Frame

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

Syntaxe enter enter enter immed16,0 immed16, 1 immed16, immed8

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

; DX:AX = -27292 ; BX = 100 ; DX = 0xFFA4 (-92), AX = 0xFEF0 (-272)

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

eax, 0x9FFFFFFF ebx, 3 ebx ; EDX = 0xFFFFFFFE, EAX = 0xDFFFFFFD

Instructions

271

272

IN

Input from Port

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

Syntaxe in in accum, immed accum, dx

Cycles 7, mp=4, 21, mv=19 7, mp=4, 21, mv=19

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

Syntaxe inc inc reg mem

272

Instructions

273

INS/INSB/INSW/INSD

Input from Port to String

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

Syntaxe ins dest, dx insb insw insd

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

Syntaxe int immed8

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

Syntaxe iret iretd iretf iretdf

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

Syntaxe jcondition etiquette

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

Syntaxe jcxz tiquette

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

277 jmp mem48

LAHF

Load Flags into AH Register

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

Load Access Rights

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

Load Far Pointer

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

Load Effective Address

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

Syntaxe lea reg, mem

Cycles 1

278

Instructions

279

LEAVE

High Level Procedure Exit

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

Lock the Bus

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

Syntaxe lock instruction

Cycles 1

LODS/LODSB/LODSW/LODSD Load Accumulator from String


Charge AL, AX ou EAX avec un lment d'une chane en mmoire. ESI doit pointer vers l'lment source, mme si un oprande est fourni. Pour chaque lment charg, ESI est Instructions 279

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

Syntaxe lods lodsb lodsw lodsd src

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

281 Syntaxe loop loopw loopd etiquette etiquette etiquette Cycles 5, 6

LOOPcondition/LOOPconditionW/LOOPconditionD Loop Conditionally


Boucle de faon rptitive vers une tiquette donne si la condition est vraie et si ECX (CX en mode 16 bits) n'est pas 0. On peut forcer l'utilisation de CX avec la forme W de l'instruction, ou celle de ECX avec la forme D. L'instruction dcrmente ECX (sans changer aucun indicateur) et teste si ZF a t mis zro par une instruction prcdente telle que CMP. Avec LOOP et LOOPZ (elles sont synonymes), l'excution se poursuit l'tiquette si l'indicateur ZF est 1 et que ECX n'est pas 0. Indicateurs O D I T S Z A P C

Syntaxe loope loopew looped loopz loopzw loopzd etiquette etiquette etiquette etiquette etiquette etiquette

Cycles 7, 8

LSL

Load Segment Limit

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

Move to/from Special Registers

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

Move String Data

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

Syntaxe movs movsb movsw movsd reg, reg

Cycles 4 4

MOVSX

Move with Sign-Extend

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

Move with Zero-Extend

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

Syntaxe mul mul Exemple reg mem

Instructions

285

286 mov mov mul eax, 0x9FFFFFFF ebx, 3 ebx ; EDX = 0x00000001; EAX = 0xDFFFFFFD

NEG

Two's Complement Negation

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

Syntaxe neg neg reg mem

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

One's Complement Negation

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

Syntaxe not not reg mem

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

Syntaxe out out immed8, accum dx, accum

Cycles 12, mp=9, 26, mv=24 12, mo=9, 25, mv=24

OUTS/OUTSB/OUTSW/OUTSD Output String to Port


Envoie une chane un port. La chane est considre comme la source et doit tre pointe par ESI (DS:SI) mme si un oprande est fourni. Le port de sortie est spcifi dans DX. Pour chaque lment transmis, ESI est ajust selon la taille de l'oprande et l'tat de l'indicateur de direction DF. ESI est incrment si DF a t mis zro avec CLD, ou dcrment s'il a t mis 1 avec STD. Avec la forme OUTS de l'instruction, un oprande doit tre fourni pour indiquer la taille des lments transmettre. Une drogation de segment peut tre donne. Lorsque l'une des formes OUTSB (octets) OUTSW (mots) ou OUTSD (doubles mots) est utilise, c'est le choix d'instruction qui dtermine la taille des lments de donnes transmettre. OUTS et ses variations sont normalement utilises avec le prfixe REP. Avant l'excution de l'instruction, CX doit contenir le nombre d'lments transmettre. En mode protg, une faute gnrale de protection se produit si OUTS est utilis quand le niveau de privilge courant est suprieur la valeur de l'indicateur IOPL. 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

Syntaxe pop pop pop pop reg16 reg32 mem16 mem32

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

290 Syntaxe popa popad Cycles 5

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

Syntaxe popf popfd

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

Syntaxe push push pushw pushd reg16 reg32 reg16 reg32

Cycles 1

290

Instructions

291

push push push pushw pushd push pushw pushd

mem16 mem32 segreg segreg segreg immed immed immed

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

Syntaxe pusha pushad

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

Syntaxe pushf pushfd

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

Read from Time Stamp Counter

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

Syntaxe rep movs dest, scr rep movsb rep

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

11+3n, pm=(8, 25)+3n

13+4n, pm=(10, 27)+4n

REPcondition Repeat String Conditionally


Rpte une instruction de chane tant que la condition est vraie et que ECX 0 (CX en mode 16 bits). REPE et REPZ (synonymes) rptent tant que ZF est 1. REPNE et REPNZ (synonymes) rptent tant que ZF est 0. Ces instructions ne sont utilises qu'avec SCAS et CMPS, car ce sont les deux seules instructions de chane qui affectent ZF. Avant l'excution de l'instruction, ECX devrait contenir le nombre maximum dsir de rptitions et par la suite est dcrment chaque itration. Indicateurs O D I T S Z A P C * Cycles 7, 9+4n

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

Return from Procedure

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

Syntaxe ret retn ret retn

Cycles 2 immed16 immed 16 4, 23

ROL/ROR

Rotate

296

Instructions

297 Voir RCL / RCR.

SAHF

Store AH into Flags

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

Subtract with Borrow

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

Scan String Flags

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

299 Indicateurs O D I T S Z A P C * * * * * * Cycles 4

Syntaxe scas dest scasb scasw scasd

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

Syntaxe setcondition reg8 setcondition mem8

Cycles 1 2

SGDT/SIDT/SLDT

Store Descriptor Table Register

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 * * * ? * *

SAL et SHL CF SHR 0 SAR CF CF 0

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

Double Precision Shift

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

303 shrd shrd mem16, reg16, cl mem32, reg32, cl 5

STC

Set Carry Flag

Met l'indicateur de retenue CF 1. Indicateurs O D I T S Z A P C 1 Cycles 2

Syntaxe stc

STD

Set Direction Flag

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

Set Interrupt Flag

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

304 Indicateurs Syntaxe sti O D I T S Z A P C 1 Cycles 7

STOS/STOSB/STOSW/STOSD

Store String Data

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

Syntaxe stos stosb stosw stosd dest

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

Verify Read or Write

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

Syntaxe verr verr verw verw reg16 mem16 reg16 mem16

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

Exchange and Add

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

change les valeurs des oprandes source et destination. Indicateurs O D I T S Z A P C

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

Syntaxe xlat xlatb

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

Conditions pour les sauts et les sets


Mnmonique B/NAE AE/NB BE/NA A/NBE E/Z NE/NZ L/NGE GE/NL LE/NG G/NLE S NS C NC O NO P/PE NP/PO Indicateurs vrifis CF = 1 CF = 0 CF = 1 ou ZF = 1 CF = 0 et ZF = 0 ZF = 1 ZF = 0 SF OF SF = OF ZF=1 ou SFOF ZF=0 et SF=OF SF=1 SF= 0 CF=1 CF=0 OF = 1 OF=0 PF=1 PF=0 Description Vrai si infrieur/pas suprieur ou gal (comparaison non signe) Vrai si suprieur ou gal / pas infrieur (comparaison non signe) Vrai si infrieur ou gal / pas suprieur (comparaison non signe) Vrai si suprieur / pas infrieur ou gal (comparaison non signe) Vrai si gal (zro) Vrai si pas gal (pas zro) Vrai si plus petit / pas plus grand (comparaison signe) Vrai si plus grand ou gal / pas plus petit (comparaison signe) Vrai si plus petit ou gal / pas plus grand (comparaison signe) Vrai si plus grand/pas plus petit ou gal (comparaison signe) Vrai si ngatif Vrai zro ou positif Vrai si retenue (ou emprunt) Vrai si pas de retenue (ou d'emprunt) Vrai si dbordement de capacit Vrai si pas dbordement de capacit Vrai si parit/parit paire Vrai si pas de parit/parit impaire

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 noms des registres


AH, AL , AX, EAX, BH, BL, BX, EBX, CH, CL, CX, ECX, DH, DL, DX, EDX, SI, ESI, DI, EDI, BP, EBP, SP, ESP, CS, DS, ES, FS, GS, IP, EIP,

Les noms des instructions


AAA, AAD, AAM, etc.

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