موضوع مقاله: زبان اسمبلی اکس۸۶ | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # زبان اسمبلی اکس۸۶ | مقدمه: زبان اسمبلی x86 خانواده ای از زبان‌های اسمبلی دارای سازگاری عقبرو است که حتی با Intel 2088 که در آوریل ۱۹۷۲ معرفی شد، تا حدودی سازگاری دارد. | ## بخش 1: زبان اسمبلی اکس۸۶ | زبان‌های اسمبلی x86 برای تولید کد هدف برای پردازنده‌های کلاس x86 استفاده می‌شوند. زبان اسمبلی x86 همانند تمام زبان‌های اسمبلی، از یادیارهای کوتاه استفاده می‌کند تا دستورالعمل‌های اساسی را که CPU در یک کامپیوتر می‌تواند درک و دنبال کند، نشان دهد. کامپایلرها گاهی هنگام ترجمهٔ یک برنامه سطح بالا به کد ماشین، کد اسمبلی را به عنوان یک مرحله میانی تولید می‌کنند. زبان‌های اسمبلی به‌طور معمول برای برنامه‌های کاربردی دقیق و زمان بحرانی مورد استفاده قرار می‌گیرند مانند سیستم‌های نهفتهٔ بلادرنگ یا هسته‌های سیستم عامل و درایورهای دستگاه. تاریخچه اینتل ۸۰۸۶ و ۸۰۸۸ اولین پردازنده‌هایی بودند که یک مجموعه دستورالعمل داشتند که در حال حاضر معمولاً آن را x86 می‌نامند. این پردازنده‌های ۱۶ بیتی که تکامل یافتهٔ نسل قبلی پردازنده‌های ۸ بیتی مانند ۸۰۸۰ بودند، ویژگی‌ها و دستورالعمل‌های بسیاری را از آن‌ها به ارث برده و برای نسل ۱۶ بیتی توسعه داده‌اند. ۸۰۸۶ و ۸۰۸۸ هر دو از گذرگاه آدرس ۲۰ بیتی و ثبات‌های داخلی ۱۶ بیتی استفاده می‌کردند؛ اما تفاوت‌هایی نیز داشتند، برای مثال، در حالی که ۸۰۸۶ دارای یک گذرگاه داده ۱۶ بیتی بود، ۸۰۸۸، به عنوان یک گزینهٔ کم هزینه تر برای برنامه‌های کاربردی نهفته و کامپیوترهای کوچک، از یک گذرگاه دادهٔ ۸ بیتی بهره می‌برد. زبان اسمبلی x86 انواع مختلفی از CPUها را پوشش می‌دهد از جمله: پردازنده‌های اینتلی مانند 80186، 80188، ۸۰۲۸۶، ۸۰۳۸۶، 80486، پنتیوم، پنتیوم پرو و غیره و همچنین پردازنده‌های غیر اینتلی AMD و Cyrix مانند پردازنده‌های 5x86 و K6 و NEC V20 (هرچند این پردازنده‌ها غالباً سازگار با اینتل هستند، دستورالعمل‌هایی را که ممکن است به سختی بخشی از زبان اسمبلی x86 در نظر گرفته شود را به مجموعه دستورالعمل‌های خود اضافه کرده‌اند؛ همانند دستورالعمل‌هایی که Zilog به Z80 اضافه کرد) اصطلاح x86 برای هر پردازنده ای که می‌تواند زبان اسمبلی اصلی را اجرا کند، مورد استفاده قرار می‌گیرد. مجموعهٔ جدید دستورالعمل‌های x86، یک ابرمجموعه از دستورالعمل‌های ۸۰۸۶ و مجموعه ای از افزونه‌های اضافه شده به این دستورالعمل هاست که از میکروپروسسور اینتل ۸۰۰۸ آغاز شد. سازگاری عقبرو باینری تقریباً کاملی میان تراشهٔ اینتل از ۸۰۸۶ تا نسل فعلی پردازنده‌های x86 وجود دارد، اگر چه برخی از استثنائات وجود دارند. در عمل، استفاده از دستورالعمل‌هایی که روی هر پردازنده ای از اینتل ۸۰۳۸۶ یا پنتیوم به بعد اجرا شود، رایج است. اما در سال‌های اخیر، سیستم عامل‌های مختلف و برنامه‌های کاربردی نرم‌افزار به نیاز به پردازنده‌های مدرن تر پیدا کرده‌اند، پردازنده‌هایی که دست کم از تعدادی از افزونه‌هایی که به مجموعهٔ دستورالعمل‌ها اضافه شده‌اند، پشتیبانی کنند. یادیارها و آپ کد‌ها هر دستورالعمل مونتاژ x86 با یک یادیار نشان داده می‌شود که اغلب با یک یا چند عملوند ترکیب شده‌است و به یک یا چند بایت به نام آپ کد ترجمه می‌شود؛ به عنوان مثال دستور NOP به 0x90 ترجمه می‌شود و دستور HLT به 0xF4 ترجمه می‌شود. پردازنده‌های مختلف ممکن است این آپ کد‌ها را به‌طور متفاوتی از یکدیگر تفسیر کنند، برنامه ای که با استفاده از آن‌ها ایجاد شود، متناقض رفتار خواهد کرد یا حتی در برخی از پردازنده‌ها یک استثنا ایجاد می‌کند. این آپ کد‌ها اغلب در مسابقه‌های کدنویسی به عنوان راهی برای کوچکتر، سریع تر و ظریف تر کردن کد استفاده می‌شوند یا تنها نشان دهندهٔ مهارت کدنویس می‌باشند. نحو زبان اسمبلی x86 دارای دو شاخهٔ اصلی نحو است: نحو اینتل، که در اصل برای مستندسازی پلت فرم x86 استفاده می‌شود، و نحو AT & T. در اینجا خلاصه ای از تفاوت‌های اصلی میان نحو اینتل و نحو AT & T آمده‌است: AT & T اینتل ترتیب پارامتر منبع قبل از مقصد mov $5, %eax مقصد قبل از منبع mov eax, 5 اندازهٔ پارامتر یادیار‌ها شامل یک حرف پیشوند که نشان دهندهٔ اندازهٔ عملوند است، می‌باشند: addl $4, %esp مشتق شده از نام ثباتی که مورد استفاده قرار گرفته‌است: add esp, 4 نمادها مقادیر بی واسطه با پیشوند "$" می‌آیند، و ثبات‌ها با پیشوند "٪". اسمبلر به‌طور خودکار نوع نمادها را تشخیص می‌دهد؛ یعنی تشخیص می‌دهد آن‌ها ثبات، مقدار ثابت یا چیز دیگری هستند. ثبات‌ها پردازنده‌های x86 دارای مجموعه ای از ثبات‌ها هستند که برای ذخیره‌سازی داده‌های باینری استفاده می‌شوند. هر ثباتی به جز آنچه که همهٔ ثبات‌ها می‌توانند انجام دهند، هدف خاصی نیز دارد: *AX ضرب/تقسیم، بارگذاری و ذخیرهٔ رشته *CX تعداد عملیات روی رشته و تعداد شیفت‌ها *DX پورت آدرس برای IN و OUT *BX ثبات شاخص برای MOVE *SP به بالای پشته اشاره می‌کند *BP به انتهای فریم پشته اشاره دارد *SI به یک منبع در عملیات جریان اشاره می‌کند *DI به یک مقصد در عملیات جریان اشاره می‌کند علاوه بر ثبات‌های عمومی، موارد زیر نیز وجود دارند: - نشانگر دستورالعمل IP - پرچم‌ها - ثبات‌های قطعه (CS, DS, ES, FS, GS, SS) که تعیین می‌کنند که یک قطعهٔ 64k از کجا آغاز می‌شود. (FS و GS در ۸۰۲۸۶ و قبل از آن وجود نداشتند) - ثبات‌های افزونه (MMX، 3DNow!، SSE، و غیره) (فقط در پنتیوم و نسخه‌های بعد از آن وجود دارند) ثبات IP، به افست حافظهٔ دستورالعمل بعدی در بخش کد اشاره می‌کند. قطعه بندی، شامل ساخت یک آدرس حافظه از دو بخش است: یک قطعه و یک افست؛ قطعه به نقطهٔ شروع یک گروه ۶۴ کیلوبایتی از آدرس‌ها اشاره می‌کند و افست تعیین می‌کند که آدرس مورد نظر در چه فاصله ای از این نقطهٔ شروع قرار دارد. به منظور ترجمه به یک آدرس مسطح؛ مقدار قطعه، چهار بیت به چپ (که معادل است با ضرب در 24 یا ۱۶) شیفت داده می‌شود و سپس به مقدار افست اضافه می‌شود تا آدرس کامل را ایجاد کند. این روش اجازه می‌دهد محدودیت آدرس دهی ۶۴ کیلوبایتی را از طریق انتخاب هوشمندانهٔ آدرس‌ها دور بزنیم. کامپیوتر اصلی آی بی ام برنامه‌ها را محدود به ۶۴۰ کیلوبایت می‌کرد، اما مشخصات حافظه گسترش یافته برای پیاده‌سازی یک طرح سوئیچینگ بانکی که سقوط از استفاده از زمانی که بعد از سیستم عامل، مانند ویندوز، استفاده از محدوده آدرس بزرگتر از پردازنده‌های جدید و استفاده از حافظه مجازی خود طرح‌ها حالت محافظت شده، که از اینتل ۸۰۲۸۶ آغاز شد، توسط OS / 2 مورد استفاده قرار گرفت. نقطه ضعف‌هایی مانند عدم قابلیت دسترسی به BIOS و عدم توانایی برای بازگشت به حالت واقعی بدون تنظیم مجدد پردازنده، مانع استفادهٔ گستردهٔ آن شد. ۸۰۲۸۶ همچنان محدود به آدرس دهی حافظه در بخش‌های ۱۶ بیتی بود، به این معنی که فقط 216 بایت (۶۴ کیلوبایت) در هر لحظه قابل دسترسی بود. برای دسترسی به قابلیت‌های گسترش یافتهٔ ۸۰۲۸۶، سیستم عامل، پردازنده را روی حالت محافظت شده تنظیم می‌کند، بنابراین آدرس دهی ۲۴ بیتی و نتیجتاً دسترسی به 224 بایت (۱۶ مگابایت) حافظه را امکان‌پذیر می‌کند. در حالت محافظت شده، انتخابگر قطعه را می‌توان به سه بخش تقسیم کرد: یک شاخص ۱۳ بیتی، یک نشانگر جدول یک بیتی که تعیین می‌کند ورودی در GDT قرار دارد یا در LDT و یک سطح مجوز درخواستی ۲ بیتی. | ## بخش 2: زبان اسمبلی اکس۸۶ | در هنگام اشاره به یک آدرس مشخص شده با یک قطعه و یک افست، از نشانه گذاری قطعه:افست استفاده می‌شود، بنابراین در مثال فوق، آدرس مسطح 0xEB5CE می‌تواند یا به صورت 0xDEAD:0xCAFE نوشته شود یا به صورت یک جفت ثبات که یکی برای قطعه و دیگری برای افست است؛ DS:DX. برخی از ترکیبات خاص ثبات‌های قطعه و ثبات‌های عمومی به آدرس‌های مهمی اشاره دارند. مانند: *CS:IP به آدرسی اشاره می‌کند که پردازنده در بایت بعدی از کد، آن را واکشی خواهد کرد (CS کوتاه شدهٔ قطعه کد و IP کوتاه شدهٔ نشانگر دستورالعمل می‌باشد). *SS:SP به آدرس بالای پشته اشاره می‌کند یا به عبارت دیگر به آخرین بایتی که روی پشته قرار گرفته‌است (SS کوتاه شدهٔ قطعهٔ پشته و SP کوتاه شدهٔ نشانگر پشته می‌باشد). *DS:SI معمولاً برای اشاره به داده‌ای استفاده می‌شود که قصد داریم آن را در ES:DI کپی کنیم (DS کوتاه شدهٔ قطعهٔ داده و SI کوتاه شدهٔ شاخص مبدأ می‌باشد). *ES:DI معمولاً برای اشاره به مقصدی استفاده می‌شود که قصد کپی کردن رشته‌ای را در آن مقصد داریم، همان‌طور که در بالا گفته شد. اینتل ۸۰۳۸۶ دارای سه حالت کارکرد می‌باشد: حالت واقعی، حالت محافظت شده و حالت مجازی. حالت محافظت شده که در ۸۰۲۸۶ عرضه شد، به ۸۰۳۸۶ این امکان را می‌دادکه تا حداکثر ۴ گیگابایت حافظه در اختیار داشته باشد؛ حالت مجازی جدید 8086 (VM86)، اجرای یک یا چند برنامهٔ حالت واقعی را در یک محیط محافظت شده که عمدتاً مشابه حالت واقعی بود، امکان‌پذیر کرد، هر چند برخی از برنامه‌ها با این حالت سازگار نبودند. مدل حافظه مسطح ۳۲ بیتی در حالت حفاظت شدهٔ توسعه یافتهٔ ۸۰۳۸۶، احتمالاً مهم‌ترین ویژگی تغییر یافته در خانوادهٔ پردازنده x86 بود تا زمانی که ای ام دی، x86-64 را در سال ۲۰۰۳ منتشر کرد، ویندوز اکنون می‌تواند بسیاری از برنامه‌های کاربردی، از جمله برنامه‌های DOS، را با استفاده از حافظهٔ مجازی و چند اجرای توامان، به صورت هم‌زمان اجرا کند. حالت اجرا پردازنده‌های x86 از پنج حالت عملکرد پشتیبانی می‌کنند: حالت حقیقی، حالت محافظت شده، حالت طولانی، حالت مجازی ۸۶ و حالت مدیریت سیستم، که در هر کدام از این حالت‌ها برخی دستورالعمل‌ها در دسترس بوده و برخی دیگر در دسترس نخواهند بود. یک زیر مجموعهٔ ۱۶ بیتی از دستورالعمل‌ها در حالت حقیقی در تمام پردازنده‌های x86 قابل استفاده هستند و در حالت محافظت شدهٔ ۱۶ بیتی (از ۸۰۲۸۶ به بعد) دستورالعمل‌های افزدوه شده مربوط به حالت محافظت شده هم در دسترس هستند. در ۸۰۳۸۶ و پردازنده‌های بعد از آن، دستورالعمل‌های ۳۲ بیتی نیز در همهٔ حالت‌ها، از جمله حالت واقعی قابل استفاده هستند. در این پردازنده‌ها، حالت V86 و حالت حفاظت شدهٔ ۳۲ بیتی، همراه با دستورالعمل‌های اضافی ارائه شده در این حالت‌ها برای مدیریت امکانات این پردازنده‌ها، اضافه شده‌اند. SMM، با برخی از دستورالعمل خاص خود، در برخی از پردازنده‌های اینتل i386SL , i486 و بعد از این‌ها در دسترس است. در حالت طولانی (از ای ام دی Opteron به بعد)، دستورالعمل‌های ۶۴ بیتی و ثبات‌های بیشتری نیز در دسترس هستند. مجموعهٔ دستورالعمل‌ها در همهٔ حالت‌ها مشابه هم هستند اما آدرس دهی حافظه و اندازهٔ کلمات متفاوتند؛ در نتیجه برنامه‌نویسی در حالت‌های مختلف نیاز به استراتژی‌های برنامه‌نویسی متفاوت دارد. کد x86 می‌تواند در حالت‌های زیر اجرا شود: حالت واقعی (۱۶ بیتی) حالت حفاظت شده (۱۶ بیت و ۳۲ بیتی) حالت طولانی (۶۴ بیتی) حالت مجازی ۸۰۸۶ (۱۶ بیتی) حالت مدیریت سیستم (۱۶ بیتی) جابجایی بین حالت‌ها پردازنده بلافاصله پس از روشن شدن در حالت واقعی اجرا می‌شود، بنابراین هستهٔ سیستم عامل یا برنامه‌های دیگر در صورتی که بخواهند در حالت دیگری به جز حالت واقعی اجرا شوند، باید به صورت صریح به آن حالت منتقل شوند. جابجایی بین حالت‌ها با تغییر دادن برخی بیت‌های مشخص از ثبات‌های کنترل‌کننده ی پردازنده، بعد از یک سری آماده‌سازی‌ها، انجام می‌شود و ممکن است تعدادی تنظیمات اضافی نیز بعد از جابجایی مورد نیاز باشد. انواع دستورالعمل‌ها به‌طور کلی، ویژگی‌های مجموعه دستورالعمل‌های مدرن x86 عبارتند از: _ رمزگذاری فشرده طول متغیر و همسایگی مستقل (کدگذاری شده به عنوان Endian کمی، همان‌طور که تمام داده‌ها در معماری x86) به‌طور عمده دستورالعمل‌های یک آدرس و دو آدرس، یعنی اولین عملوند نیز مقصد است. Operands حافظه به عنوان منبع و مقصد پشتیبانی می‌شوند (اغلب برای خواندن / نوشتن عناصر پشته با استفاده از فوریت‌های فوری کوچک) استفاده می‌شود. استفاده از ثبت نام عمومی و ضمنی؛ اگرچه همه هفت (counting ebp) به‌طور کلی در حالت ۳۲ بیت ثبت می‌شوند و تمام پانزده (rbp شمارش) به‌طور کلی در حالت ۶۴ بیت ثبت می‌شود، می‌تواند به صورت آزادانه به عنوان باتری یا برای آدرس استفاده شود، اکثر آن‌ها نیز به صورت ضمنی توسط برخی بیشتر یا کمتر) دستورالعمل‌های ویژه؛ بنابراین باید ثبت نام‌های آسیب دیده را به‌طور موقت حفظ (به‌طور معمول انباشته)، اگر در طول چنین توالی آموزش فعال است. پشتیبانی از حالت‌های مختلف آدرس بندی از جمله فوراً، افست و شاخص مقیاس، اما نه نسل PC، به جز جهش (به عنوان بهبود در معماری x86-64 معرفی شده). دستورالعمل‌های پشته معماری x86 دارای پشتیبانی سخت‌افزاری برای اجرای مکانیسم‌های مربوط به پشته است. دستورالعمل ret size وقتی به کار می‌رود که تابع صدا زده شده مسئولیت احیای فضای اشغال شدهٔ پشته توسط پارامترها را به عهده داشته باشد. هرچند سریع تر بودن یا آهسته‌تر بودن این روش علاوه بر نوع پیاده‌سازی پردازندهٔ x86، وابسته به قراردادهای فراخوانی مربوط به کامپایلر، برنامه‌نویس یا کد خاص یک برنامه نیز خواهد بود. طیف گستردهٔ حالت‌های آدرس دهی (از جمله بی واسطه و پایه + افست) برای دستورالعمل‌هایی مانند push و pop، استفادهٔ مستقیم از پشته را برای داده‌هایی مانند عدد صحیح، ممیز شناور و آدرس ساده‌تر می‌کند، همچنین، نگه داشتن مشخصات و مکانیزم ABI نسبت به برخی معماری‌های RISC ساده‌تر خواهد بود. دستورالعمل‌های ممیز شناور زبان اسمبلی x86 شامل دستورالعمل‌هایی برای یک واحد ممیز شناور مبتنی بر پشته (FPU) است. FPU در سری پردازنده‌های ۸۰۸۶ تا ۸۰۳۸۶، یک پردازندهٔ جداگانهٔ کمکی اختیاری بود، در سری پردازنده‌های ۸۰۴۸۶ یک ویژگی اختیاری روی تراشه بود و از سری ۸۰۴۸۶ به بعد، یک ویژگی استاندارد در هر پردازنده Intel x86 است، که از پنتیوم آغاز شد. دستورالعمل‌های FPU شامل جمع، تفریق، نفی، ضرب، تقسیم، باقی مانده، ریشه‌های مربع، کوتاه سازی عدد صحیح، کوتاه سازی کسر و مقیاس کردن با توان دو است. | ## بخش 3: زبان اسمبلی اکس۸۶ | این دستوالعمل‌ها همچنین شامل دستورالعمل‌های تبدیل هستند که می‌توانند یک مقدار را از حافظه در هر یک از فرمت‌های: دهدهی کدگذاری شده به صورت دودویی، صحیح ۳۲ بیتی، صحیح ۶۴ بیتی، ممیز شناور ۳۲ بیتی، ممیز شناور ۶۴ بیتی یا ممیز شناور ۸۰ بیتی (در هنگام بارگیری، مقدار مورد نظر به حالت ممیز شناور در حال حاضر استفاده شده تبدیل می‌شود) بارگذاری یا در حافظه ذخیره کنند. x86 همچنین شامل تعدادی از توابع غیرجبری، از جمله سینوس، کسینوس، تانژانت، آرکتانژانت، به توان رساندن با پایه ۲ و لگاریتم در مبنای‌های ۲، ۱۰، یا e، می‌شود. مانند دستورالعمل‌های مربوط به اعداد صحیح، اولین عملوند هم اولین عملوند مبدأ است و هم عملوند مقصد. دستورالعمل اضافه، تفریق، ضرب، تقسیم، ذخیره و مقایسه شامل دستورالعمل‌هایی است که بعد از عملیاتشان پشته بالای پشته می‌شوند؛ بنابراین، به عنوان مثال، faddp st(1), st محاسبه st(1) = st(1) + st(0)، سپس st(0) از بالای پشته حذف می‌کند، بنابراین نتیجه در st(1) بالای پشته در st(0) . تکنولوژی‌های مختلف آموزش از عملیات‌های مختلف در مجموعه‌های ثبت نام مختلف پشتیبانی می‌کنند اما در کل کامل (از MMX به SSE4.2) شامل محاسبات عمومی در ریاضی عدد صحیح یا شناور (اضافه کردن، تفریق، ضرب، تغییر، حداقل، حداکثر سازی، مقایسه، تقسیم یا مربع ریشه) بنابراین برای مثال، paddw mm0, mm1 انجام ۴ موازی ۱۶ بیتی (نشان داده شده w) عدد صحیح می‌افزاید (نشان داده شده padd) از mm0 ارزش به mm1 و در نتیجه در ذخیره mm0 . برخی از دستورالعمل‌های غیرمعمول دیگر شامل مجموع اختلاف‌های مطلق (استفاده می‌شود برای برآورد حرکت در فشرده سازی ویدئو، مانند در MPEG انجام می‌شود) و دستورالعمل تجمع ۱۶ بیتی (مفید برای نرم‌افزار مبتنی بر ترکیب آلفا و فیلتر دیجیتال). برنامه‌های افزودنی شامل دستورالعمل اضافه کردن و تفریق برای درمان مقادیر ذره شناور زوج مانند اعداد پیچیده‌است. این مجموعه دستورالعمل‌ها همچنین شامل دستورالعمل‌های چند کلمه ای ثابت متعدد برای شیفت دادن، قرار دادن و استخراج مقادیر درون ثبات‌ها هستند. به‌طور کلی، پردازنده‌های x86 می‌توانند بارگذاری کرده و استفاده از حافظه سازگار با اندازه هر یک از ثبت نام آن عمل می‌کند. برای بار، فروشگاه و عملیات اسکن، ضمنی هدف / منبع / مقایسه ثبت نام در است al، ax یا eax ثبت نام (بسته به اندازه). ثبت نام cx یا ecx به عنوان یک شمارنده کاهش می‌یابد و عملیات زمانی که شمارنده برابر صفر می‌شود یا (برای اسکن و مقایسه‌ها) هنگامی که نابرابری شناسایی می‌شود، متوقف می‌شود. اشاره گر پشته عموماً به آخرین مقدار ذخیره شده اشاره می‌کند، با این فرض که اندازه آن با حالت عملیاتی پردازنده (یعنی ۱۶، ۳۲ یا ۶۴ بیت) مطابقت دارد با عرض پیش فرض push / pop / call / ret دستورالعمل. فرض بر این است که ارزش برای یک بار یا فروشگاه SIMD در موقعیت‌های مجاور برای ثبت SIMD بسته‌بندی می‌شود و آن‌ها را در ترتیبی از ترتیب کمی محدود می‌کند. بعضی از دستورالعمل‌های بارگذاری و ذخیره SSE به درستی عمل می‌کنند تا هماهنگ سازی ۱۶ بایت انجام شود. دستورالعمل‌های SIMD همچنین شامل دستورالعمل پیشفرشی هستند که بار را انجام می‌دهند اما هیچ ثبتی را هدف قرار نمی‌دهند، که برای بارگیری کش استفاده می‌شود. دستورالعمل‌های SSE همچنین شامل دستورالعمل‌های فروشگاه غیر زمانی هستند که فروشگاه‌ها را مستقیماً به حافظه بدون انجام کش کش اختصاص می‌دهند اگر مقصد قبلاً ذخیره نگردد (در غیر این صورت مانند یک فروشگاه منظم رفتار خواهد کرد) بیشترین دستورالعمل عدد صحیح عمومی و شناور (اما بدون SIMD) می‌تواند از یک پارامتر به عنوان یک منبع پیچیده به عنوان پارامتر منبع دوم استفاده کند. دستورالعمل‌های عدد صحیح نیز می‌توانند یک پارامتر حافظه را به عنوان یک عملگر مقصد اعمال کنند. بسیاری از عملیات ریاضی و منطقی، بسته به نتیجه آنها، این پرچم‌ها را مشخص یا تکمیل می‌کنند. همچنین دستورالعمل‌هایی مانند clc (پرچم حمل روشن) و cmc (پرچم تکمیل حمل) وجود دارد که به‌طور مستقیم بر روی پرچم‌ها کار می‌کند. پرش کوتاه از عملیات امضا شده ۸ بیتی استفاده می‌کند که از دستورالعمل فعلی جبران می‌شود. پرش نزدیک شبیه یک پرش کوتاه است اما با استفاده از عملگر ۱۶ بیتی امضا شده (در حالت واقعی یا محافظت شده) یا عمل ۳۲ بیتی امضا شده (فقط در حالت محافظت شده ۳۲ بیتی). پرش به مراتب یکی است که از پایه کامل بخش استفاده می‌کند: مقدار افست به عنوان آدرس مطلق. به‌طور معمول، پردازنده وقفه موجب صرفه جویی در تمام سایر پردازنده‌های ثبت شده مورد استفاده می‌شود، مگر اینکه آن‌ها برای بازگشت نتیجه عملیات به برنامه تماس (در نرم‌افزار به نام وقفه‌ها) مورد استفاده قرار گیرد. بازگشت تطبیقی از دستورالعمل وقفه iret، که پس از بازگشت، پرچم‌ها را بازیابی می‌کند. قطعهای نرم از نوع توصیف شده در بالا بعضی از سیستم عامل‌ها برای تماس‌های سیستم استفاده می‌شود و همچنین می‌تواند در اشکال زدایی مدرسان وقفه‌های سخت استفاده شود. وقفه‌های سخت باعث وقایع سخت‌افزاری خارجی می‌شوند و باید تمام مقادیر ثبت را حفظ کنند به عنوان وضعیت برنامه فعلی اجرای ناشناخته است. در حالت حفاظت شده، وقفه ممکن است توسط سیستم عامل برای راه اندازی یک سوئیچ کار، که به‌طور خودکار تمام ثبت نام از کار فعال را ذخیره کنید. برای مثال، برای غیرفعال کردن همه وقفه‌های ماسک، می‌توانید از دستور زیر استفاده کنید: cli ثبت نام پرچم‌ها نیز می‌تواند به‌طور مستقیم مشاهده شود. | ## جمع‌بندی | نوشتن به اشاره گر دستورالعمل ساده است - دستور jmp دستورالعمل دستورالعمل را به آدرس مقصد هدایت می‌کند، به عنوان مثال، یک توالی مانند زیر، محتویات eax را به eip : jmp eax در حالت ۶۴ بیتی، دستورالعمل‌ها خود می‌توانند داده‌های مربوط به اشاره گر دستورالعمل را ارجاع دهند، بنابراین دیگر کمتر نیاز به کپی کردن مقدار IP در یک رجیستر دیگر، خواهیم داشت.