مجموعه دستورالعمل: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
جز clean up، typos fixed: نرم افزار ← نرمافزار (4)، بطور ← بهطور، به طور ← بهطور (24)، موثر ← مؤثر، همان جا ← همانجا، یخ با استفاده از AWB برچسب: ویرایش توسط ویرایشگر خودکار |
ابرابزار برچسب: متن دارای ویکیمتن نامتناظر |
||
خط ۱:
{{کد ماشین}}
در علوم رایانه، یک '''معماری مجموعه ی دستورالعمل''' (instruction set architecture ('''ISA'''))، نوعی مدل انتزاعی از یک رایانه است که به آن '''معماری''' یا '''معماری رایانه''' نیز می گویند. نمود یک آی اس ای، مثلاً یک [[واحد پردازش مرکزی]]، پیاده سازی( implementation) نام دارد.<br>▼
بهطور کلی یک آی اس ای، بیانگر انواع داده ی مورد پشتیبانی، [[ثبات پردازنده|رجیسترها]]، پشتیبانی سخت افزاری برای مدیریت [[حافظه دسترسی تصادفی|حافظه اصلی]]، ویژگیهای اساسی (همچون پایداری حافظه، [[حالت آدرسدهی|حالت های آدرس دهی]]، [[حافظه مجازی|حافظه ی مجازی]]) و مدل ورودی/خروجی خانواده ای از پیاده سازی های آی اس ای مورد نظر است.<br>▼
▲در علوم رایانه، یک '''معماری
یک آی اس ای، رفتار [[کد ماشین]] را که روی پیاده سازی های آن آی اس ای اجرا میشود، مشخص می کند، به گونهای که وابستگی به مشخصات آن پیادهسازی نداشته باشد و بدین طریق موجب سازگاری باینری▼
▲بهطور کلی یک آی اس ای، بیانگر انواع
(binary compatibility) بین پیاده سازی ها می شود. این امر امکان پیاده سازی های متعدد از یک آی اس ای که از لحاظ عملکرد، اندازه فیزیکی، و قیمت تفاوت دارند، ولی می توانند کد ماشین یکسانی را اجرا کنند فراهم می آورد، به گونه ای که می توان یک ماشین با عملکرد پایین و قیمت پایین را، با یک ماشین با قیمت بالاتر و عملکرد بالاتر، بدون نیاز به تعویض نرمافزار جایگزین کرد. همچنین، این قابلیت باعث تکامل [[ریزمعماری|ریز معماری]] های پیاده سازی های این آی اس ای می شود، به نحوی که، یک پیاده سازی جدیدتر با کارایی بالاتر از یک آی اس ای، بتواند نرم افزاری را اجرا کند که روی نسلهای پیشین پیاده سازی کار می کند.<br> ▼
▲یک آی اس ای، رفتار [[کد ماشین]] را که روی
اگر یک [[سیستم عامل]]، یک [[واسط دودویی کاربردی|رابط باینری اپلیکیشن]](application binary interface) استاندارد و سازگار را برای یک آی اس ای خاص حفظ کند، آنگاه کد ماشین برای آن آی اس ای و سیستم عامل، روی پیاده سازی های بعدی آن در آینده و نسخه های جدیدتر آن سیستم عامل اجرا خواهد شد. با این وجود، اگر یک آی اس ای، اجرای چندین سیستم عامل را پشتیبانی کند، این تضمین وجود ندارد که کد ماشین برای یک سیستم عامل، روی سیستم عامل دیگر اجرا شود، مگر اینکه سیستم عامل اول از اجرای کد ماشین ساخته شده برای سیستم عامل دیگر پشتیبانی کند.<br>▼
▲(binary compatibility) بین
یک آی اس ای را می توان با اضافه کردن دستورالعمل ها یا سایر قابلیت ها و یا اضافه کردن پشتیبانی برای آدرس ها و مقادیر داده ی بزرگتر، بسط داد. در این حالت یک پیاده سازی از آی اس ای های بسط یافته را کماکان میتوان برای اجرای کد ماشین برای نسخههایی از همان آی اس ای بدون بسط های ذکر شده، استفاده کرد. کد های ماشینی که از این بسط ها استفاده می کنند، فقط روی پیاده سازی هایی اجرا می شوند که از این بسط ها پشتیبانی کنند.<br>▼
▲اگر یک [[سیستم عامل]]، یک [[واسط دودویی کاربردی|رابط باینری اپلیکیشن]](application binary interface) استاندارد و سازگار را برای یک آی اس ای خاص حفظ کند، آنگاه کد ماشین برای آن آی اس ای و سیستم عامل، روی
این قابلیت های فراهم کردن سازگاری باینری، باعث شده است که آی اس ای ها، یکی از اساسی ترین فرم های انتزاعی در رایانش باشند.▼
▲یک آی اس ای را
▲این
== مرور ==
معماری مجموعه دستورالعمل را باید از ریز معماری(microarchitecture) افتراق داد. ریز معماری، مجموعه ای از
==
یک
|url= http://cs.stanford.edu/people/eroberts/courses/soco/projects/risc/risccisc/
|title= RISC Architecture: RISC vs. CISC
سطر ۱۷ ⟵ ۲۱:
}}</ref>
سایر انواع آی اس ای، عبارتند از:
== دستورالعملها ==
== دستورالعمل ها ==▼
زبان ماشین از
* [[آپ کد]] (opcode)
* هر گونه عملوند آشکار
::رجیسترها
::مقادیر ثابت/ لیترال
::
با ترکیب کردن این
==== مدیریت داده و عملیات حافظه ====
* ''ست'' کردن یک رجیستر به یک مقدار ثابت
* ''کپی'' کردن داده از یک مکان حافظه یا یک رجیستر به یک مکان حافظه یا یک رجیستر دیگر (یک دستورالعمل ماشین معمولاً move نام دارد، با این حال این اصطلاح گمراه کننده است). برای ذخیره کردن محتوای یک رجیستر،
* ''خواندن'' و ''نوشتن'' داده از ابزارهای
==== عملیات محاسباتی و منطقی ====
* این عملیات، مقادیر دو رجیستر را ''جمع''، ''تفریق''، ''ضرب''، یا ''تقسیم''
** ''افزایش مقدار'' یا ''کاهش مقدار'' در برخی آی اس
* ''عملیات بیت به بیت'' را انجام
* دو مقدار را در رجیسترها با هم ''مقایسه'' میکنند (برای مثال، برای اینکه بدانند آیا یکی کوچکتر است یا با هم برابرند).
* ''
==== عملیات جریان کنترل ====
* ''انشعاب'' به مکان دیگری در برنامه و اجرای
* ''انشعاب شرطی'' به مکان دیگر، اگر یک شرط خاص برقرار شود.
* ''انشعاب غیر مستقیم'' به مکان دیگر.
* ''فراخوانی'' قطعه دیگری از کد و در عین حال ذخیره کردن مکان دستورالعمل بعدی برای بازگشت بعدی به همانجا.
====
* بارگذاری/ذخیره کردن داده از یک پردازنده فرعی
* انجام عملیات پردازنده فرعی
===
انتقال چندین رجیستر به حافظه یا از حافظه (مخصوصاً پشته) به صورت یکجا.
انتقال
محاسبات پیچیده روی اعداد صحیح یا اعداد اعشاری (جذر یا توابع متعالی نظیر: لگاریتم، سینوس، کسینوس، و
انجام یک دستورالعمل اتمیک
=== کدگذاری دستورالعمل ===
[[File:Mips32 addi.svg|thumb|left|upleft=1.7|یک دستورالعمل ممکن است حاوی چندین قسمت باشد که مشخص کننده عملیات منطقی است و همچنین حاوی
در
برخی
[[ماشین مجازی]] Forth و سایر
=== تعداد
(
{{چپچین}}
C = A+B
{{پایان چپچین}}
* صفر-عملوند (
** عمل <code>C = A+B</code> نیازمند ''چهار دستورالعمل'' است. برای
* یک-عملوند (''
** عملیات <code>C = A+B</code> نیازمند ''سه دستورالعمل'' است.
* دو عملوند- بسیاری از
** معماری CISC: ابتدا a را به c منتقل کن، سپس b را به c اضافه کن.
*** عملیات <code>C = A+B</code> نیازمند دو دستورالعمل است، که به شکل مؤثری، و بدون نیاز به یک دستورالعمل ذخیرهسازی آشکار، نتیجه را ذخیره
** معماری CISC- معمولاً
*** عملیات <code>C = A+B</code> نیازمند ''سه دستورالعمل'' است.
** معماری RISC- نیازمند
عملیات <code>C = A+B</code> نیازمند ''چهار دستورالعمل'' است.
* سه-عملوند، که امکان استفاده مجدد بهتری از داده را فراهم
** معماری CISC- یا یک دستورالعمل میشود: <code>add a,b,c</code>▼
▲**معماری 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>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>
*** برخلاف دو-عملوند یا یک-عملوند، این حالت اجازه
▲***عملیات <code>C = A+B</code> نیازمند ''چهار دستورالعمل'' است.
*
▲***برخلاف دو-عملوند یا یک-عملوند، این حالت اجازه می دهد تا هر سه مقدار a، b، و c برای استفاده مجدد بیشتر، در رجیستر ها موجود باشند.
به دلیل تعداد زیاد
▲*عملوند های بیشتر-برخی ماشین های CISC، اجازه ی انواعی از حالت های آدرس دهی را می دهند که امکان استفاده از بیش از سه عملوند را فراهم می کند (رجیسترها یا دسترسیهای حافظه)، مثلاً: دستورالعمل ازیابی چند جمله ای VAX "POLY" .
هر دستورالعمل تعدادی عملوند (
▲به دلیل تعداد زیاد بیت های مورد نیاز برای کدگذاری سه رجیستر یک دستورالعمل سه-عملوندی، معماری های RISC که دارای دستورالعمل های ۱۶ بیتی هستند، تماماً دارای طراحی های دو-عملوندی هستند، نظیر: Atmel AVR, TI MSP43 و برخی نسخههای ARM Thumb. معماری های RISC که دارای دستورالعمل های ۳۲ بیتی هستند، معمولاً دارای طراحیهای سه-عملوندی هستند، نظیر: [[معماری آرم|ARM]], AVR32, MIPS, Power آی اس ای و معماری های SPARC.<br>
▲هر دستورالعمل تعدادی عملوند (رجیستر ها، مکان های حافظه، یا مقادیر فوری) را "به طور آشکار" مشخص می کند. برخی دستورالعملها یک یا بیش از یک عملوند را بهطور ضمنی فراهم می کنند، مثلاً از طریق ذخیره شدن در بالای یک پشته، یا در یک رجیستر غیر مستقیم. در حالتی که برخی از عملوند ها بهطور ضمنی داده میشوند، به عملوند های کمتری در دستورالعمل نیاز هست. هنگامی که یک "عملوند مقصد" بهطور آشکار مقصد را مشخص می کند، باید عملوند دیگری نیز فراهم شود. در نتیجه تعداد عملوند های کدگذاری شده در یک دستورالعمل، ممکن است با تعداد آرگومان های مورد نیاز از نظر ریاضی برای یک عملیات منطقی یا محاسباتی ( [[آریتی (ریاضی)|arity]]) تفاوت داشته باشد. عملوند ها یا در نمایش "آپ کد" دستورالعمل، کدگذاری میشوند و یا اینکه به صورت مقادیر یا آدرس، به دنبال آپ کد می آیند.
=== فشار رجیستر ===
فشار رجیستر نمایانگر تعداد
در حالی که مجموعههای دستورالعمل نهفته نظیر Thumb از فشار بسیار بالای رجیستر به دلیل تعداد کم مجموعه رجیستر رنج
=== طول دستورالعمل ===
اندازه یا طول یک دستورالعمل
یک مجموعه دستورالعمل [[رایانه کم دستور|RISC]]، معمولاً دارای طول دستورالعمل ثابتی است (معمولاً چهار بایت که معادل ۳۲ بیت است)، در حالیکه مجموعه دستورالعمل [[رایانه با دستورهای پیچیده|CISC]] ممکن است دارای
=== تراکم کد ===
در
برخی
''
تحقیقاتی در رابطه با فشرده سازی قابل اجرا به عنوان یک مکانیسم برای بهبود تراکم کد انجام
== نمایش ==
=== طراحی ===
طراحی
برخی طراحان مجموعه دستورالعمل، یک یا بیش از یک آپ کد را برای انواعی از
اگر یک مجموعه دستورالعمل، ملزومات مجازی سازی پوپک و گلدبرگ (Popek and Goldberg virtualization requirements) را برآورده کند، آنگاه
اگر وضعیت
اگر مجموعه دستورالعمل قادر به پشتیبانی از
==
هر مجموعه دستورالعمل داده شده را
مهندسان در هنگام طراحی کردن [[ریزمعماری|ریز معماری]] یک پردازنده، از قطعات مدار الکترونیکی شش میخ شده(
* ۱. برخی
* ۲.
برخی
برخی
یک آی اس ای را
معمولاً جزئیات
نیاز
== جستارهای وابسته ==
* [[مجموعه دستورالعمل استاندارد رمزگذاری پیشرفته]]
* [[معماری رایانه]]
* [[آپکد]]
* [[طراحی پردازنده]]
سطر ۱۵۸ ⟵ ۱۶۲:
== منابع ==
{{پانویس|۲}}
{{یادکرد-ویکی
|پیوند=https://en.wikipedia.org/wiki/Instruction_set_architecture
|