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

محتوای حذف‌شده محتوای افزوده‌شده
جزبدون خلاصۀ ویرایش
خط ۱:
در علوم کامپیوتر، یک '''معماری مجموعه ی دستورالعمل''' (instruction set architecture ('''ISA'''))، نوعی مدل انتزاعی از یک کامپیوتر است که به آن '''معماری''' یا '''معماری کامپیوتر''' نیز می گویند. نمود یک ISA، مثلاً یک [[واحد پردازش مرکزی]]، پیاده سازی(به انگلیسی: implementation) نام دارد.<br>
به طور کلی یک ISA، بیانگر انواع داده ی مورد پشتیبانی، [[ثبات پردازنده|رجیسترها]]، پشتیبانی سخت افزاری برای مدیریت [[حافظه دسترسی تصادفی|حافظه اصلی]]، ویژگی‌های اساسی (همچون پایداری حافظه، [[حالت آدرس‌دهی|مد های آدرس دهی]]، [[حافظه مجازی|حافظه ی مجازی]]) و مدل ورودی/خروجی خانواده ای از پیاده سازی های ISA مورد نظر است.<br>
یک ISA، رفتار [[کد ماشین]] را که روی پیاده سازی های آن ISA اجرا می‌شود، مشخص می کند، به گونه‌ای که وابستگی به مشخصات آن پیاده‌سازی نداشته باشد و بدین طریق موجب  سازگاری باینری
(به انگلیسی:binary compatibility) بین پیاده سازی ها می شود. این امر امکان پیاده سازی های متعدد از یک ISA که از لحاظ عملکرد، اندازه فیزیکی، و قیمت تفاوت دارند، ولی می توانند کد ماشین یکسانی را اجرا کنند فراهم می آورد، به گونه ای که می توان یک ماشین با عملکرد پایین و قیمت پایین را، با یک ماشین با قیمت بالاتر و عملکرد بالاتر، بدون نیاز به تعویض نرم افزار جایگزین کرد. همچنین، این قابلیت باعث تکامل [[ریزمعماری|ریز معماری]] های پیاده سازی های این ISA می شود، به نحوی که، یک پیاده سازی جدیدتر با کارایی بالاتر از یک ISA، بتواند نرم افزاری را اجرا کند که روی نسل‌های پیشین پیاده‌ سازی کار می کند.<br>
اگر یک [[سیستم عامل]]، یک [[واسط دودویی کاربردی|رابط باینری اپلیکیشن]](به انگلیسی:application binary interface) استاندارد و سازگار را برای یک ISA خاص حفظ کند، آنگاه کد ماشین برای آن ISA و سیستم عامل، روی پیاده سازی های بعدی آن در آینده و نسخه های جدیدتر آن سیستم عامل اجرا خواهد شد. با این وجود، اگر یک ISA، اجرای چندین سیستم عامل را پشتیبانی کند، این تضمین وجود ندارد که کد ماشین برای یک سیستم عامل، روی سیستم عامل دیگر اجرا شود، مگر اینکه سیستم عامل اول از اجرای کد ماشین ساخته شده برای سیستم عامل دیگر پشتیبانی کند.<br>
یک ISA را می توان با اضافه کردن دستورالعمل ها یا سایر قابلیت ها و یا اضافه کردن پشتیبانی برای آدرس ها و مقادیر داده ی بزرگتر، بسط داد. در این حالت یک پیاده سازی از ISA های بسط یافته را کماکان می‌توان برای اجرای کد ماشین برای نسخه‌هایی از همان ISA بدون بسط های ذکر شده، استفاده کرد. کد های ماشینی که از این بسط ها استفاده می کنند، فقط روی پیاده سازی هایی اجرا می شوند که از این بسط ها پشتیبانی کنند.<br>
این قابلیت های فراهم کردن سازگاری باینری، باعث شده است که ISA ها، یکی از اساسی ترین فرم های انتزاعی در رایانش باشند.
== مرور ==
معماری مجموعه دستورالعمل را باید از ریز معماری(به انگلیسی:microarchitecture) افتراق داد. ریز معماری، مجموعه ای از تکنیک های طراحی پردازنده است که در یک پردازنده خاص برای پیاده سازی مجموعه ی دستورالعمل استفاده می شود. پردازنده هایی با ریز معماری های متفاوت می توانند یک مجموعه دستورالعمل مشترک داشته باشند. برای مثال، اینتل پنتیوم و Advanced Micro Devices Athlon تقریباً نسخه‌های مشابهی از مجموعه دستورالعمل x86 را پیاده سازی می کنند، اما دارای طراحی داخلی کاملا متفاوتی هستند.
== طبقه بندی ISA ==
یک  ISA را می‌توان به شیوه‌های مختلفی طبقه‌بندی کرد. یک روش طبقه بندی معمول بر مبنای پیچیدگی معماری است. یک [[رایانه با دستورهای پیچیده|کامپیوتر با مجموعه دستورالعمل پیچیده]] (به انگلیسی: complex instruction set computer) دارای دستورالعمل های اختصاصی بسیاری است، که برخی از آن ها ممکن است به ندرت در برنامه های عملی استفاده شوند. یک [[رایانه کم دستور|کامپیوتر با مجموعه دستورالعمل کاهش یافته]] (به انگلیسی: reduced instruction set computer)، با پیاده سازی کارامد صرف دستورالعمل هایی که به طور مکرر در برنامه ها استفاده می شوند، پردازنده را ساده می کند، در عین حال، عملیات کمتر رایج، از طریق ساب روتین ها پیاده سازی می شوند، که در نتیجه، افزایش زمان اجرای پردازنده، با استفاده خیلی کم از این عملیات جبران می شود.<br>
سایر انواع ISA، عبارتند از: معماری های کلمه دستورالعمل بسیار بلند (به انگلیسی: very long instruction word) و معماری های بسیار مشابه آن نظیر، کلمه دستورالعمل بلند (به انگلیسی: long instruction word)  و معماری های دستورالعمل واضحا موازی(به انگلیسی:explicitly parallel instruction computing). هدف از این معماری ها بهره گیری از [[رایانش موازی|موازی گرایی]] سطح-دستورالعمل با استفاده از سخت افزار کمتر در مقایسه با RISC و CISC است. این معماری ها برای دستیابی به این هدف، کامپایلر را مسئول مشکلات دستورالعمل و زمان بندی می کنند.<br>
معماری هایی با پیچیدگی‌های حتی کمتر مورد مطالعه قرار گرفته اند، نظیر: کامپیوتر مجموعه دستورالعمل حداقلی (به انگلیسی: minimal instruction set computer)  و کامپیوتر تک مجموعه دستورالعمل (به انگلیسی:one instruction set computer). این موارد از لحاظ تئوری اهمیت دارند اما استفاده تجاری نداشته اند.
 
