حالتهای آدرسدهی
حالتهای آدرسدهی قوانینی هستند که توسط آنها یک دستورالعمل مشخص میکند که عملوندهای آن در کجا قرار دارند — در یک ثبات، به صورت یک مقدار فوری (immediate) تعبیه شده، یا در حافظه در آدرسی که از ثباتها و آفستها محاسبه میشود.
Definition
حالت آدرسدهی روشی است که توسط یک دستورالعمل برای تعیین مکان یک عملوند مشخص میشود، که از مقادیر نگهداری شده مستقیماً در ثباتها یا خود دستورالعمل تا آدرسهای محاسبه شده از ثباتهای مبنا، ثباتهای اندیس و جابجاییها متغیر است.
Scope
این موضوع به روشهایی میپردازد که عملوندها نامگذاری و مکانیابی میشوند: فوری، ثباتی، غیرمستقیم ثباتی، مبنا-بهعلاوه-جابجایی، اندیسگذاری شده، نسبی به شمارنده برنامه (PC-relative)، و حالتهای محاسباتی پیچیدهتر. این موضوع به چگونگی تأثیر حالتهای آدرسدهی بر اندازه کد، تعداد دستورالعملها و پیچیدگی سختافزاری میپردازد. این موضوع شامل چگونگی رمزگذاری دستورالعملها در بیتها (قالبها و رمزگذاری دستورالعمل) و ترجمه مجازی به فیزیکی سیستم (حافظه مجازی و صفحهبندی) نمیشود.
Core questions
- هر حالت آدرسدهی چگونه آدرس مؤثر یا مقدار یک عملوند را محاسبه میکند؟
- کدام حالتهای آدرسدهی در برنامههای واقعی بیشتر مورد استفاده قرار میگیرند و چرا؟
- چگونه حالتهای آدرسدهی غنیتر، تعداد دستورالعملها را به قیمت پیچیدگی سختافزاری و رمزگشایی کاهش میدهند؟
- چرا معماریهای بار-ذخیره (load-store) دسترسی به حافظه را به چند حالت ساده محدود میکنند؟
Key concepts
- آدرسدهی فوری
- آدرسدهی ثباتی
- آدرسدهی غیرمستقیم ثباتی
- مبنا-بهعلاوه-جابجایی
- آدرسدهی اندیسگذاری شده
- آدرسدهی نسبی به شمارنده برنامه (PC-relative)
- محاسبه آدرس مؤثر
- محدودیت بار-ذخیره
Mechanisms
هر حالت آدرسدهی نحوه استخراج یک عملوند توسط پردازنده را تعریف میکند. عملوندهای فوری در دستورالعمل رمزگذاری میشوند؛ عملوندهای ثباتی از فایل ثبات خوانده میشوند؛ عملوندهای حافظه دارای یک آدرس مؤثر هستند که با افزودن یک ثبات مبنا، یک اندیس مقیاسبندی شده اختیاری و یک جابجایی محاسبه میشود. آدرسدهی نسبی به شمارنده برنامه (PC-relative) آدرسها را نسبت به شمارنده برنامه تشکیل میدهد، که از کد مستقل از موقعیت و اهداف پرش پشتیبانی میکند.
Clinical relevance
حالتهای آدرسدهی نحوه تولید کد توسط کامپایلرها را شکل میدهند: مبنا-بهعلاوه-جابجایی به طور طبیعی به فیلدهای ساختار و متغیرهای پشته نگاشت میشود، حالتهای اندیسگذاری شده به دسترسی آرایه، و آدرسدهی نسبی به شمارنده برنامه (PC-relative) به فایلهای اجرایی مستقل از موقعیت و کتابخانههای مشترک. طراحیهای بار-ذخیره (load-store) در معماری RISC عمداً آدرسدهی حافظه را ساده نگه میدارند تا خط لوله را آسان کنند، در حالی که ماشینهای CISC حالتهای غنیتری را برای چگالی کد ارائه میدهند.
History
معماریهای اولیه و CISC بسیاری از حالتهای آدرسدهی پیچیده، از جمله اشکال غیرمستقیم حافظه و افزایش خودکار (auto-increment) را انباشته کردند. مطالعات تجربی استفاده از دستورالعملها نشان داد که مجموعه کوچکی از حالتهای ساده بیشتر دسترسیها را تشکیل میدهند، که انگیزه تصمیم RISC برای پشتیبانی تنها از تعداد کمی حالت و محدود کردن دسترسی به حافظه به دستورالعملهای بار و ذخیره را فراهم کرد.
Key figures
- John L. Hennessy
- David A. Patterson
Related topics
Seminal works
- hennessy2019
- patterson2020
Frequently asked questions
- چرا معماریهای RISC از حالتهای آدرسدهی بسیار کمی پشتیبانی میکنند؟
- مطالعات نشان دادند که برنامهها به طور عمده از چند حالت ساده استفاده میکنند. محدود کردن دسترسی به حافظه به حالتهای غیرمستقیم ثباتی و مبنا-بهعلاوه-جابجایی، خط لوله را ساده و محاسبه آدرس مؤثر را سریع نگه میدارد، در حالی که کامپایلرها هر الگوی دسترسی غنیتری را از این اصول اولیه سنتز میکنند.
- آدرسدهی نسبی به شمارنده برنامه (PC-relative) برای چه کاری استفاده میشود؟
- آدرسدهی نسبی به شمارنده برنامه (PC-relative) یک آدرس را به عنوان یک آفست از شمارنده برنامه محاسبه میکند. این روش برای اهداف پرش و شاخه و برای دسترسی به دادههای نزدیک استفاده میشود، که کد مستقل از موقعیت را قادر میسازد تا بدون توجه به مکانی که در حافظه بارگذاری شده است، به درستی اجرا شود.