قالبها و رمزگذاری دستورالعملها
قالبهای دستورالعمل نحوه چیدمان هر دستورالعمل ماشین را به صورت باینری تعریف میکنند — کد عملیات (opcode)، فیلدهای ثبات (register fields) و مقادیر فوری (immediate values) — که تعیینکننده میزان فشردگی ذخیرهسازی برنامهها و سهولت رمزگشایی آنها توسط سختافزار است.
Definition
قالب دستورالعمل، آرایش تعریفشدهای از فیلدهای بیتی در یک دستورالعمل ماشین است که عملیات و عملوندهای آن را رمزگذاری میکند، و رمزگذاری دستورالعمل، طرحی است که دستورالعملها را به این الگوهای باینری نگاشت میکند.
Scope
این موضوع به نمایش باینری دستورالعملها میپردازد: رمزگذاریهای با طول ثابت در مقابل طول متغیر، فیلدهایی که عملیات، ثباتهای منبع و مقصد، و مقادیر فوری را مشخص میکنند، و موازنه بین چگالی کد و سادگی رمزگشایی. این شامل خانوادههای قالب نماینده مانند انواع R/I/S/B/U/J در RISC-V میشود. این موضوع انتخاب حالتهای آدرسدهی که عملوندها استفاده میکنند (حالتهای آدرسدهی) و فلسفه گستردهتر RISC/CISC (RISC و CISC) را شامل نمیشود.
Core questions
- یک رمزگذاری دستورالعمل برای مشخص کردن یک عملیات و عملوندهای آن باید شامل چه فیلدهایی باشد؟
- چگونه رمزگذاریهای با طول ثابت و طول متغیر بین سادگی رمزگشایی و چگالی کد موازنه ایجاد میکنند؟
- چگونه مقادیر فوری و ثابتهای بزرگ در بیتهای محدود دستورالعمل رمزگذاری میشوند؟
- چگونه یک رمزگذاری منظم، رمزگشایی دستورالعمل خط لولهای را ساده میکند؟
Key concepts
- فیلد کد عملیات (opcode field)
- فیلدهای مشخصکننده ثبات (register specifier fields)
- فیلدهای فوری (immediate fields)
- رمزگذاری با طول ثابت در مقابل طول متغیر
- چگالی کد
- نظم رمزگشایی
- خانوادههای قالب دستورالعمل (R/I/S/B/U/J)
Mechanisms
هر دستورالعمل به فیلدهای بیتی تقسیم میشود: یک کد عملیات (opcode) عملیات را انتخاب میکند، فیلدهای ثبات (register fields) عملوندها را نامگذاری میکنند، و فیلدهای فوری (immediate fields) ثابتها یا آفستهای آدرس را نگه میدارند. قالبهای با طول ثابت (مانند RISC-V) همه دستورالعملها را با عرض یکسان نگه میدارند و فیلدها را به طور سازگار قرار میدهند تا رمزگشایی ساده و سریع باشد؛ قالبهای با طول متغیر (مانند x86) دستورالعملها را به طور فشرده برای چگالی بیشتر بستهبندی میکنند، اما این کار به قیمت رمزگشایی پیچیدهتر تمام میشود.
Clinical relevance
انتخابهای رمزگذاری در سراسر یک پردازنده تأثیر میگذارند: قالبهای منظم با طول ثابت، رمزگشاهای ساده و سریعی را امکانپذیر میسازند که خط لوله عمیق را عملی میکنند، در حالی که قالبهای فشرده با طول متغیر، ترافیک حافظه دستورالعمل را کاهش میدهند. کامپایلرها و اسمبلرها باید این قالبها را به دقت هدف قرار دهند، و توسعههای مجموعه دستورالعمل باید در فضای رمزگذاری موجود جای بگیرند.
History
مجموعههای دستورالعمل اولیه از رمزگذاریهای نامنظم و دستساز برای صرفهجویی در حافظه کمیاب استفاده میکردند. جنبش RISC در دهه ۱۹۸۰ از قالبهای یکنواخت با طول ثابت برای سادهسازی رمزگشایی و خط لوله حمایت کرد، در حالی که مجموعههای CISC مانند x86 رمزگذاریهای فشرده با طول متغیر را حفظ کردند. ISAs باز مدرن مانند RISC-V خانوادههای قالب تمیز و قابل توسعه را کدگذاری میکنند.
Key figures
- David A. Patterson
- John L. Hennessy
Related topics
Seminal works
- patterson2020
- hennessy2019
Frequently asked questions
- چرا مجموعههای دستورالعمل RISC از رمزگذاریهای با طول ثابت استفاده میکنند؟
- دستورالعملهای با طول ثابت به پردازنده اجازه میدهند تا دستورالعمل بعدی را پیدا کرده و فیلدهای آن را بدون نیاز به رمزگشایی طول آن، استخراج کند، که مراحل واکشی و رمزگشایی را ساده و سریع میکند و خط لوله عمیق را بسیار آسانتر از رمزگذاریهای با طول متغیر میسازد.
- چگونه ثابتهای بزرگ مدیریت میشوند اگر دستورالعملها فقط تعداد ثابتی بیت عرض داشته باشند؟
- فیلدهای فوری محدود هستند، بنابراین ثابتهای بزرگ به صورت قطعهقطعه ساخته میشوند — برای مثال، یک دستورالعمل بارگذاری فوری بالا (load-upper-immediate) بیتهای بالا را تنظیم میکند و یک دستورالعمل بعدی بیتهای پایین را اضافه میکند — یا ثابت در حافظه قرار داده شده و بارگذاری میشود.