مجموعه دستورالعمل: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
جز clean up، typos fixed: نرم افزار ← نرم‌افزار (4)، بطور ← به‌طور، به طور ← به‌طور (24)، موثر ← مؤثر، همان جا ← همان‌جا، یخ با استفاده از AWB
برچسب: ویرایش توسط ویرایشگر خودکار
ابرابزار
برچسب: متن دارای ویکی‌متن نامتناظر
خط ۱:
{{کد ماشین}}
در علوم رایانه، یک '''معماری مجموعه ی دستورالعمل''' (instruction set architecture ('''ISA'''))، نوعی مدل انتزاعی از یک رایانه است که به آن '''معماری''' یا '''معماری رایانه''' نیز می گویند. نمود یک آی اس ای، مثلاً یک [[واحد پردازش مرکزی]]، پیاده سازی( implementation) نام دارد.<br>
 
به‌طور کلی یک آی اس ای، بیانگر انواع داده ی مورد پشتیبانی، [[ثبات پردازنده|رجیسترها]]، پشتیبانی سخت افزاری برای مدیریت [[حافظه دسترسی تصادفی|حافظه اصلی]]، ویژگی‌های اساسی (همچون پایداری حافظه، [[حالت آدرس‌دهی|حالت های آدرس دهی]]، [[حافظه مجازی|حافظه ی مجازی]]) و مدل ورودی/خروجی خانواده ای از پیاده سازی های آی اس ای مورد نظر است.<br>
در علوم رایانه، یک '''معماری مجموعه یمجموعهٔ دستورالعمل''' (instruction set architecture ('''ISA'''))، نوعی مدل انتزاعی از یک رایانه است که به آن '''معماری''' یا '''معماری رایانه''' نیز می گویندمی‌گویند. نمود یک آی اس ای، مثلاً یک [[واحد پردازش مرکزی]]، پیاده سازیپیاده‌سازی( implementation) نام دارد.<br>{{سخ}}
یک آی اس ای، رفتار [[کد ماشین]] را که روی پیاده سازی های آن آی اس ای اجرا می‌شود، مشخص می کند، به گونه‌ای که وابستگی به مشخصات آن پیاده‌سازی نداشته باشد و بدین طریق موجب  سازگاری باینری
به‌طور کلی یک آی اس ای، بیانگر انواع داده یدادهٔ مورد پشتیبانی، [[ثبات پردازنده|رجیسترها]]، پشتیبانی سخت افزاریسخت‌افزاری برای مدیریت [[حافظه دسترسی تصادفی|حافظه اصلی]]، ویژگی‌های اساسی (همچون پایداری حافظه، [[حالت آدرس‌دهی|حالت هایحالت‌های آدرس دهی]]، [[حافظه مجازی|حافظه یحافظهٔ مجازی]]) و مدل ورودی/خروجی خانواده ای از پیاده سازی هایپیاده‌سازی‌های آی اس ای مورد نظر است.<br>{{سخ}}
(binary compatibility) بین پیاده سازی ها می شود. این امر امکان پیاده سازی های متعدد از یک آی اس ای که از لحاظ عملکرد، اندازه فیزیکی، و قیمت تفاوت دارند، ولی می توانند کد ماشین یکسانی را اجرا کنند فراهم می آورد، به گونه ای که می توان یک ماشین با عملکرد پایین و قیمت پایین را، با یک ماشین با قیمت بالاتر و عملکرد بالاتر، بدون نیاز به تعویض نرم‌افزار جایگزین کرد. همچنین، این قابلیت باعث تکامل [[ریزمعماری|ریز معماری]] های پیاده سازی های این آی اس ای می شود، به نحوی که، یک پیاده سازی جدیدتر با کارایی بالاتر از یک آی اس ای، بتواند نرم افزاری را اجرا کند که روی نسل‌های پیشین پیاده‌ سازی کار می کند.<br>
یک آی اس ای، رفتار [[کد ماشین]] را که روی پیاده سازی هایپیاده‌سازی‌های آن آی اس ای اجرا می‌شود، مشخص می کند،می‌کند، به گونه‌ای که وابستگی به مشخصات آن پیاده‌سازی نداشته باشد و بدین طریق موجب  سازگاری باینری
اگر یک [[سیستم عامل]]، یک [[واسط دودویی کاربردی|رابط باینری اپلیکیشن]](application binary interface) استاندارد و سازگار را برای یک آی اس ای خاص حفظ کند، آنگاه کد ماشین برای آن آی اس ای و سیستم عامل، روی پیاده سازی های بعدی آن در آینده و نسخه های جدیدتر آن سیستم عامل اجرا خواهد شد. با این وجود، اگر یک آی اس ای، اجرای چندین سیستم عامل را پشتیبانی کند، این تضمین وجود ندارد که کد ماشین برای یک سیستم عامل، روی سیستم عامل دیگر اجرا شود، مگر اینکه سیستم عامل اول از اجرای کد ماشین ساخته شده برای سیستم عامل دیگر پشتیبانی کند.<br>
(binary compatibility) بین پیادهپیاده‌سازی‌ها سازی ها می شودمی‌شود. این امر امکان پیاده سازی هایپیاده‌سازی‌های متعدد از یک آی اس ای که از لحاظ عملکرد، اندازه فیزیکی، و قیمت تفاوت دارند، ولی می توانندمی‌توانند کد ماشین یکسانی را اجرا کنند فراهم می آورد،می‌آورد، به گونه ای که می توانمی‌توان یک ماشین با عملکرد پایین و قیمت پایین را، با یک ماشین با قیمت بالاتر و عملکرد بالاتر، بدون نیاز به تعویض نرم‌افزار جایگزین کرد. همچنین، این قابلیت باعث تکامل [[ریزمعماری|ریز معماری]]‌های های پیاده سازی هایپیاده‌سازی‌های این آی اس ای می شود،می‌شود، به نحوی که، یک پیاده سازیپیاده‌سازی جدیدتر با کارایی بالاتر از یک آی اس ای، بتواند نرم افزارینرم‌افزاری را اجرا کند که روی نسل‌های پیشین پیاده‌ سازیپیاده‌سازی کار می کندمی‌کند.<br> {{سخ}}
یک آی اس ای را می توان با اضافه کردن دستورالعمل ها یا سایر قابلیت ها و یا اضافه کردن پشتیبانی برای آدرس ها و مقادیر داده ی بزرگتر، بسط داد. در این حالت یک پیاده سازی از آی اس ای های بسط یافته را کماکان می‌توان برای اجرای کد ماشین برای نسخه‌هایی از همان آی اس ای بدون بسط های ذکر شده، استفاده کرد. کد های ماشینی که از این بسط ها استفاده می کنند، فقط روی پیاده سازی هایی اجرا می شوند که از این بسط ها پشتیبانی کنند.<br>
اگر یک [[سیستم عامل]]، یک [[واسط دودویی کاربردی|رابط باینری اپلیکیشن]](application binary interface) استاندارد و سازگار را برای یک آی اس ای خاص حفظ کند، آنگاه کد ماشین برای آن آی اس ای و سیستم عامل، روی پیاده سازی هایپیاده‌سازی‌های بعدی آن در آینده و نسخه هاینسخه‌های جدیدتر آن سیستم عامل اجرا خواهد شد. با این وجود، اگر یک آی اس ای، اجرای چندین سیستم عامل را پشتیبانی کند، این تضمین وجود ندارد که کد ماشین برای یک سیستم عامل، روی سیستم عامل دیگر اجرا شود، مگر اینکه سیستم عامل اول از اجرای کد ماشین ساخته شده برای سیستم عامل دیگر پشتیبانی کند.<br>{{سخ}}
این قابلیت های فراهم کردن سازگاری باینری، باعث شده است که آی اس ای ها، یکی از اساسی ترین فرم های انتزاعی در رایانش باشند.
یک آی اس ای را می توانمی‌توان با اضافه کردن دستورالعمل هادستورالعمل‌ها یا سایر قابلیت ها وقابلیت‌ها یا اضافه کردن پشتیبانی برای آدرس هاآدرس‌ها و مقادیر داده یدادهٔ بزرگتر، بسط داد. در این حالت یک پیاده سازیپیاده‌سازی از آی اس ای هایای‌های بسط یافته را کماکان می‌توان برای اجرای کد ماشین برای نسخه‌هایی از همان آی اس ای بدون بسط هایبسط‌های ذکر شده، استفاده کرد. کد هایکدهای ماشینی که از این بسط هابسط‌ها استفاده می کنند،می‌کنند، فقط روی پیاده سازی هاییپیاده‌سازی‌هایی اجرا می شوندمی‌شوند که از این بسط هابسط‌ها پشتیبانی کنند.<br>{{سخ}}
این قابلیت هایقابلیت‌های فراهم کردن سازگاری باینری، باعث شده استشده‌است که آی اس ای ها،ای‌ها، یکی از اساسی ترین فرماساسی‌ترین هایفرم‌های انتزاعی در رایانش باشند.
 
