ام‌میکس کیست؟ توضیح بده.
ام‌میکس یک معماری ریسک (کامپیوتر با مجموعه دستورالعمل کاهش‌یافته) ۶۴-بیتی است که توسط دونالد کنوث طراحی شده است. این طراحی با مشارکت های چشمگیر جان ال. هنسی (که در طراحی معماری میپس سهیم بود) و ریچارد ال. سایتس (معمار معماری آلفا) تکمیل شده است.کنوث در مورد ام‌میکس چنین بیان کرده است:"ام‌میکس کامپیوتری است که هدف آن تشریح جنبه‌های سطح ماشینی برنامه‌نویسی است. این ماشین در کتاب‌ "هنر برنامه‌نویسی رایانه" من، جایگزین MIX شده است؛ ماشینی که در دهه ۱۹۶۰ میلادی چنین نقشی را ایفا می‌کرد… من تلاش کردم ام‌میکس را به گونه‌ای طراحی کنم که زبان ماشین آن ساده، زیبا و آسان برای یادگیری باشد. در عین حال، دقت کردم تا تمامی پیچیدگی‌های لازم برای دستیابی به عملکرد بالا در عمل را شامل شود، به طوری که ام‌میکس اصولاً قابل ساخت باشد و حتی شاید بتواند با برخی از سریع‌ترین کامپیوترهای عمومی موجود در بازار رقابت کند."کنوث طراحی ام‌میکس را در سال ۱۹۹۹ آغاز کرد و نسخه پایدار آن را در سال ۲۰۱۱ منتشر نمود. این پردازنده با شماره "۲۰۰۹" نام‌گذاری شده است و کنوث توضیح می‌دهد که این عدد، میانگین حسابی اعداد سایر معماری‌های کامپیوتری است؛ همچنین "MMIX" در اعداد رومی نیز همین عدد را نشان می‌دهد.معماری ام‌میکس.ام‌میکس یک معماری big-endian ۶۴-بیتی ریسک است که دارای ۲۵۶ **رجیستر ۶۴-بیتی چندمنظوره**، ۳۲ **رجیستر ۶۴-بیتی خاص‌منظوره**، دستورالعمل‌های ۳۲-بیتی با طول ثابت و یک فضای آدرس مجازی ۶۴-بیتی می‌باشد. مجموعه دستورالعمل ام‌میکس شامل ۲۵۶ اپ‌کد است که یکی از آن‌ها برای توسعه‌های آتی رزرو شده است. ام‌میکس همچنین از اعداد ممیز شناور IEEE 754 استفاده می‌کند.دستورالعمل‌ها.تمامی دستورالعمل‌ها یک نام اختصاری (mnemonic) مرتبط دارند. به عنوان مثال، دستورالعمل شماره ۲۰ (۳۲ دهدهی) با `ADD` مرتبط است. بیشتر دستورالعمل‌ها فرم نمادین را دنبال می‌کنند، که در آن نوع دستورالعمل، `X` رجیستری که برای ذخیره نتیجه استفاده می‌شود و مابقی فیلدها عملوندهای دستورالعمل را مشخص می‌کنند. هر یک از این فیلدها ۸ بیت عرض دارند. برای مثال، به معنای "رجیستر $0 را برابر با مجموع $1 و ۳ قرار بده" است.اکثر دستورالعمل‌ها می‌توانند مقادیر فوری (immediate values) یا محتویات رجیستر را بپذیرند؛ از این رو، یک نام اختصاری دستورالعمل ممکن است به یکی از دو اپ‌کد (opcode) مرتبط باشد.برنامه‌های ام‌میکس معمولاً با استفاده از زبان اسمبلی MMIXAL نوشته می‌شوند. در ادامه یک برنامه ساده MMIXAL آورده شده است که رشته "سلام دنیا!" را چاپ می‌کند: LOC #100 % آدرس شروع برنامه را % 0x100 قرار میدهدMain GETA $255,string % آدرس رشته را % در رجیستر 255 قرار می‌دهد TRAP 0,Fputs,StdOut % رشته‌ای که رجیستر 255 به آن اشاره می‌کند را % به خروجی استاندارد می‌نویسد. TRAP 0,Halt,0 % فرایند را خاتمه می‌دهد.string BYTE "Hello, world!",#a,0 % رشته‌ای که باید چاپ شود. #a % کاراکتر خط جدید است و 0 رشته را % به اتمام می‌رساند.رجیسترها.در یک تراشه ام‌میکس ، ۲۵۶ **رجیستر معماری چندمنظوره** (با نام‌های $0 تا $255) و ۳۲ **رجیستر معماری خاص‌منظوره** وجود دارد که به طور مستقیم قابل آدرس‌دهی هستند. رجیسترهای خاص‌منظوره را می‌توان با دستورات `GET` و `PUT` دسترسی پیدا کرد.دو رجیستر خاص، **rL** و **rG**، تعیین می‌کنند که کدام یک از رجیسترهای عمومی، **محلی (local)** و کدام یک **سراسری (global)** هستند. تمام رجیسترهای از $0 تا $(rL − 1)، رجیسترهای محلی هستند و یک پنجره را به یک پشته داخلی از رجیسترها نمایش می‌دهند. رجیسترهای از [rL] تا $(rG − 1) "رجیسترهای حاشیه‌ای" نامیده می‌شوند؛ اگر به عنوان منبع در یک عملیات استفاده شوند، همیشه 0 را برمی‌گردانند. استفاده از یک رجیستر حاشیه‌ای به عنوان مقصد یک عملیات، باعث می‌شود که ماشین به طور خودکار rL را افزایش دهد تا آن رجیستر را شامل شود. تمام رجیسترهای [rG] تا $255، رجیسترهای سراسری نامیده می‌شوند و بخشی از پشته رجیستر نیستند.پشته رجیستر محلی.پشته رجیستر محلی** به هر زیربرنامه (subroutine) به اندازه `rL` رجیستر محلی (با نام‌های $0 تا $(rL − 1)) اختصاص می‌دهد. هرگاه یک زیربرنامه فراخوانی شود، تعدادی از رجیسترهای محلی به پایین پشته رانده می‌شوند (با تغییر نقطه شروع پنجره). آرگومان‌های زیربرنامه فراخوانی شده در رجیسترهای محلی باقی‌مانده قرار می‌گیرند. هنگامی که یک زیربرنامه به پایان می‌رسد، رجیسترهای قبلاً رانده شده را از پشته بیرون می‌کشد. از آنجا که پشته داخلی تنها می‌تواند تعداد محدودی رجیستر را در خود جای دهد، ممکن است لازم باشد بخشی از پشته در حافظه ذخیره شود. این عمل با استفاده از رجیسترهای خاص **rO** و **rS** پیاده‌سازی می‌شود که کدام بخش از پشته رجیستر محلی در حافظه و کدام بخش هنوز در رجیسترهای فیزیکی محلی قرار دارد را ثبت می‌کنند. پشته رجیستر، اتصال سریع زیربرنامه را فراهم می‌کند.رجیسترهای خاص.۳۲ رجیستر فیزیکی معماری خاص به شرح زیر هستند:برنامه‌های ام‌میکس، همانند برنامه‌هایی که بر روی سایر CPUها اجرا می‌شوند، می‌توانند به روش‌های مختلفی قطع شوند. سخت‌افزارهای خارجی مانند تایمرها، منبع رایجی برای وقفه‌های اولویت‌بندی هستند. بسیاری از دستورالعمل‌ها در موارد استثنایی خاصی باعث وقفه می‌شوند؛ از جمله استثناهای خطای صفحه که برای پیاده‌سازی حافظه مجازی استفاده می‌شوند، و همچنین مدیریت استثنای ممیز شناور. ام‌میکس دو نوع وقفه دارد: "تریپ" (trips) و "تله" (traps). تفاوت اصلی این دو در این است که تله‌ها کنترل را به یک برنامه "مدیریت تله" در سیستم عامل (trapping) می‌فرستند، اما تریپ‌ها کنترل را به یک برنامه "مدیریت تریپ" در برنامه کاربر (tripping) می‌فرستند. کاربران همچنین می‌توانند هر مدیریت وقفه‌ای را با دستورالعمل‌های صریح وقفه نرم‌افزاری `TRIP` و `TRAP` به اجرا درآورند، که شبیه به برخی از انواع تله در سایر سیستم‌های کامپیوتری است. به ویژه، یک فراخوانی سیستمی از یک برنامه کاربر به سیستم عامل، از یک دستورالعمل `TRAP` استفاده می‌کند.پیاده‌سازی‌های سخت‌افزاری.، هیچ پیاده‌سازی سخت‌افزاری شناخته‌شده‌ای از معماری مجموعه دستورالعمل ام‌میکس وجود ندارد. با این حال، پروژه fpgammix ام‌میکس را در وریلاگ پیاده‌سازی می‌کند، که امکان پیاده‌سازی آن را با استفاده از یک مدار مجتمع دیجیتال برنامه‌پذیر فراهم می‌سازد.ابزارهای نرم‌افزاری.معماری مجموعه دستورالعمل ام‌میکس توسط تعدادی ابزار نرم‌افزاری برای تحقیقات معماری کامپیوتر و توسعه نرم‌افزار پشتیبانی می‌شود.کامپایلر.مجموعه کامپایلرهای گنو شامل یک بک‌اند ام‌میکس برای کامپایلرهای سی/سی‌پلاس‌پلاس خود است که توسط هانس-پیتر نیلسون ارائه شده و از اواخر سال ۲۰۰۱ بخشی از توزیع اصلی GCC می‌باشد. ، بک‌اند ام‌میکس در GCC همچنان به طور فعال توسط داوطلبان توسعه و نگهداری می‌شود.ابزارهای فوق می‌توانند به طور نظری برای کامپایل، ساخت و راه‌اندازی (bootstrap) یک هسته سیستم‌عاملی کامل مانند فری‌بی‌اس‌دی، لینوکس یا سایر سیستم‌عامل‌های مشابه بر روی سخت‌افزار ام‌میکس استفاده شوند، در صورتی که چنین سخت‌افزاری وجود داشته باشد.