موضوع مقاله: ام‌میکس | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # ام‌میکس | مقدمه: ام‌میکس یک معماری ریسک (کامپیوتر با مجموعه دستورالعمل کاهش‌یافته) ۶۴-بیتی است که توسط دونالد کنوث طراحی شده است. | ## بخش 1: ام‌میکس | کنوث در مورد ام‌میکس چنین بیان کرده است:"ام‌میکس کامپیوتری است که هدف آن تشریح جنبه‌های سطح ماشینی برنامه‌نویسی است. این ماشین در کتاب‌ هنر برنامه‌نویسی رایانه من، جایگزین MIX شده است؛ ماشینی که در دهه ۱۹۶۰ میلادی چنین نقشی را ایفا می‌کرد… من تلاش کردم ام‌میکس را به گونه‌ای طراحی کنم که زبان ماشین آن ساده، زیبا و آسان برای یادگیری باشد. در عین حال، دقت کردم تا تمامی پیچیدگی‌های لازم برای دستیابی به عملکرد بالا در عمل را شامل شود، به طوری که ام‌میکس اصولاً قابل ساخت باشد و حتی شاید بتواند با برخی از سریع‌ترین کامپیوترهای عمومی موجود در بازار رقابت کند." (خطاها)کنوث طراحی ام‌میکس را در سال ۱۹۹۹ آغاز کرد و نسخه پایدار آن را در سال ۲۰۱۱ منتشر نمود. این پردازنده با شماره "۲۰۰۹" نام‌گذاری شده است و کنوث توضیح می‌دهد که این عدد، میانگین حسابی اعداد سایر معماری‌های کامپیوتری است؛ همچنین "MMIX" در اعداد رومی نیز همین عدد را نشان می‌دهد. معماری ام‌میکس ام‌میکس یک معماری big-endian ۶۴-بیتی ریسک است که دارای ۲۵۶ **رجیستر ۶۴-بیتی چندمنظوره**، ۳۲ **رجیستر ۶۴-بیتی خاص‌منظوره**، دستورالعمل‌های ۳۲-بیتی با طول ثابت و یک فضای آدرس مجازی ۶۴-بیتی می‌باشد. مجموعه دستورالعمل ام‌میکس شامل ۲۵۶ اپ‌کد است که یکی از آن‌ها برای توسعه‌های آتی رزرو شده است. بیشتر دستورالعمل‌ها فرم نمادین را دنبال می‌کنند، که در آن نوع دستورالعمل، `X` رجیستری که برای ذخیره نتیجه استفاده می‌شود و مابقی فیلدها عملوندهای دستورالعمل را مشخص می‌کنند. رجیسترها در یک تراشه ام‌میکس ، ۲۵۶ **رجیستر معماری چندمنظوره** (با نام‌های $0 تا $255) و ۳۲ **رجیستر معماری خاص‌منظوره** وجود دارد که به طور مستقیم قابل آدرس‌دهی هستند. تمام رجیسترهای از $0 تا $(rL − 1)، رجیسترهای محلی هستند و یک پنجره را به یک پشته داخلی از رجیسترها نمایش می‌دهند. رجیسترهای از [rL] تا $(rG − 1) "رجیسترهای حاشیه‌ای" نامیده می‌شوند؛ اگر به عنوان منبع در یک عملیات استفاده شوند، همیشه 0 را برمی‌گردانند. استفاده از یک رجیستر حاشیه‌ای به عنوان مقصد یک عملیات، باعث می‌شود که ماشین به طور خودکار rL را افزایش دهد تا آن رجیستر را شامل شود. تمام رجیسترهای [rG] تا $255، رجیسترهای سراسری نامیده می‌شوند و بخشی از پشته رجیستر نیستند. هرگاه یک زیربرنامه فراخوانی شود، تعدادی از رجیسترهای محلی به پایین پشته رانده می‌شوند (با تغییر نقطه شروع پنجره). هنگامی که یک زیربرنامه به پایان می‌رسد، رجیسترهای قبلاً رانده شده را از پشته بیرون می‌کشد. | ## بخش 2: ام‌میکس | از آنجا که پشته داخلی تنها می‌تواند تعداد محدودی رجیستر را در خود جای دهد، ممکن است لازم باشد بخشی از پشته در حافظه ذخیره شود. این عمل با استفاده از رجیسترهای خاص **rO** و **rS** پیاده‌سازی می‌شود که کدام بخش از پشته رجیستر محلی در حافظه و کدام بخش هنوز در رجیسترهای فیزیکی محلی قرار دارد را ثبت می‌کنند. rD، رجیستر مقسوم تقسیم عدد صحیح بدون علامت، از این رجیستر به عنوان نیمه چپ ورودی ۱۲۸ بیتی استفاده می‌کند که قرار است بر عملوند دیگر تقسیم شود. rE، رجیستر اپسیلون برای مقایسه‌های ممیز شناور با توجه به اپسیلون استفاده می‌شود. rV، رجیستر ترجمه مجازی برای ترجمه آدرس‌های مجازی به آدرس‌های فیزیکی استفاده می‌شود. rG، رجیستر آستانه سراسری تمام ارجاعات رجیسترهای عمومی با شماره‌ای بزرگتر یا مساوی `rG` به رجیسترهای سراسری اشاره می‌کنند. rL، رجیستر آستانه محلی تمام ارجاعات رجیسترهای عمومی با شماره‌ای کوچکتر از `rL` به رجیسترهای محلی اشاره می‌کنند. rA، رجیستر وضعیت محاسباتی برای ثبت، فعال و غیرفعال کردن استثناهای محاسباتی مانند سرریز (overflow) و تقسیم بر صفر استفاده می‌شود. rF، رجیستر مکان شکست برای ذخیره آدرس دستورالعملی که باعث شکست شده است، استفاده می‌شود. rW، رجیستر محل وقفه (trip) هنگام تریپ کردن، برای ذخیره آدرس دستورالعمل پس از دستورالعملی که قطع شده است، استفاده می‌شود. rX، رجیستر اجرا (trip) هنگام تریپ کردن، برای ذخیره دستورالعملی که قطع شده است، استفاده می‌شود. rY، عملوند Y (trip) هنگام تریپ کردن، برای ذخیره عملوند Y دستورالعملی که قطع شده است، استفاده می‌شود. rZ، عملوند Z (trip) هنگام تریپ کردن، برای ذخیره عملوند Z دستورالعملی که قطع شده است، استفاده می‌شود. rWW، رجیستر محل وقفه (trap) هنگام تله کردن، برای ذخیره آدرس دستورالعمل پس از دستورالعملی که قطع شده است، استفاده می‌شود. | ## بخش 3: ام‌میکس | rXX، رجیستر اجرا (trap) هنگام تله کردن، برای ذخیره دستورالعملی که قطع شده است، استفاده می‌شود. برنامه‌های ام‌میکس، همانند برنامه‌هایی که بر روی سایر CPUها اجرا می‌شوند، می‌توانند به روش‌های مختلفی قطع شوند. بسیاری از دستورالعمل‌ها در موارد استثنایی خاصی باعث وقفه می‌شوند؛ از جمله استثناهای خطای صفحه که برای پیاده‌سازی حافظه مجازی استفاده می‌شوند، و همچنین مدیریت استثنای ممیز شناور. کاربران همچنین می‌توانند هر مدیریت وقفه‌ای را با دستورالعمل‌های صریح وقفه نرم‌افزاری `TRIP` و `TRAP` به اجرا درآورند، که شبیه به برخی از انواع تله در سایر سیستم‌های کامپیوتری است. به ویژه، یک فراخوانی سیستمی از یک برنامه کاربر به سیستم عامل، از یک دستورالعمل `TRAP` استفاده می‌کند. پیاده‌سازی‌های سخت‌افزاری ، هیچ پیاده‌سازی سخت‌افزاری شناخته‌شده‌ای از معماری مجموعه دستورالعمل ام‌میکس وجود ندارد. با این حال، پروژه fpgammix ام‌میکس را در وریلاگ پیاده‌سازی می‌کند، که امکان پیاده‌سازی آن را با استفاده از یک مدار مجتمع دیجیتال برنامه‌پذیر فراهم می‌سازد. ابزارهای نرم‌افزاری معماری مجموعه دستورالعمل ام‌میکس توسط تعدادی ابزار نرم‌افزاری برای تحقیقات معماری کامپیوتر و توسعه نرم‌افزار پشتیبانی می‌شود. MMIXX – یک بسته گرافیکی مبتنی بر X11 است که توسط اندرو پوچینسکی از اِم‌آی‌تی و مرکز فیزیک نظری اِم‌آی‌تی ارائه شده است. کامپایلر مجموعه کامپایلرهای گنو شامل یک بک‌اند ام‌میکس برای کامپایلرهای سی/سی‌پلاس‌پلاس خود است که توسط هانس-پیتر نیلسون ارائه شده و از اواخر سال ۲۰۰۱ بخشی از توزیع اصلی GCC می‌باشد. ، بک‌اند ام‌میکس در GCC همچنان به طور فعال توسط داوطلبان توسعه و نگهداری می‌شود. ویژگی‌های وابسته به ام‌میکس برای گنو as از گنو باین‌یوتیلز نسخه ۲.۲۹، که بک‌اند اسمبلر برای گنو GCC است (وب‌سایت گنو باین‌یوتیلز). ابزارهای فوق می‌توانند به طور نظری برای کامپایل، ساخت و راه‌اندازی (bootstrap) یک هسته سیستم‌عاملی کامل مانند فری‌بی‌اس‌دی، لینوکس یا سایر سیستم‌عامل‌های مشابه بر روی سخت‌افزار ام‌میکس استفاده شوند، در صورتی که چنین سخت‌افزاری وجود داشته باشد. | ## جمع‌بندی | صفحه اخبار MMIX دونالد کنوث – شامل یک شبیه‌ساز متن‌باز نوشته شده در CWEB، یک راهنمای برنامه‌نویس، و برنامه‌های نمونه.