== مرور ==
معماری مجموعه دستورالعمل را باید از ریز معماری(microarchitecture) افتراق داد. ریز معماری، مجموعه ای از تکنیک هایتکنیک‌های طراحی پردازنده است که در یک پردازنده خاص برای پیادهپیاده‌سازی سازی مجموعه یمجموعهٔ دستورالعمل استفاده می شودمی‌شود. پردازنده هاییپردازنده‌هایی با ریز معماری هایمعماری‌های متفاوت می توانندمی‌توانند یک مجموعه دستورالعمل مشترک داشته باشند. برای مثال، اینتل پنتیوم و Advanced Micro Devices  Athlon تقریباً نسخه‌های مشابهی از مجموعه دستورالعمل x86 را پیاده سازی میپیاده‌سازی کنند،می‌کنند، اما دارای طراحی داخلی کاملاکاملاً متفاوتی هستند.
 
== طبقه بندیطبقه‌بندی آی اس ای ==
یک  آی اس ای را می‌توان به شیوه‌های مختلفی طبقه‌بندی کرد. یک روش طبقه بندیطبقه‌بندی معمول بر مبنای پیچیدگی معماری است. یک [[رایانه با دستورهای پیچیده|''رایانه با مجموعه دستورالعمل پیچیده'']] ( complex instruction set computer) دارای دستورالعمل هایدستورالعمل‌های اختصاصی بسیاری است، که برخی از آن هاآن‌ها ممکن است به ندرت در برنامه هایبرنامه‌های عملی استفاده شوند. یک [[رایانه کم دستور|''رایانه با مجموعه دستورالعمل کاهش یافته'']] ( reduced instruction set computer)، با پیاده سازیپیاده‌سازی کارامد صرف دستورالعمل هاییدستورالعمل‌هایی که به‌طور مکرر در برنامه هابرنامه‌ها استفاده می شوند،می‌شوند، پردازنده را ساده می کند،می‌کند، در عین حال، عملیات کمتر رایج، از طریق ساب روتین ها پیاده سازیروتین‌ها میپیاده‌سازی شوند،می‌شوند، که در نتیجه، افزایش زمان اجرای پردازنده، با استفاده خیلی کم از این عملیات جبران می شودمی‌شود.<ref>{{cite web
|url= http://cs.stanford.edu/people/eroberts/courses/soco/projects/risc/risccisc/
|title= RISC Architecture: RISC vs. CISC
سطر ۱۷ ⟵ ۲۱:
}}</ref>
 
سایر انواع آی اس ای، عبارتند از: معماری هایمعماری‌های ''کلمه دستورالعمل بسیار بلند'' ( very long instruction word) و معماری هایمعماری‌های بسیار مشابه آن نظیر، ''کلمه دستورالعمل بلند'' ( long instruction word)  و ''معماری هایمعماری‌های دستورالعمل واضحاواضحاً موازی''(explicitly parallel instruction computing). هدف از این معماریمعماری‌ها ها بهره گیریبهره‌گیری از [[رایانش موازی|موازی گرایی]] سطح-دستورالعمل با استفاده از سخت افزارسخت‌افزار کمتر در مقایسه با RISC و CISC است. این معماری هامعماری‌ها برای دستیابی به این هدف، کامپایلر را مسئول مشکلات دستورالعمل و زمان بندی میزمان‌بندی کنندمی‌کنند.<br>{{سخ}}
معماری هاییمعماری‌هایی با پیچیدگی‌های حتی کمتر مورد مطالعه قرار گرفته اند،گرفته‌اند، نظیر: ''رایانه با مجموعه دستورالعمل حداقلی'' ( minimal instruction set computer)  و ''رایانه با یک مجموعه دستورالعمل'' (one instruction set computer). این موارد از لحاظ تئوری اهمیت دارند اما استفاده تجاری نداشته اندنداشته‌اند.
 
== دستورالعمل‌ها ==
== دستورالعمل ها ==
زبان ماشین از عبارت هاعبارت‌ها یا دستورالعمل هایدستورالعمل‌های گسسته تشکیل شده استشده‌است. در معماری پردازش، یک دستورالعمل ممکن است حاوی:
* [[آپ کد]] (opcode) ، دستورالعملی که قرار است اجرا شود (مثلاً جمع، کپی، تست)
* هر گونه عملوند آشکار :
::رجیسترها
::رجیستر ها
::مقادیر ثابت/ لیترال
::حالت هایحالت‌های آدرس‌دهی مورد استفاده برای دسترسی به حافظه باشند.
با ترکیب کردن این دستورالعمل هایدستورالعمل‌های ساده، که به‌طور متوالی اجرا می شوند،می‌شوند، یا هدایت توسط دستورالعملهای جریان کنترل، عملیات پیچیده تری تولید می شوندمی‌شوند.
 
=== انواع دستورالعمل ===
=== دستورالعملانواع هادستورالعمل ===
مثال هاییمثال‌هایی از عملیاتی که در  بسیاری از مجموعه هایمجموعه‌های دستورالعمل مرسوم هستند عبارتند از:<br>
 
==== مدیریت داده و عملیات حافظه ====
* ''ست'' کردن یک رجیستر به یک مقدار ثابت
* ''کپی'' کردن داده از یک مکان حافظه یا یک رجیستر به یک مکان حافظه یا یک رجیستر دیگر (یک دستورالعمل ماشین معمولاً move نام دارد، با این حال این اصطلاح گمراه کننده است). برای ذخیره کردن محتوای یک رجیستر، نتیجه ینتیجهٔ یک محاسبه، یا استخراج داده یدادهٔ ذخیره شده برای انجام یک محاسبه بعدی روی آن استفاده می شودمی‌شود. این هااین‌ها معمولاً عملیات بارگذاری و ذخیره سازیذخیره‌سازی ( load and store) نام دارند.
* ''خواندن'' و ''نوشتن'' داده از ابزارهای سخت افزاریسخت‌افزاری
 
