فهرست دستورهای ایکس۸۶
دستورهای اصلی ۸۰۸۶/۸۰۸۸

| دستور | معنی | توضیحات | آپ‌کد |
| --- | --- | --- | --- |
| AAA | تنظیم کد اسکی AL بعد از عملیات جمع | همراه با بی‌سی‌دی فشرده‌نشده استفاده می‌شود |  |
| AAD | تنظیم کد اسکی AL قبل از عملیات تقسیم | راهنمای منتشر شدهٔ ۸۰۸۶/۸۰۸۸ فقط مبنای ۱۰ AAD را پوشش می‌دهد ولی در عمل مبناهای دیگر نیز قابل استفاده هستند. |  |
| AAM | تنظیم کد اسکی AL بعد از عملیات ضرب | راهنمای منتشر شدهٔ ۸۰۸۶/۸۰۸۸ فقط مبنای ۱۰ AAD را پوشش می‌دهد ولی در عمل مبناهای دیگر نیز قابل استفاده هستند. |  |
| AAS | تنظیم کد اسکی AL بعد از عملیات تفریق | راهنمای منتشر شدهٔ ۸۰۸۶/۸۰۸۸ فقط مبنای ۱۰ AAD را پوشش می‌دهد ولی در عمل مبناهای دیگر نیز قابل استفاده هستند. |  |
| ADC | جمع با رقم نقلی | مقصد := مقصد + مبدأ + فلگ نقلی |  |
| ADD | جمع | (1) r/m += r/imm; (2) r += m/imm; |  |
| AND | عطف منطقی | (1) r/m &= r/imm; (2) r &= m/imm; |  |
| CALL | فراخوانی رویه | push eip + 2 ; jmp operand |  |
| CBW | تبدیل بایت به کلمه |  |  |
| CLC | پاک کردن فلگ نقلی | CF = ۰; |  |
| CLD | پاک کردن فلگ جهت | DF = ۰; |  |
| CLI | پاک کردن فلگ وقفه | IF = ۰; |  |
| CMC | مکمل کردن فلگ نقلی |  |  |
| CMP | مقایسهٔ عملوندها |  |  |
| CMPSB | مقایسهٔ بایت‌ها در حافظه |  |  |
| CMPSW | مقایسهٔ کلمه‌ها |  |  |
| CWD | تبدیل کلمه به کلمه‌مضاعف |  |  |
| DAA | تنظیم ده‌دهی AL بعد از عملیات جمع | همراه با بی‌سی‌دی فشرده‌شده استفاده می‌شود. |  |
| DAS | تنظیم ده‌دهی AL بعد از عملیات تفریق |  |  |
| DEC | کم کردن یک واحد |  |  |
| DIV | تقسیم بدون علامت | DX:AX = DX:AX / r/m; resulting DX = remainder |  |
| ESC | همراه با واحد ممیز-شناور استفاده می‌شود |  |  |
| HLT | ورود به حالت توقف |  | 0xF4 |
| IDIV | تقسیم با علامت | DX:AX = DX:AX / r/m; resulting DX = remainder |  |
| IMUL | ضرب با علامت | (1) DX:AX = AX * r/m; (2) AX = AL * r/m |  |
| IN | خواندن ورودی از درگاه | (1) AL = port[imm]; (2) AL = port[DX]; (3) AX = port[DX]; |  |
| INC | اضافه کردن یک واحد |  |  |
| INT | فراخوانی وقفه |  |  |
| INTO | فراخوانی وقفه در صورت وجود سرریز |  |  |
| IRET | بازگشت از وقفه |  |  |
| Jcc | پرش‌های شرطی | (JA, JAE, JB, JBE, JC, JE, JG, JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNC, JNE, JNG, JNGE, JNL, JNLE, JNO, JNP, JNS, JNZ, JO, JP, JPE, JPO, JS, JZ) |  |
| JCXZ | پر در صورت صفر بودن CX |  |  |
| JMP | پرش |  |  |
| LAHF | بار کردن فلگ به ثبات AH |  |  |
| LDS | بار کردن اشاره‌گر به DS |  |  |
| LEA | بار کردن آدرس مؤثر |  |  |
| LES | بار کردن ES با اشاره‌گر |  |  |
| LOCK | اعلام سیگنال BUS LOCK# | برای چندپردازی |  |
| LODSB | بار کردن بایت رشته | if (DF==0) AL = *SI++; else AL = *SI--; |  |
| LODSW | بار کردن کلمه رشته | if (DF==0) AX = *SI++; else AX = *SI--; |  |
| LOOP/LOOPx | کنترل حلقه | (LOOPE, LOOPNE, LOOPNZ, LOOPZ) if (x && --CX) goto lbl; |  |
| MOV | Move | کپی کردن داده از جایی به جای دیگر، (1) r/m = r; (2) r = r/m; |  |
| MOVSB | انتقال بایت از رشته به رشته | if (DF==۰) *(byte*)DI++ = *(byte*)SI++; else *(byte*)DI-- = *(byte*)SI--; |  |
| MOVSW | انتقال کلمه از رشته به رشته | if (DF==۰) *(word*)DI++ = *(word*)SI++; else *(word*)DI-- = *(word*)SI--; |  |
| MUL | ضرب بدون علامت | (1) DX:AX = AX * r/m; (2) AX = AL * r/m; |  |
| NEG | تغییر علامت مکلمل دو | r/m *= -۱; |  |
| NOP | بدون عمل | معادل XCHG EAX, EAX | 0x90 |
| NOT | نفی منطقی | r/m ^= -۱; |  |
| OR | فصل منطقی | = r/imm; (2) r |= m/imm; |  |
| OUT | بردن خروجی به درگاه | (1) port[imm] = AL; (2) port[DX] = AL; (3) port[DX] = AX; |  |
| POP | گرفتن (pop) داده از پشته | POP CS (آپ‌کد 0x0F) فقط در ۸۰۸۶/۸۰۸۸ کار می‌کند، و سی‌پی‌یوهای بعدی از 0x0F به عنوان پیشوند دستورهای جدید استفاده می‌کنند. SP++ = r/m; | 0x0F |
| POPF | گرفتن داده از ثبات فلگ | *SP++ = flags; |  |
| PUSH | گنجاندن (push) داده در پشته | *--SP = r/m; |  |
| PUSHF | گنجاندن فلگ‌ها در پشته | *--SP = flags; |  |
| RCL | گردش به چپ (با رقم نقلی) |  |  |
| RCR | گردش به راست (با رقم نقلی) |  |  |
| REPxx | تکرار شرطی دستورهای MOVS/STOS/CMPS/LODS/SCAS | (REP, REPE, REPNE, REPNZ, REPZ) |  |
| RET | بازگشت از رویه | اسمبلر این دستور را بسته به مدل حافظهٔ سیستم مقصد به RETN یا RETF تبدیل می‌کند. |  |
| RETN | بازگشت از رویه نزدیک (near) |  |  |
| RETF | بازگشت از رویه دور (far) |  |  |
| ROL | گردش به چپ |  |  |
| ROR | گردش به راست |  |  |
| SAHF | ذخیرهٔ AH در فلگ‌ها |  |  |
| SAL | شیفت به چپ با علامت | (1) r/m <<= 1; (2) r/m <<= CL; |  |
| SAR | شیفت به راست با علامت | (1) (signed)r/m >>= 1; (2) (signed)r/m >>= CL; |  |
| SBB | تفریق با رقم قرضی | جایگزین کدگذاری یک بایتی دستور SBB AL, AL از طریق دستور مستندنشدهٔ SALC در دسترس است. |  |
| SCASB | مقایسهٔ رشته بایت |  |  |
| SCASW | مقایسهٔ رشته کلمه |  |  |
| SHL | شیفت به چپ بدون علامت |  |  |
| SHR | شیفت به راست بدون علامت |  |  |
| STC | روشن کردن فلگ نقلی | CF = ۱; |  |
| STD | روشن کردن فلگ جهت | DF = ۱; |  |
| STI | روشن کردن فلگ وقفه | IF = ۱; |  |
| STOSB | ذخیره بایت در رشته | if (DF==۰) *ES:DI++ = AL; else *ES:DI-- = AL; |  |
| STOSW | ذخیره کلمه در رشته | if (DF==۰) *ES:DI++ = AX; else *ES:DI-- = AX; |  |
| SUB | تفریق | (1) r/m -= r/imm; (2) r -= m/imm; |  |
| TEST | قیاس منطقی (AND) | (1) r/m & r/imm; (2) r & m/imm; |  |
| WAIT | انتظار تا وقتی که مشغول نباشد | منتظر می‌ماند تا پین BUSY # غیرفعال شود (در واحد ممیز-شناور استفاده می‌شود) |  |
| XCHG | جابه‌جا کردن داده | r :=: r/m; |  |
| XLAT | ترجمه با مراجعه به جدول | مانند MOV AL, [BX+AL] عمل می‌کند. |  |
| XOR | یای مانعةالجمع | (1) r/m ^= r/imm; (2) r ^= m/imm; |  |