== دستورالعمل ها ==
خط ۲۵:
==== مدیریت داده و عملیات حافظه ====
* ''ست'' کردن یک رجیستر به یک مقدار ثابت<br>
* ''کپی'' کردن داده از یک مکان حافظه یا یک رجیستر به یک مکان حافظه یا یک رجیستر دیگر (یک دستورالعمل ماشین معمولاً move نام دارد، با این حال این اصطلاح گمراه کننده است). برای ذخیره کردن محتوای یک رجیستر، نتیجه ی یک محاسبه، یا استخراج داده ی ذخیره شده برای انجام یک محاسبه بعدی روی آن استفاده می شود. این ها معمولاً عملیات بارگذاری و ذخیره سازی (به انگلیسی: load and store) نام دارند.<br>
* ''خواندن'' و ''نوشتن'' داده از ابزارهای سخت افزاری
 
خط ۵۰:
انتقال بلاک های بزرگ از حافظه (مثلاً، کپی کردن رشته یا انتقال از طریق دسترسی مستقیم به حافظه)<br>
محاسبات پیچیده روی اعداد صحیح یا اعداد اعشاری (جذر یا توابع متعالی نظیر: لگاریتم، سینوس، کسینوس، و ...)<br>
دستورالعمل های نوع یک-دستورالعمل-چندین-داده(به انگلیسی: Single instruction, multiple data): یک دستورالعمل یک عملیات را روی مقادیر همگن بسیاری، به صورت موازی، و معمولاً در رجیستر های اختصاصی SIMD انجام می دهد.<br>
انجام یک دستورالعمل اتمیک "[[تست و ست]]" یا سایر دستورالعمل های اتمیک خواندن-تغییر-نوشتن.<br>
دستورالعمل هایی که عملیاتی را در ALU با یک عملوند از حافظه و نه از یک رجیستر انجام می دهند.<br>
خط ۶۱:
برخی مجموعه های دستورالعمل نامعمول، فاقد فضای آپ کد هستند؛ مثلاً در transport triggered architectures، فقط عملوند/عملوند ها وجود دارد.<br>
[[ماشین مجازی]] Forth و سایر مجموعه های دستورالعمل "بدون عملوند"، فاقد فضا برای مشخص کننده ی عملوند هستند؛ نظیر برخی [[ماشین پشته ای|ماشین های پشته]] از جمله NOSC . <br>
دستورالعمل های شرطی معمولاً دارای یک فضا برای گزاره هستند- گذاره درواقع، چند بیت کوتاه است که شرایط خاصی را کد گذاری می کند، که موجب می شود یک عملیات انجام شود و نه اینکه انجام نشود. برای مثال، یک دستورالعمل انشعاب شرطی، در صورتیکه شرایط مورد نظر صحیح شود، کنترل را منتقل می کند به گونه ای که روند اجرا به بخش متفاوتی از برنامه برود و اگر شرایط غلط باشد کنترل را منتقل نمی کند و روند اجرا به شکل متوالی ادامه پیدا می‌کند. همچنین، برخی مجموعه‌های دستورالعمل دارای حرکت های شرطی هستند، به گونه ای که اگر شرایط صادق باشد این حرکت اجرا خواهد شد و داده مذکور در مکان مورد نظر ذخیره خواهد شد و اگر شرایط مورد نظر صادق نباشد، اجرا نخواهد شد و مکان مورد نظر نیز تغییر پیدا نخواهد کرد. معماری IBM z/Architecture دارای یک دستورالعمل ذخیره سازی شرطی مشابهی است. برخی دستورالعمل‌های معدود حاوی یک فضای گزاره (به انگلیسی: predicate) در هر دستورالعمل هستند، که گزاره ی انشعابی نام دارد.
 
=== تعداد عملوند ها ===