==== عملیات محاسباتی و منطقی ====
* این عملیات، مقادیر دو رجیستر را ''جمع''، ''تفریق''، ''ضرب''، یا ''تقسیم'' می کنندمی‌کنند و مقدار حاصل را در یک رجیستر قرار می دهند،می‌دهند، و احتمالاً یک یا بیش از یک کد شرطی را در یک رجیستر وضعیت ست می کنندمی‌کنند.
** ''افزایش مقدار'' یا ''کاهش مقدار'' در برخی آی اس ای ها،ای‌ها، که موجب حذف استخراج عملوند در موارد جزئی می شودمی‌شود.
* ''عملیات بیت به بیت'' را انجام می دهند،می‌دهند، مثلاً بیت هایبیت‌های متناظر  را در یک جفت رجیستر با یکدیگر AND یا OR می کنندمی‌کنند یا اینکه مکمل هر بیت در یک رجیستر را به دست می آورندمی‌آورند.
* دو مقدار را در رجیسترها با هم ''مقایسه'' می‌کنند (برای مثال، برای اینکه بدانند آیا یکی کوچکتر است یا با هم برابرند).
* ''دستورالعمل هایدستورالعمل‌های ممیز-شناور'' برای انجام محاسبات روی اعداد اعشاری
 
==== عملیات جریان کنترل ====
* ''انشعاب'' به مکان دیگری در برنامه و اجرای دستورالعمل هادستورالعمل‌ها در آنجا.
* ''انشعاب شرطی'' به مکان دیگر، اگر یک شرط خاص برقرار شود.
* ''انشعاب غیر مستقیم'' به مکان دیگر.
* ''فراخوانی'' قطعه دیگری از کد و در عین حال ذخیره کردن مکان دستورالعمل بعدی برای بازگشت بعدی به همان‌جا.
 
==== دستورالعملدستورالعمل‌های های پردازنده هایپردازنده‌های فرعی ====
* بارگذاری/ذخیره کردن داده از یک پردازنده فرعی و یا در یک پردازنده فرعی یا معاوضه با رجیسترهای پردازنده اصلی.
* انجام عملیات پردازنده فرعی
 
=== دستورالعمل هایدستورالعمل‌های پیچیده ===
پردازنده هاپردازنده‌ها ممکن است در مجموعه یمجموعهٔ دستورالعمل خود دارای دستورالعملدستورالعمل‌های های پیچیده ایپیچیده‌ای باشند. یک دستورالعمل پیچیده ممکن است کاری را انجام دهد که نیاز به دستورالعمل هایدستورالعمل‌های متعددی روی سایر رایانههارایانه‌ها است. مشخصه چنین دستورالعمل‌هایی این است که حاوی مراحل متعددی هستند، واحدهای عملکردی متعددی را کنترل می کنند، ومی‌کنند، یا اینکه در مقایسه با حجم دستورالعمل هایدستورالعمل‌های ساده ای که توسط پردازنده یپردازندهٔ مورد نظر  پیادهپیاده‌سازی سازی می شوند،می‌شوند، مقیاس بزرگ تریبزرگ‌تری دارند. برخی مثالهای دستورالعمل هایدستورالعمل‌های پیچیده عبارتند از:<br>{{سخ}}
انتقال چندین رجیستر به حافظه یا از حافظه (مخصوصاً پشته) به صورت یکجا.<br>{{سخ}}
انتقال بلاک هایبلاک‌های بزرگ از حافظه (مثلاً، کپی کردن رشته یا انتقال از طریق دسترسی مستقیم به حافظه)<br>{{سخ}}
محاسبات پیچیده روی اعداد صحیح یا اعداد اعشاری (جذر یا توابع متعالی نظیر: لگاریتم، سینوس، کسینوس، و ...)<br>{{سخ}}
دستورالعمل هایدستورالعمل‌های نوع یک-دستورالعمل-چندین-داده( Single instruction, multiple data): یک دستورالعمل یک عملیات را روی مقادیر همگن بسیاری، به صورت موازی، و معمولاً در رجیستر هایرجیسترهای اختصاصی SIMD انجام می دهدمی‌دهد.<br>{{سخ}}
انجام یک دستورالعمل اتمیک "«[[تست و ست]]"» یا سایر دستورالعمل هایدستورالعمل‌های اتمیک خواندن-تغییر-نوشتن.<br>{{سخ}}
دستورالعمل هاییدستورالعمل‌هایی که عملیاتی را در ALU با یک عملوند از حافظه و نه از یک رجیستر انجام می دهندمی‌دهند.
 
دستورالعمل هایدستورالعمل‌های پیچیده، در مجموعه هایمجموعه‌های دستورالعمل CISC، در مقایسه با مجموعه‌های دستورالعمل RISC، بیشتر هستند، اما مجموعه هایمجموعه‌های دستورالعمل RISC نیز ممکن است حاوی آنها باشند. مجموعه هایمجموعه‌های دستورالعمل RISC، به‌طور کلی، حاوی عملیات ALU با عملگر هایعملگرهای حافظه یا دستورالعمل هاییدستورالعمل‌هایی برای انتقال بلوک هایبلوک‌های بزرگ از حافظه نیستند، با این حال، اکثر مجموعه دستورالعمل هایدستورالعمل‌های RISC، حاوی دستورالعمل هایدستورالعمل‌های SIMD یا برداری هستند که عملیات محاسباتی مشابهی را روی قطعات متعددی از داده به صورت همزمان انجام می دهندمی‌دهند. دستورالعمل هایدستورالعمل‌های SIMD، این قابلیت را دارند که بردارهای بزرگ و ماتریس هاماتریس‌ها را در حداقل زمان دستکاری کنند. دستورالعمل هایدستورالعمل‌های SIMD، قابلیت موازی سازی آسان را برای الگوریتم هاییالگوریتم‌هایی که به‌طور معمول در پردازش صدا، تصویر، و ویدئو یافت می شوند،می‌شوند، فراهم می کنندمی‌کنند. پیاده سازی هایپیاده‌سازی‌های متنوعی از SIMD تحت عناوین تجاری مثلاً MMX ،MMX، 3DNow! و AltiVec وارد بازار شده اندشده‌اند.
 
