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

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

دستورهای عدد صحیح ایکس۸۶

آنچه در ادامه می‌آید مجموعه دستورالعمل کامل ۸۰۸۶/۸۰۸۸ است، اما بیشتر این دستورها و نه همهٔ آها، در حالت ۳۲ بیتی در دسترس هستند، و فقط روی مقادیر و ثبات‌های ۳۲ بیتی (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;
MOVMoveکپی کردن داده از جایی به جای دیگر، (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, EAX0x90
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-wordSign-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خواندن از درگاه و انتقال به کلمه-مضاعف
IRETxInterrupt 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 EntryInvalidate 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.

منابع

    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.