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

مجموعه دستورالعمل ایکس۸۶ چندین بار گسترش یافته و هر بار ثبات‌ها و انواع داده‌ای گسترده‌تر یا قابلیت‌های جدیدی را معرفی کرده است.

 دستورهای عدد صحیح ایکس۸۶ 
آنچه در ادامه می‌آید مجموعه دستورالعمل کامل ۸۰۸۶/۸۰۸۸ است، اما بیشتر این دستورها و نه همهٔ آها، در حالت ۳۲ بیتی در دسترس هستند، و فقط روی مقادیر و ثبات‌های ۳۲ بیتی (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 = 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; 

 اضافه شده در پردازنده‌های خاص 
 اضافه شده با ۸۰۱۸۶/۸۰۱۸۸ 
 دستور  معنی  توضیحات 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), NonZero, 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  خروجه به درگاه از رشته کلمه-مضاعف   port[DX] = *(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<<(32-CL); Instead of CL, immediate 1 can be used STOSD  ذهیره رشته کلمه-مضاعف  *ES:EDI±± = EAX; (±± depends on DF, ES cannot be overridden)

 اضافه شده با ۸۰۴۸۶ 
 دستور  معنی  توضیحات BSWAP  جابجایی بایت  |r = r<<24 | r<<8&0x00FF0000 | r>>8&0x0000FF00 | 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 processor's 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.

 منابع 



رده:دستورالعمل‌های اکس۸۶