فهرست دستورهای ایکس۸۶

مجموعه دستورالعمل ایکس۸۶ چندین بار گسترش یافته و هر بار ثبات‌ها و انواع داده‌ای گسترده‌تر یا قابلیت‌های جدیدی را معرفی کرده است.
دستورهای عدد صحیح ایکس۸۶
آنچه در ادامه می‌آید مجموعه دستورالعمل کامل ۸۰۸۶/۸۰۸۸ است، اما بیشتر این دستورها و نه همه آها، در حالت ۳۲ بیتی در دسترس هستند، و فقط روی مقادیر و ثبات‌های ۳۲ بیتی (EAX, EBX، و غیره) به جای متانظر ۱۶ بیتی آن‌ها (AX, BX، و غیره) به کار می‌روند.
دستورهای اصلی ۸۰۸۶/۸۰۸۸
+ مجموعه دستورالعمل‌های اصلی ۸۰۸۶/۸۰۸۸
دستور
معنی
توضیحات
آپ‌کد
AAA
تنظیم کد اسکی AL بعد از عملیات جمع
همراه با بی‌سی‌دی فشرده‌نشده استفاده می‌شود
AAD
تنظیم کد اسکی AL قبل از عملیات تقسیم
راهنمای منتشر شده ۸۰۸۶/۸۰۸۸ فقط مبنای ۱۰ AAD را پوشش می‌دهد ولی در عمل مبناهای دیگر نیز قابل استفاده هستند.
AAM
تنظیم کد اسکی AL بعد از عملیات ضرب
AAS
تنظیم کد اسکی AL بعد از عملیات تفریق
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 = portimm; (2) AL = portDX; (3) AX = portDX;
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
فصل منطقی
m/imm;
OUT
بردن خروجی به درگاه
(1) portimm = AL; (2) portDX = AL; (3) portDX = 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) (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;
اضافه شده در پردازنده‌های خاص
اضافه شده با ۸۰۱۸۶/۸۰۱۸۸
دستور
معنی
توضیحات
BOUND
بررسی حدود ایندکس آرایه
اگر آزمایش با شکست مواجه شود وقفه نرم‌افزاری ۵ را افزایش می‌دهد
ENTER
ورود به قاب پشته
معادل دستورهای
Push (E)BP
Set a temporary value (E)FRAME_PTR:=(E)SP
If LEVEL > 0 then
Repeat (LEVEL - 1) times:
(E)BP:=(E)BP - 2
Push the word pointed to by (E)BP
End repeat
Push (E)FRAME_PTR
End if
(E)BP:=(E)FRAME_PTR
(E)SP:=(E)SP - first operand.
INS
گرفتن ورودی از درگاه و انتقال به رشته
معادل دستورهای
IN (E)AX, DX
MOV ES:(E)DI, (E)AX
adjust (E)DI according to operand size and DF
LEAVE
ترک کردن قاب پشته
معادل دستورهای MOV SP, BP
POP BP
OUTS
بردن رشته خروجی به درگاه
معادل دستورهای
MOV (E)AX, DS:(E)SI
OUT DX, (E)AX
adjust (E)SI according to operand size and DF
POPA
گرفتن همه ثبات‌های عمومی از پشته
معادل دستورهای
POP DI
POP SI
POP BP
POP AX ;no POP SP here, only ADD SP,2
POP BX
POP DX
POP CX
POP AX
PUSHA
گنجاندن همه ثبات‌های عمومی در پشته
معادل دستورهای
PUSH AX
PUSH CX
PUSH DX
PUSH BX
PUSH SP
PUSH BP
PUSH SI
PUSH DI
اضافه شده با ۸۰۲۸۶
دستو
معنی
توضیحات
ARPL
تنظیم قسمت RPL انتخاب کننده
CLTS
پاک کردن فلگ وظیفه در ثبات CR0
LAR
خواندن بایت حقوق دسترسی
LGDT
خواندن جدول توصیف سراسری
LIDT
خواندن جدول توصیف وقفه
LLDT
خواندن جدول توصیف محلی
LMSW
خواندن کلمه وضعیت ماشین
LOADALL
خواندن همه ثبات‌های سی‌پی‌یو شامل ثبات‌های داخلی مانند جی‌دی‌تی
مستند نشده، فقط در ۸۰۲۸۶ و ۸۰۳۸۶
LSL
خواندن حد سگمنت
LTR
خواندن ثبات وظیفه
SGDT
ذخیره جدول توصیف سراسری
SIDT
ذخیره جدول توصیف وقفه
SLDT
ذخیره جدول توصیف محلی
SMSW
ذخیره کلمه وضعیت ماشین
STR
ذخیره ثبات وظیفه
VERR
مشخص کردن سگمنت برای خواندن
VERW
مشخص کردن سگمنت برای نوشتن
اضافه شده با ۸۰۳۸۶
دستور
معنی
توضیحات
BSF
اسکن بیت به جلو
BSR
اسکن بیت به عقب
BT
سنجش بیت
BTC
سنجش بیت و مکمل کردن آن
BTR
سنجش بیت و پاک کردن آن
BTS
سنجش بیت و روشن کردن آن
CDQ
تبدیل double-word به quad-word
Sign-extends EAX into EDX, forming the quad-word EDX:EAX. Since (I)DIV uses EDX:EAX as its input, CDQ must be called after setting EAX if EDX is not manually initialized (as in 64/32 division) before (I)DIV.
CMPSD
مقایسه رشته کلمه-مضاعف
Compares ES:(E)DI with DS:SI
CWDE
تبدیل کلمه به کلمه-مضاعف
Unlike CWD, CWDE sign-extends AX to EAX instead of AX to DX:AX
INSD
خواندن از درگاه و انتقال به کلمه-مضاعف
IRETx
Interrupt return; D suffix means 32-bit return, F suffix means do not generate epilogue code (i.e. LEAVE instruction)
Use IRETD rather than IRET in 32-bit situations
JECXZ
پرش در صورت صفر بودن ECX
LFS, LGS
خواندن اشاره‌گر دور
LSS
خواندن سگمنت پشته
LODSD
خواندن رشته کلمه-مضاعف
can be prefixed with REP
LOOPW, LOOPccW
حلقه شرطی
Same as LOOP, LOOPcc for earlier processors
LOOPD, LOOPccD
گردش تا زمان برابر بودن
if (cc -- --ECX) goto lbl; , cc = Z (ero), E (qual), N on Z ero, N (on) E (qual)
MOVSD
انتقال رشته کلمه-مضاعف
*(dword*)ES:EDI±± = (dword*)ESI±±; (±± depends on DF)
MOVSX
انتقال و گسترش با علامت
(long)r = (signed char) r/m; and similar
MOVZX
انتقال و گسترش با صفر
(long)r = (unsigned char) r/m; and similar
OUTSD
خروجه به درگاه از رشته کلمه-مضاعف
portDX = *(long*)ESI±±; (±± depends on DF)
POPAD
گرفتن همه ثبات‌های کلمه-مضاعف از پشته
Does not pop register ESP off of stack
POPFD
گرفتن داده از پشته و انتقال به ثبات EFLAGS
PUSHAD
گنجاندن همه ثبات‌های کلمه-مضاعف در ثبات
PUSHFD
گنجاندن ثبات EFLAGS در پشته
SCASD
اسکن داده رشته کلمه-مضاعف
SETcc
تنظیم بایت به یک در صورت درست بودن شرط و در غیر این صورت صفر کردن آن
(SETA, SETAE, SETB, SETBE, SETC, SETE, SETG, SETGE, SETL, SETLE, SETNA, SETNAE, SETNB, SETNBE, SETNC, SETNE, SETNG, SETNGE, SETNL, SETNLE, SETNO, SETNP, SETNS, SETNZ, SETO, SETP, SETPE, SETPO, SETS, SETZ)
SHLD
شیفت به چپ کلمه-مضاعف
SHRD
شیفت به راست کلمه-مضاعف
r1 = r1>>CL ∣ r2 Instead of CL, immediate 1 can be used
STOSD
ذهیره رشته کلمه-مضاعف
*ES:EDI±± = EAX; (±± depends on DF, ES cannot be overridden)
اضافه شده با ۸۰۴۸۶
دستور
معنی
توضیحات
BSWAP
جابجایی بایت
r>>24; Only works for 32 bit registers
CMPXCHG
مقایسه و جابجایی اتمی
INVD
باطل کردن کاشه داخلی
Flush internal caches
INVLPG
باطل کردن ورودی TLB Entry
Invalidate TLB Entry for page that contains data specified
WBINVD
بازنویسی و باطل کردن کاشه
Writes back all modified cache lines in the processors internal cache to main memory and invalidates the internal caches.
XADD
جمع و جابجایی
Exchanges the first operand with the second operand, then loads the sum of the two values into the destination operand.