=== کدگذاری دستورالعمل ===
[[File:Mips32 addi.svg|thumb|left|upleft=1.7|یک دستورالعمل ممکن است حاوی چندین قسمت باشد که مشخص کننده عملیات منطقی است و همچنین حاوی آدرس هایآدرس‌های منبع و مقصد و مقادیر ثابت هست. در اینجا دستورالعمل میپس "Add Immediate" نشان داده شده استشده‌است که امکان انتخاب رجیسترهای منبع و مقصد و همچنین جا دادن یک مقدار ثابت را فراهم می کندمی‌کند.]]
در معماری هایمعماری‌های قدیمی، یک دستورالعمل حاوی یک آپ کد است که عملیاتی را که باید انجام گیرد، مثلامثلاً اضافه کردن محتویات حافظه به رجیستر مشخص می کندمی‌کند- و همچنین حاوی چند مشخص کننده یکنندهٔ عملوندی است که ممکن است رجیستررجیسترها، ها، مکان هایمکان‌های حافظه، یا داده یدادهٔ لیترال را مشخص کنند؛ البته ممکن است این مشخص کننده هایکننده‌های عملوندی وجود نداشته باشند. این مشخص کننده هایکننده‌های عملوند ممکن است دارای حالت هایحالت‌های آدرس دهی باشند که معنی آنها را مشخص می کند،می‌کند، یا اینکه در فضاهای ثابت باشند. در معماری هایمعماری‌های کلمه دستورالعمل بسیار بلند (very long instruction word) که حاوی معماری هایمعماری‌های ریز کد بسیاری هستند چندین آپ کد و عملوند به‌طور همزمان در یک دستورالعمل مشخص می شوندمی‌شوند.<br>{{سخ}}
برخی مجموعه هایمجموعه‌های دستورالعمل نامعمول، فاقد فضای آپ کد هستند؛ مثلاً در transport triggered architectures، فقط عملوند/عملوند هاعملوندها وجود دارد.<br>{{سخ}}
[[ماشین مجازی]] Forth و سایر مجموعه هایمجموعه‌های دستورالعمل "بدون عملوند"، فاقد فضا برای مشخص کننده یکنندهٔ عملوند هستند؛ نظیر برخی [[ماشین پشته ای|ماشین هایماشین‌های پشته]] از جمله NOSC . <br>{{سخ}}
دستورالعمل هایدستورالعمل‌های شرطی معمولاً دارای یک فضا برای گزاره هستند- گذاره درواقع، چند بیت کوتاه است که شرایط خاصی را کد گذاری می کند،می‌کند، که موجب می شودمی‌شود یک عملیات انجام شود و نه اینکه انجام نشود. برای مثال، یک دستورالعمل انشعاب شرطی، در صورتیکه شرایط مورد نظر صحیح شود، کنترل را منتقل می کندمی‌کند به گونه ای که روند اجرا به بخش متفاوتی از برنامه برود و اگر شرایط غلط باشد کنترل را منتقل نمی کندنمی‌کند و روند اجرا به شکل متوالی ادامه پیدا می‌کند. همچنین، برخی مجموعه‌های دستورالعمل دارای حرکت هایحرکت‌های شرطی هستند، به گونه ای که اگر شرایط صادق باشد این حرکت اجرا خواهد شد و داده مذکور در مکان مورد نظر ذخیره خواهد شد و اگر شرایط مورد نظر صادق نباشد، اجرا نخواهد شد و مکان مورد نظر نیز تغییر پیدا نخواهد کرد. معماری IBM  z/Architecture دارای یک دستورالعمل ذخیره سازیذخیره‌سازی شرطی مشابهی است. برخی دستورالعمل‌های معدود حاوی یک فضای گزاره ( predicate) در هر دستورالعمل هستند، که گزاره یگزارهٔ انشعابی نام دارد.
 
=== تعداد عملوند هاعملوندها ===
مجموعه هایمجموعه‌های دستورالعمل ممکن است بر مبنای حداکثر تعداد عملوند هاییعملوندهایی که به‌طور آشکار در دستورالعمل‌ها مشخص می‌شوند طبقه‌بندی شوند.<br>{{سخ}}
( در مثال زیر a ،, b و c، در واقع، آدرس های آدرس‌های (مستقیم یا محاسبه شده) هستند که به سلول هایسلول‌های حافظه ارجاع می شوند،می‌شوند، در حالیکه، reg1 و موارد مشابه، همان رجیستر هایرجیسترهای ماشین هستند.) <br>{{سخ}}
{{چپ‌چین}}
C = A+B
{{پایان چپ‌چین}}
* صفر-عملوند (ماشین هایماشین‌های فاقد آدرس) یا همان ماشین هایماشین‌های پشته: تمام عملیات محاسباتی با استفاده از عنصر بالای پشته یا دو موقعیت در پشته رخ می دهندمی‌دهند: <code>push a</code>, <code>push b</code>, <code>add</code>, <code>pop c</code>.
** عمل <code>C = A+B</code> نیازمند ''چهار دستورالعمل'' است. برای ماشین هایماشین‌های پشته اصطلاحات "«صفر-عملوند"» و "«صفر-آدرس"» به عملیات محاسباتی اطلاق می شوندمی‌شوند و به تمام دستورالعمل هادستورالعمل‌ها اطلاق نمی شوند،نمی‌شوند، زیرا دستورالعمل هایدستورالعمل‌های تک-عملوندی push و pop برای دسترسی به حافظه استفاده می شوندمی‌شوند.
* یک-عملوند (''ماشین هایماشین‌های تک آدرسی'') یا همان ماشینماشین‌های های جمع کننده،جمع‌کننده، که شامل رایانه هایرایانه‌های ابتدایی و بسیاری از میکروکنترلر هایمیکروکنترلرهای کوچک می شودمی‌شود: اکثر دستورالعمل هادستورالعمل‌ها یک عملوند سمت راست (یک ثابت، رجیستر یا مکان حافظه) را، همراه با [[انباشتگر|جمع کنندهجمع‌کننده]] ی ضمنی به عنوان عملوند سمت چپ (و مقصد، درصورتیکه تنها باشد) مشخص می کنندمی‌کنند: <code>load a</code>, <code>add b</code>, <code>store c</code>
** عملیات <code>C = A+B</code> نیازمند ''سه دستورالعمل'' است.
* دو عملوند- بسیاری از ماشین هایماشین‌های CISC و RISC تحت این مقوله قرار می گیرندمی‌گیرند.
** معماری CISC: ابتدا a را به c منتقل کن، سپس b را به c اضافه کن.
*** عملیات <code>C = A+B</code> نیازمند دو دستورالعمل است، که به شکل مؤثری، و بدون نیاز به یک دستورالعمل ذخیره‌سازی آشکار، نتیجه را ذخیره می کندمی‌کند.
** معماری CISC- معمولاً ماشین هاماشین‌ها محدود به یک عملوند حافظه به ازای هر دستورالعمل هستند:  <code>load a,reg1</code>; <code>add b,reg1</code>; <code>store reg1,c</code> که نیازمند یک جفت بارگذاری/ذخیره برای هر گونه انتقال حافظه است، که جدا از این است که آیا حاصل <code>add</code>، یک افزایش است که در مکان متفاوتی ذخیره شده است،شده‌است، مثلاً در <code>C = A+B</code>، یا این که در مکان مشابهی از حافظه ذخیره شده استشده‌است:<code>A = A+B</code> ،
*** عملیات <code>C = A+B</code> نیازمند ''سه دستورالعمل'' است.
** معماری RISC- نیازمند بارگذاری هایبارگذاری‌های آشکار حافظه است و دستورالعمل هادستورالعمل‌ها به فرم <code>load a,reg1</code>; <code>load b,reg2</code>; <code>add reg1,reg2</code>; <code>store reg2,c</code> خواهند بود.
عملیات <code>C = A+B</code> نیازمند ''چهار دستورالعمل'' است.
* سه-عملوند، که امکان استفاده مجدد بهتری از داده را فراهم می کند می‌کند.<ref name=Cocke>[http://domino.watson.ibm.com/tchjr/journalindex.nsf/0/22d06c5aa961e78085256bfa0067fa93?OpenDocument The evolution of RISC technology at IBM by John Cocke] &ndash; IBM Journal of R&D, Volume 44, Numbers 1/2, p.48 (2000)</ref>
** معماری CISC- یا یک دستورالعمل می‌شود: <code>add a,b,c</code>
[http://domino.watson.ibm.com/tchjr/journalindex.nsf/0/22d06c5aa961e78085256bfa0067fa93?OpenDocument The evolution of RISC technology at IBM by John Cocke] &ndash; IBM Journal of R&D, Volume 44, Numbers 1/2, p.48 (2000)
</ref>.
**معماری CISC- یا یک دستورالعمل می‌شود: <code>add a,b,c</code>
عملیات <code>C = A+B</code> نیازمند ''یک دستورالعمل'' است.
** معماری CISC- یا روی ماشین هایماشین‌های محدود به دو عملوند حافظه به ازای هر دستورالعمل،
{{چپ‌چین}}
<code>move a,reg1</code>; <code>add reg1,b,c</code>;
{{پایان چپ‌چین}}
*** عملیات <code>C = A+B</code> نیازمند دو ''دستورالعمل'' است.
 
** معماری RISC- دستورالعمل هایدستورالعمل‌های محاسباتی فقط از رجیسترها استفاده می‌کنند، بنابراین نیاز به دستورالعمل هایدستورالعمل‌های آشکار دو-عملوندی بارگذاری/ذخیره داریم: <code>load a,reg1</code>; <code>load b,reg2</code>; <code>add reg1+reg2->reg3</code>; <code>store reg3,c</code>
***عملیات <code>C = A+B</code> نیازمند دو ''دستورالعمل'' است.
*** عملیات <code>C = A+B</code> نیازمند ''چهار دستورالعمل'' است.
**معماری RISC- دستورالعمل های محاسباتی فقط از رجیسترها استفاده می‌کنند، بنابراین نیاز به دستورالعمل های آشکار دو-عملوندی بارگذاری/ذخیره داریم: <code>load a,reg1</code>; <code>load b,reg2</code>; <code>add reg1+reg2->reg3</code>; <code>store reg3,c</code>
*** برخلاف دو-عملوند یا یک-عملوند، این حالت اجازه می دهدمی‌دهد تا هر سه مقدار a, b، و c برای استفاده مجدد بیشتر، در رجیستر هارجیسترها موجود باشند.
***عملیات <code>C = A+B</code> نیازمند ''چهار دستورالعمل'' است.
*عملوند هایعملوندهای بیشتر-برخی ماشین هایماشین‌های CISC، اجازه یاجازهٔ انواعی از حالت هایحالت‌های آدرس دهی را می دهندمی‌دهند که امکان استفاده از بیش از سه عملوند را فراهم می کندمی‌کند (رجیسترها یا دسترسی‌های حافظه)، مثلاً: دستورالعمل ازیابی چند جمله ای VAX  "POLY" .
***برخلاف دو-عملوند یا یک-عملوند، این حالت اجازه می دهد تا هر سه مقدار a، b، و c برای استفاده مجدد بیشتر، در رجیستر ها موجود باشند.
به دلیل تعداد زیاد بیت هایبیت‌های مورد نیاز برای کدگذاری سه رجیستر یک دستورالعمل سه-عملوندی، معماری هایمعماری‌های RISC که دارای دستورالعمل هایدستورالعمل‌های ۱۶ بیتی هستند، تماماً دارای طراحی هایطراحی‌های دو-عملوندی هستند، نظیر: Atmel AVR,  TI MSP43 و برخی نسخه‌های ARM Thumb. معماری هایمعماری‌های RISC که دارای دستورالعمل هایدستورالعمل‌های ۳۲ بیتی هستند، معمولاً دارای طراحی‌های سه-عملوندی هستند، نظیر: [[معماری آرم|ARM]],  AVR32,  MIPS,  Power آی اس ای و معماری هایمعماری‌های SPARC.<br>{{سخ}}
*عملوند های بیشتر-برخی ماشین های CISC، اجازه ی انواعی از حالت های آدرس دهی را می دهند که امکان استفاده از بیش از سه عملوند را فراهم می کند (رجیسترها یا دسترسی‌های حافظه)، مثلاً: دستورالعمل ازیابی چند جمله ای VAX "POLY" .
هر دستورالعمل تعدادی عملوند (رجیستر ها، مکانرجیسترها، هایمکان‌های حافظه، یا مقادیر فوری) را "به طور آشکار" مشخص می کندمی‌کند. برخی دستورالعمل‌ها یک یا بیش از یک عملوند را به‌طور ضمنی فراهم می کنند،می‌کنند، مثلاً از طریق ذخیره شدن در بالای یک پشته، یا در یک رجیستر غیر مستقیم. در حالتی که برخی از عملوند هاعملوندها به‌طور ضمنی داده می‌شوند، به عملوند هایعملوندهای کمتری در دستورالعمل نیاز هست. هنگامی که یک "عملوند مقصد" به‌طور آشکار مقصد را مشخص می کند،می‌کند، باید عملوند دیگری نیز فراهم شود. در نتیجه تعداد عملوند هایعملوندهای کدگذاری شده در یک دستورالعمل، ممکن است با تعداد آرگومان هایآرگومان‌های مورد نیاز از نظر ریاضی برای یک عملیات منطقی یا محاسباتی ( [[آریتی (ریاضی)|arity]]) تفاوت داشته باشد. عملوند هاعملوندها یا در نمایش "آپ کد" دستورالعمل، کدگذاری می‌شوند و یا اینکه به صورت مقادیر یا آدرس، به دنبال آپ کد می آیندمی‌آیند.
به دلیل تعداد زیاد بیت های مورد نیاز برای کدگذاری سه رجیستر یک دستورالعمل سه-عملوندی، معماری های RISC که دارای دستورالعمل های ۱۶ بیتی هستند، تماماً دارای طراحی های دو-عملوندی هستند، نظیر: Atmel AVR, TI MSP43 و برخی نسخه‌های ARM Thumb. معماری های RISC که دارای دستورالعمل های ۳۲ بیتی هستند، معمولاً دارای طراحی‌های سه-عملوندی هستند، نظیر: [[معماری آرم|ARM]], AVR32, MIPS, Power آی اس ای و معماری های SPARC.<br>
هر دستورالعمل تعدادی عملوند (رجیستر ها، مکان های حافظه، یا مقادیر فوری) را "به طور آشکار" مشخص می کند. برخی دستورالعمل‌ها یک یا بیش از یک عملوند را به‌طور ضمنی فراهم می کنند، مثلاً از طریق ذخیره شدن در بالای یک پشته، یا در یک رجیستر غیر مستقیم. در حالتی که برخی از عملوند ها به‌طور ضمنی داده می‌شوند، به عملوند های کمتری در دستورالعمل نیاز هست. هنگامی که یک "عملوند مقصد" به‌طور آشکار مقصد را مشخص می کند، باید عملوند دیگری نیز فراهم شود. در نتیجه تعداد عملوند های کدگذاری شده در یک دستورالعمل، ممکن است با تعداد آرگومان های مورد نیاز از نظر ریاضی برای یک عملیات منطقی یا محاسباتی ( [[آریتی (ریاضی)|arity]]) تفاوت داشته باشد. عملوند ها یا در نمایش "آپ کد" دستورالعمل، کدگذاری می‌شوند و یا اینکه به صورت مقادیر یا آدرس، به دنبال آپ کد می آیند.
 
=== فشار رجیستر ===
فشار رجیستر نمایانگر تعداد رجیستر هایرجیسترهای آزاد در هر زمان از اجرای برنامه است. فشار رجیستر، زمانی که تعداد زیادی از رجیستر هایرجیسترهای موجود در حال استفاده هستند بالاست.بالاست؛ بنابراین هر قدر فشار رجیستر بالاتر باشد، به تعداد دفعات بیشتری لازم است تا محتویات رجیستر به داخل حافظه سرریز شود. افزایش تعداد رجیستر هارجیسترها در یک معماری موجب کاهش فشار رجیستر می شود،می‌شود، اما هزینه را افزایش می دهدمی‌دهد.<ref>{{cite book |last=Page |first=Daniel |title=A Practical Introduction to Computer Architecture |url=https://archive.org/details/practicalintrodu00page |chapter=11. Compilers |year=2009 |publisher=Springer |isbn=978-1-84882-255-9 |page=[https://archive.org/details/practicalintrodu00page/page/n475 464]|bibcode=2009pica.book.....P }}</ref>
 
در حالی که مجموعه‌های دستورالعمل نهفته نظیر Thumb از فشار بسیار بالای رجیستر به دلیل تعداد کم مجموعه رجیستر رنج می برند،می‌برند، اما معماری هایمعماری‌های مجموعه دستورالعمل RISC عمومی نظیر [[معماری میپس|MIPS]] و Alpha دارای فشار رجیستر پایینی هستند. معماریمعماری‌های های مجموعه هایمجموعه‌های دستورالعمل CISC، همچون x86-64، علی رغمعلی‌رغم داشتن مجموعه رجیستر کوچکتر دارای فشار رجیستر کمتری هستند. دلیل این امر وجود تعداد زیادی حالت هایحالت‌های آدرس دهی و بهینه سازیبهینه‌سازی (نظیر آدرس‌دهی تحت رجیستر، عملوند هایعملوندهای حافظه در دستورالعمل هایدستورالعمل‌های ALU، آدرس دهی مستقیم، آدرس دهی مرتبط با شمارنده برنامه و سرریز هایسرریزهای رجیستر-به-رجیستر) است که توسط معماری هایمعماری‌های مجموعه دستورالعمل CISC ارائه می شوندمی‌شوند.<ref>{{cite conference |last1=Venkat |first1=Ashish |last2=Tullsen |first2=Dean M. |title=Harnessing ISA Diversity: Design of a Heterogeneous-ISA Chip Multiprocessor |year=2014 |conference=41st Annual International Symposium on Computer Architecture |url=http://dl.acm.org/citation.cfm?id=2665692}}</ref>
 
=== طول دستورالعمل ===
اندازه یا طول یک دستورالعمل می تواندمی‌تواند بسیار متفاوت باشد؛ از یک مقدار چهار بیتی در برخی [[ریزکنترل‌گر|میکروکنترلرها]] تا چند صد بیت در برخی سیستم هایسیستم‌های VLIW. پردازنده هایپردازنده‌های مورد استفاده در رایانه‌های شخصی، رایانه هایرایانه‌های بزرگ و ابر رایانه ها،رایانه‌ها، دارای اندازه دستورالعمل بین ۸ و ۶۴ بیت هستند. حداکثر اندازه ممکن برای دستورالعمل در x86  برابر با ۱۵ بایت (۱۲۰ بیت) است.<ref>{{cite web|title=Intel® 64 and IA-32 Architectures Software Developer's Manual|url=http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html/|publisher=Intel Corporation|access-date=12 July 2012}}</ref> Within an instruction set, different instructions may have different در داخل یک مجموعه دستورالعمل، دستورالعمل هایدستورالعمل‌های مختلف، ممکن است طول متفاوت داشته باشند. در برخی معماری ها،معماری‌ها، نظیر اکثر RISCRISCها، ها، دستورالعمل هادستورالعمل‌ها دارای طول ثابتی هستند که معمولاً مطابق با اندازه یاندازهٔ [[کلمه (معماری رایانه)|کلمه]] آن معماری می باشندمی‌باشند. در معماری هایمعماری‌های دیگر، دستورالعمل هادستورالعمل‌ها دارای طول متغیر هستند، که معمولاً مضرب هایمضرب‌های صحیح از یک بایت یا یک نیم کلمه هستند. برخی معماری هامعماری‌ها نظیر ARM با Thumb-extension، دارای کدگذاری متغیر ترکیبی است که دو کدگذاری ثابت، معمولاً ۳۲ بیت و ۱۶ بیت است، که در آن، دستورالعمل هادستورالعمل‌ها را نمی تواننمی‌توان به شکل آزادانه با هم ترکیب کرد، و باید در یک انشعاب (یا محدوده استثنا در ARMv8)، بین آنها تعویض انجام شود.
 
یک مجموعه دستورالعمل [[رایانه کم دستور|RISC]]، معمولاً دارای طول دستورالعمل ثابتی است (معمولاً چهار بایت که معادل ۳۲ بیت است)، در حالیکه مجموعه دستورالعمل [[رایانه با دستورهای پیچیده|CISC]] ممکن است دارای دستورالعمل هاییدستورالعمل‌هایی با طول بسیار متغیر باشند( ۱ تا ۱۵ بایت برای x86). مدیریت دستورالعمل هایدستورالعمل‌های دارای طول ثابت در مقایسه با دستورالعمل هایدستورالعمل‌های با طول متغیر، به دلایل مختلفی پیچیدگی کمتری دارد (برای مثال، لازم نیست که چک کنیم که آیا یک دستورالعمل از یک خط حافظه پنهان یا محدوده یمحدودهٔ صفحه حافظه مجازی عبور کرده استکرده‌است یا خیر)، و بنابراین برای بهینه سازی،بهینه‌سازی، تا حدودی سرعت آسان ترآسان‌تر هستند.
 
=== تراکم کد ===
در رایانه هایرایانه‌های قدیمی حافظه گرانگران‌قیمت قیمت بود.بود؛ بنابراین به حداقل رساندن اندازه یاندازهٔ برنامه، معمولاً اهمیت زیادی داشت تا بتوان آن را در حافظه یحافظهٔ محدود جا داد.داد؛ لذا سایز ترکیبی تمام دستورالعمل هایدستورالعمل‌های لازم برای انجام یک کار خاص، یا همان تراکم کد، مشخصه یمشخصهٔ مهمی برای هر مجموعه دستورالعمل بود. رایانههایرایانه‌های دارای تراکم کد بالا، معمولاً دارای دستورالعمل هایدستورالعمل‌های پیچیده برای ورودی رویه، بازگشت هایبازگشت‌های پارامتر شده، حلقه ها،حلقه‌ها، و ... بودند (بنابراین، به صورت عطف به ماسبق، CISC نامیده می شدندمی‌شدند). با این حال، دستورالعمل هایدستورالعمل‌های معمول تر یا پرکاربرد CISC، صرفاً یک عملیات پایه ای ALU، نظیر جمع کردن، را با دسترسی به یک یا بیش از یک عملوند در حافظه (با استفاده از حالت هایحالت‌های آدرس دهی مختلف همچون، مستقیم و غیر مستقیم، اندکسی و ...) ترکیب می کنندمی‌کنند. معماری هایمعماری‌های خاصی ممکن است اجازه دو یا سه عملوند (ازجمله حاصل) را به‌طور مستقیم در حافظه بدهند یا ممکن است قادر باشند اعمالی همچون افزایش خودکار اشاره گر و ... را انجام دهند
مجموعه‌مجموعه دستورالعمل هایدستورالعمل‌های که توسط نرم‌افزار پیادهپیاده‌سازی سازی می شوند،می‌شوند، ممکن است حتی، دستورالعمل های پیچیدهدستورالعمل‌های ترپیچیده‌تر و قدرتمند تری داشته باشند.
 
رایانههایرایانه‌های با مجموعه دستورالعمل کاهش یافته ،یافته، RISC، برای اولین بار، به‌طور گسترده در زمان رشد سریع زیر سیستم هایسیستم‌های حافظه پیاده سازیپیاده‌سازی شدند. آنها تراکم کد را قربانی می کنندمی‌کنند تا مدار پیاده سازیپیاده‌سازی را ساده کنند و سعی می کنندمی‌کنند عملکرد را از طریق فرکانسهای بالاتر ساعت و رجیسترهای بیشتر افزایش دهند. یک دستورالعمل RISC، به‌طور معمول فقط یک عملیات انجام می دهد،می‌دهد، نظیر "«جمع"» کردن رجیستر هارجیسترها یا "«بار گذاری"» از یک مکان حافظه به داخل یک رجیستر. یک مجموعه دستورالعمل RISC، به‌طور معمول، دارای طول دستورالعمل ثابت است، در حالی که یک مجموعه دستورالعمل معمول CISC، دارای دستورالعمل‌هایی با طول بسیار متغیر است. با این حال، از آنجایی که رایانههایرایانه‌های RISC، به‌طور معمول، نیازمند دستورالعملهای بیشتر و معمولاً طولانی ترطولانی‌تر برای پیاده‌سازی یک کار خاص هستند، لذا به‌طور ذاتی استفاده بهینه کمتری از پهنای باند گذرگاه و حافظه‌های نهان می کنندمی‌کنند.
 
برخی معماری هایمعماری‌های مجموعه دستورالعمل RISC نهفته( embedded)، نظیر Thumb و AVR32 به‌طور معمول دارای تراکم بسیار بالایی هستند، که علت آن وجود یک تکنیک به نام "«فشرده سازی کد"» در آن هاآن‌ها است. این تکنیک دو دستورالعمل ۱۶ بیتی را در کنار هم در داخل یک کلمه ۳۲ بیتی بستهبسته‌بندی بندی می کندمی‌کند و سپس در مرحله کدگشایی، بسته بندیبسته‌بندی باز می شودمی‌شود و به شکل دو دستورالعمل اجرا می شودمی‌شود.<ref name=weaver>{{cite conference|last1=Weaver|first1=Vincent M.|last2=McKee|first2=Sally A.|title=Code density concerns for new architectures|year=2009|conference=IEEE International Conference on Computer Design|doi=10.1109/ICCD.2009.5413117|citeseerx=10.1.1.398.1967}}</ref>
 
''رایانههارایانه‌ها با مجموعه دستورالعمل حداقل'' ( Minimal instruction set computers)، فرمی از ماشین پشته هستند که در آن تعداد اندکی دستورالعمل مجزا (۱۶ تا ۶۴) وجود دارد، به گونه‌ای که چندین دستورالعمل را می توانمی‌توان در داخل یک کلمه ماشین جا داد. این نوع از هسته هاهسته‌ها معمولاً برای پیاده سازی،پیاده‌سازی، نیاز به سیلیکون کمتری دارند.دارند؛ بنابراین، می توانمی‌توان آنها را به راحتی به فرم یک [[مدار مجتمع دیجیتال برنامه‌پذیر|آرایه یآرایهٔ درگاهی برنامه پذیر]] ( field-programmable gate array) یا چند هسته ای درآورد. تراکم کد MISC مشابه تراکم کد RISC است. مزیت تراکم  بیشتر دستورالعمل، با وجود نیاز به دستورالعمل هایدستورالعمل‌های بدوی بیشتر برای انجام یک کار، خنثی می شودمی‌شود.<br>{{سخ}}
تحقیقاتی در رابطه با فشرده سازی قابل اجرا به عنوان یک مکانیسم برای بهبود تراکم کد انجام گرفته استگرفته‌است. ریاضیات پیچیدگی کولموگروف، چالش هاچالش‌ها و محدودیت هایمحدودیت‌های این مکانیسم را توصیف می کندمی‌کند.
 
== نمایش ==
دستورالعمل هاییدستورالعمل‌هایی که یک برنامه را تشکیل می دهند،می‌دهند، به ندرت با استفاده از فرم داخلی عددی آنها (کد ماشین) مشخص می‌شوند. این دستورالعمل هادستورالعمل‌ها ممکن است توسط برنامه نویس ها،برنامه‌نویس‌ها، با استفاده از یک زبان اسمبلی مشخص شوند، یا به‌طور شایع تر، ممکن است به وسیله [[کامپایلر]] ها‌ها از زبانهای برنامه نویسیبرنامه‌نویسی تولید شوند.
 
=== طراحی ===
طراحی مجموعه هایمجموعه‌های دستورالعمل یک مسئله پیچیده استپیچیده‌است. دو مرحله در تاریخ، برای ریزپردازنده هاریزپردازنده‌ها وجود داشته استداشته‌است. در اولین مرحله، ''رایانههایرایانه‌های دارای مجموعه دستورالعمل پیچیده'' ( CISC) بودند، که دارای دستورالعمل هایدستورالعمل‌های مختلف بسیاری بود. با این حال، در دهه ۱۹۷۰ مکان هاییمکان‌هایی نظیر IBM، تحقیقاتی را انجام دادند و دریافتند که بسیاری از دستورالعمل هایدستورالعمل‌های این مجموعه را می توانمی‌توان حذف کرد. نتیجه آن، ''رایانههایرایانه‌های دارای مجموعه دستورالعمل کاهش یافته'' (RISC) بود که نوعی معماری است که از یک مجموعه یمجموعهٔ کوچکتر از دستورالعمل هادستورالعمل‌ها استفاده می کندمی‌کند. یک مجموعه دستورالعمل ساده تر،ساده‌تر، به‌طور بالقوه می تواندمی‌تواند موجب سرعت هایسرعت‌های بیشتر، کاهش اندازه پردازنده، و کاهش مصرف انرژی شود. با این حال، یک مجموعه ی پیچیدهمجموعهٔ تر،پیچیده‌تر، ممکن است عملیات رایج را بهینه سازیبهینه‌سازی کند، کارایی حافظه و [[حافظه نهان سی‌پی‌یو|حافظه یحافظهٔ نهان]] را افزایش دهد، یا برنامه نویسیبرنامه‌نویسی را ساده کند.<br>{{سخ}}
برخی طراحان مجموعه دستورالعمل، یک یا بیش از یک آپ کد را برای انواعی از فراخوانی هایفراخوانی‌های سیستم یا وقفه هایوقفه‌های نرم‌افزاری رزرو می کنندمی‌کنند. برای مثال، MOS Technology 6502 از 00H استفاده می کندمی‌کند و Zilog Z80 از هشت کد  C7,CF,D7,DF,E7,EF,F7,FFH استفاده می کنند،می‌کنند،<ref>{{cite web|last=Ganssle|first=Jack|url=https://www.embedded.com/electronics-blogs/break-points/4023293/Proactive-Debugging|title=Proactive Debugging|date=February 26, 2001|website=embedded.com}}</ref> در حالیکه Motorola 68000 از کدهایی در محدوده یمحدودهٔ A000..AFFFH استفاده می کندمی‌کند.<br>{{سخ}}
اگر یک مجموعه دستورالعمل، ملزومات مجازی سازی پوپک و گلدبرگ (Popek and Goldberg virtualization requirements) را برآورده کند، آنگاه پیادهپیاده‌سازی سازی ماشین هایماشین‌های مجازی سریع، بسیار آسان ترآسان‌تر خواهد بود.<br>{{سخ}}
اگر وضعیت "«برنامه نویسی نشده ی"» حافظه به شکل دستورالعمل تهی (NOP) تفسیر شود، آن گاه پیاده سازیپیاده‌سازی NOP slide که در immunity-aware programming استفاده شده است،شده‌است، بسیار آسان ترآسان‌تر خواهد بود.<br>{{سخ}}
اگر مجموعه دستورالعمل قادر به پشتیبانی از قابلیت هاییقابلیت‌هایی نظیر استخراج و جمع( fetch-and-add)، بارگیری-لینک/ذخیره سازیذخیره‌سازی-مشروط( load-linked/store-conditional)، یا عمل مقایسه و جابجایی(compare-and-swap) اتمیک باشد، آنگاه در یک سیستم با چندین پردازنده، پیادهپیاده‌سازی سازی الگوریتم هایالگوریتم‌های همگام سازی غیر مسدودکننده، بسیار آسان ترآسان‌تر خواهد بود.
 
== پیاده سازیپیاده‌سازی مجموعه دستورالعمل ==
هر مجموعه دستورالعمل داده شده را می توانمی‌توان به شیوه‌های متفاوتی پیاده‌سازی کرد. تمام شیوهشیوه‌های های پیاده سازیپیاده‌سازی یک مجموعه دستورالعمل خاص، یک مدل برنامه نویسیبرنامه‌نویسی مشابه فراهم می‌کند. و تمام پیاده سازی هایپیاده‌سازی‌های این مجموعه دستورالعمل، قادرند تا فایل یا برنامه هایبرنامه‌های قابل اجرای مشابهی را اجرا کنند. شیوه هایشیوه‌های مختلف پیاده سازیپیاده‌سازی یک مجموعه دستورالعمل، موجب توازن هایتوازن‌های مختلفی بین هزینه، عملکرد، مصرف انرژی، اندازه، و ... می‌شود.
 
مهندسان در هنگام طراحی کردن [[ریزمعماری|ریز معماری]] یک پردازنده، از قطعات مدار الکترونیکی شش میخ شده( hard-wired) (که معمولاً به‌طور جداگانه طراحی می‌شوند)، همچون جمع کننده ها،جمع‌کننده‌ها، مالتی پلکسرپلکسرها، ها، شمارنده ها،شمارنده‌ها، رجیسترها، ALU هاALUها و ... استفاده می کنندمی‌کنند. سپس معمولاً از انواعی از زبان‌های انتقال رجیستر ( register transfer language) برای توصیف کدگشایی و توالی بندی هر دستورالعمل آی اس ای، با استفاده از این ریز معماری فیزیکی استفاده می شودمی‌شود. دو روش اساسی برای ساختن یک [[واحد کنترل]]( control unit) برای پیاده‌سازی این توصیفات وجود دارد (اگرچه بسیاری از طراحی هاطراحی‌ها از شیوه‌های بینابین استفاده می کنندمی‌کنند).
* ۱. برخی طراحی هایطراحی‌های رایانه، تمام کد گشایی و توالی بندی  مجموعه دستورالعمل را شش میخ می کنند،می‌کنند، درست شبیه مابقی ریز معماری.
* ۲. طراحی هایطراحی‌های دیگر از روتین هایروتین‌های ریزکد یا جداول (یا هر دو) برای این کار استفاده می‌کنند- به‌طور معمول به شکل [[حافظه تنها خواندنی|ROM]] های‌های روی چیپ یا PLA هاPLAها یا هر دو (اگرچه به‌طور تاریخی RAM هاRAMها و ROM هایROMهای جداگانه استفاده شده اندشده‌اند). Western Digital MCP-1600 یک مثال قدیمی است که از یک ROM اختصاصی مجزا برای میکرو کد استفاده می کندمی‌کند.
 
برخی طراحی هاطراحی‌ها از ترکیبی از طراحی شش میقه و میکروکد برای واحد کنترل استفاده می کنندمی‌کنند.
برخی طراحی هایطراحی‌های پردازنده از یک مخزن کنترل قابل نوشتن (writable control store) استفاده می کنندمی‌کنند- آنها مجموعه دستورالعمل مورد نظر را در یک RAM قابل نوشتن یا فلش، در داخل پردازنده (مثلاً پردازنده Rekursiv) یا یک FPGA (رایانش قابل پیکربندی) کامپایل می کنندمی‌کنند.<ref>{{cite web|url=http://cpushack.net/CPU/cpu7.html |title=Great Microprocessors of the Past and Present (V 13.4.0) |website=cpushack.net |access-date=2014-07-25}}</ref>
 
یک آی اس ای را می توانمی‌توان در نرم‌افزار با استفاده از یک [[مفسر (رایانه)|تفسیرگر]] شبیه سازیشبیه‌سازی کرد. به‌طور طبیعی، به دلیل سربار ناشی از تفسیر، این روش کندتر از اجرای مستقیم برنامه هابرنامه‌ها روی سخت افزار شبیه سازیسخت‌افزار شدهشبیه‌سازی است،شده‌است، مگر اینکه سخت افزاریسخت‌افزاری که شبیه سازشبیه‌ساز را اجرا می کند،می‌کند، چندین برابر سریع تر باشد. امروزه به‌طور رایجی، فروشندگان آی اس ایها یا ریز معماری هایمعماری‌های جدید، شبیه سازهای نرمشبیه‌سازهای افزارینرم‌افزاری را پیش از آماده شدن پیادهپیاده‌سازی سازی سخت افزاری،سخت‌افزاری، در اختیار توسعه دهندگان نرم‌افزار قرار می دهندمی‌دهند. <br>{{سخ}}
معمولاً جزئیات پیاده سازیپیاده‌سازی مورد نظر، تاثیرتأثیر بسیاری روی دستورالعمل هایدستورالعمل‌های خاص انتخاب شده برای مجموعه دستورالعمل مورد نظر دارند. برای مثال، بسیاری از پیاده سازی هایپیاده‌سازی‌های [[خط لوله (رایانه)|خط لوله]] دستورالعمل، فقط اجازه می دهندمی‌دهند تا یک بارگذاری حافظه یا ذخیره سازیذخیره‌سازی حافظه به ازای هر دستورالعمل انجام شود، که منجر به معماری بارگیری-ذخیره سازیذخیره‌سازی (RISC) می شودمی‌شود. به عنوان مثال دیگر، برخی روش‌های ابتدایی پیاده سازیپیاده‌سازی خط لوله دستورالعمل، منجر به یک درگاه تاخیرتأخیر ( delay slot) شد.
 
نیاز روز افزونروزافزون به [[پردازشگر سیگنال دیجیتال|پردازش سیگنال دیجیتال]] با سرعت بالا، جهت رویه را معکوس کرده استکرده‌است و باعث شده استشده‌است تا پیادهپیاده‌سازی سازی دستورالعمل هادستورالعمل‌ها به شیوه هایشیوه‌های خاصی انجام گیرد. برای مثال، دستورالعمل MACH در یک پردازشگر سیگنال دیجیتال، برای انجام سریع فیلترهای دیجیتال، باید از یک نوع [[معماری هاروارد]] استفاده کند، که به‌طور همزمان یک دستورالعمل و دو کلمه داده را استخراج می کندمی‌کند و نیازمند یک ضرب کننده یکنندهٔ ضرب کن-جمع کن (multiply–accumulate) تک چرخه ای است.
 
== جستارهای وابسته ==
* [[مجموعه دستورالعمل استاندارد رمزگذاری پیشرفته]]
* [[معماری رایانه]]
* [[آپ‌کد]]
* [[طراحی پردازنده]]
سطر ۱۵۸ ⟵ ۱۶۲:
 
== منابع ==
{{پانویس}}
{{یادکرد-ویکی
|پیوند=https://en.wikipedia.org/wiki/Instruction_set_architecture