موضوع مقاله: مقایسه معماری‌های مجموعه دستورالعمل‌ها | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # مقایسه معماری‌های مجموعه دستورالعمل‌ها | مقدمه: "این مقاله در حال ترجمه از ویکی انگلیسی است لطفا حذف نشود." معماری مجموعه‌دستورالعمل‌ها (ISA) یک مدل انتزاعی از رایانه است و در واقع همان چیزی است که معمولاً به آن «معماری رایانه» می‌گویند. | ## بخش 1: مقایسه معماری‌های مجموعه دستورالعمل‌ها | نسخهٔ عملی یک ISA را «پیاده‌سازی» می‌نامند یک ISA می‌تواند چندین پیاده‌سازی متفاوت داشته باشد؛ پیاده‌سازی‌هایی که ممکن است از نظر کارایی، اندازهٔ فیزیکی و هزینه و چیزهای دیگر با هم فرق کنن از آن‌جا که ISA نقش رابط میان نرم‌افزار و سخت‌افزار را داره هر نرم‌افزاری که برای یک ISA نوشته یا ترجمه شده باشند می‌تواند روی همهٔ پیاده‌سازی‌های مختلف آن ISA اجرا کنن همین ویژگی باعث شده تا سازگاری دودویی میان نسل‌های مختلف رایانه‌ها به‌سادگی امکان‌پذیر شود و خانواده‌های رایانه‌ای شکل بگیرند. این دو موضوع هم هزینهٔ رایانه‌ها را پایین آورده‌اند و هم دامنهٔ کاربرد آن‌ها را گسترده‌تر کرد. ISA یا همون معماریِ مجموعه‌دستورهایی است که همه چیز هایی رو مشخص می‌کنه که یه برنامه‌نویس زبان ماشین باید بدونه تا بتونه با اون سیستم یا لپتاپش کار کنه اینکه چی رو تعریف میکنه بین ISAهای مختلف فرق داره ولی معمولاً مواردی مثل نوع داده‌هایی که پشتیبانی می‌شن، وضعیت‌هایی که دستگاه داره (مثل حافظهٔ اصلی و رجیسترها) و رفتار اون‌ها مدل همخوانی حافظه و روش‌های آدرس‌دهی خود مجموعه دستورهای ماشین و همین‌طور مدل ورودی/خروجی رو تعیین می‌کنن. نمایش داده‌ها تو دهه‌های اولیهٔ محاسبات، کامپیوترهایی وجود داشتن که از سیستم‌های دوگانه، ده‌دهی و حتی سه‌تایی (ترنری) استفاده می‌کردن، اما امروزه کامپیوترهای مدرن تقریباً به‌طور کامل دوگانه (باینری) هستن. کاراکترها معمولاً به صورت یه رشته از بیت‌ها یا ارقام رمزگذاری می‌شن، و این کار با انواع مختلف مجموعه‌ کاراکتر انجام می‌شه. جالب اینه که حتی توی یه شرکت هم ممکن بود هر دستگاه از یه مجموعه کاراکتر متفاوت استفاده کنه. اعداد صحیح معمولاً با روش‌های مختلفی کدگذاری می‌شن، مثل علامت-قدر مطلق، مکمل یک، مکمل دو، جبران دودویی، مکمل نه و مکمل ده. اعداد اعشاریِ شناور هم با روش‌های مختلفی رمزگذاری می‌شن؛ یعنی برای علامت، توان و مانتیسا هر معماری ممکنه شیوهٔ خودش رو داشته باشه. توی کامپیوترهای امروزی، قالب‌های شناور هگزای IBM و IEEE 754 تقریباً جای بیشتر قالب‌های قدیمی رو گرفتن و عملاً استاندارد شده‌ان. نشانی‌ها معمولاً یه عددِ بدون علامت هستن که از ترکیب چند چیز به‌وجود میان: یه بخشی از خودِ دستور، یه مقدار از رجیسترها و یه مقدار هم از حافظه. این‌که دقیقاً چطور ساخته می‌شن، بستگی به معماریِ پردازنده داره و توی هر معماری فرق می‌کنه. توی یک‌سوم آخر قرن بیستم، n بیشتر ۸، ۱۶ یا ۳۲ بود، و توی قرن بیست و یکم معمولاً ۱۶، ۳۲ یا ۶۴ هست، البته اندازه‌های دیگه هم بوده (مثل ۶، ۳۹، ۱۲۸). | ## بخش 2: مقایسه معماری‌های مجموعه دستورالعمل‌ها | البته این یه ساده‌سازی هست، چون معماری‌های کامپیوتر معمولاً چند اندازهٔ دادهٔ «طبیعی» دیگه هم توی مجموعه دستورها دارن، ولی نحوهپیاده‌سازی سخت‌افزاری‌شون می‌تونه کاملاً متفاوت باشه. خیلی از معماری‌ها دستورهایی دارن که توی بعضی پیاده‌سازی‌ها، روی نصف یا دو برابر اندازهٔ مسیرهای دادهٔ اصلی پردازنده کار می‌کنن. توی این مدل‌ها، یه دستور با اندازهٔ دوبرابر معمولاً تقریباً دو برابر سیکل ساعت طول می‌کشه (البته توی پیاده‌سازی‌های با عملکرد بالا این طور نیست). مثلاً روی 68000، یعنی یه دستور دوبرابر اندازه، ۸ سیکل ساعت طول می‌کشه به جای ۴، و به همین دلیل می‌تونیم بگیم این تراشه یه معماری ۳۲ بیتی با پیاده‌سازی ۱۶ بیتی داره. مثلا NS32008، NS32016 و NS32032 در واقع همون تراشهٔ ۳۲ بیتی بودن، فقط باس دادهٔ خارجی‌شون فرق داشت. ارقام تو سه‌چهارم اول قرن بیستم، کامپیوترهای ده‌دهی (decimal) که روی کلمه‌ها کار می‌کردن، معمولاً کلمه‌هایی با ۱۰ رقم داشتن و یه علامت جدا هم برای هر عدد داشتند. توی اعداد صحیح همهٔ ده رقم استفاده می‌شد و توی اعداد اعشاری شناور، برای توان‌ها دو رقم در نظر گرفته می‌شد. اندیان یه معماری می‌تونه از بزرگ‌اندین یا کوچک‌اندین استفاده کنه، یا هر دو، یا طوری طراحی شده باشه که بشه بینشون سوئیچ کرد. تو پردازنده‌های کوچک‌اندین، بایت‌ها تو حافظه طوری چیده می‌شن که کم‌ارزش‌ترین بایت یه عدد چندبایتی تو کم‌ترین نشانی حافظه قرار بگیره. تو معماری‌های بزرگ‌اندین برعکس، پرارزش‌ترین بایت تو کم‌ترین نشانی حافظه قرار می‌گیره. مبحث اندین بودن فقط برای پردازنده‌هایی مطرحه که اجازه می‌دن واحدهای کوچکتر داده (مثل بایت‌ها) جداگانه آدرس‌دهی بشن، اونم وقتی که این واحدها از بعضی فرمت‌های داده‌ای کوچیک‌تر باشن قالب‌های دستورالعمل کدهای عملیاتی تو بعضی معماری‌ها، هر دستور فقط یه کد عملیاتی (opcode) داره. تو بعضی معماری‌های مجموعه‌دستور، از یه یا چند پیشوند کد عملیاتی استفاده می‌کنن تا کد بعدی رو تغییر بدن یا تعداد کدهای عملیاتی موجود رو زیاد کنن. | ## بخش 3: مقایسه معماری‌های مجموعه دستورالعمل‌ها | عملوندها حالت‌های آدرس‌دهی معماری‌ها معمولا به دستورالعمل‌ها اجازه می‌دهند که ترکیبی از حالت‌های ادرس‌دهی عملوند را نیز شامل شوند. مستقیم دستورالعمل، یک آدرس کامل را مشخص می‌کند فوری این دستورالعمل به جای یک آدرس، یک مقدار را مشخص می‌کند. فهرست بندی شده: این دستورالعمل، یک ثبات را برای استفاده به عنوان اندیس مشخص می‌کند. غیرمستقیم این دستورالعمل، مکان یک کلمه اشاره‌گر را که عملوند را توصیف می‌کند، مشخص می‌کند و احتمالاً شامل چندین سطح از اندیس‌گذاری و غیرمستقیم‌سازی است. کوتاه شده: دستورالعمل، بیت‌های مرتبه پایین را مشخص می‌کند و یک رجیستر، بیت‌های مرتبه بالا را فراهم می‌کند. افزایش خودکار/کاهش خودکار: یک ثبات که برای اندیس‌گذاری استفاده می‌شود، یا یک کلمه اشاره‌گر که توسط آدرس‌دهی غیرمستقیم استفاده می‌شود، به اندازه ۱، اندازه عملوند یا دلتای صریح افزایش یا کاهش می‌یابند پردازنده‌های برداری (Vector) حالت‌های اضافه‌ای هم دارن که مخصوص عملیات روی تک‌تک عناصر هستن. تعداد عملوندها تعداد عملوندها یکی از عوامل اصلی ای است که می‌تواند نشان‌دهنده‌ی عملکرد مجموعه دستورالعمل‌ها باشد و معماری سه عملوندی (۲ ورودی، ۱ خروجی) این امکان را ممکن میسازد الف := ب + ج در یک دستورالعمل محاسبه شود B، C، A را اضافه کنید در یک معماری کامپیوتری دو عملوندی (1 ورودی، 1 ورودی و 1 خروجی) این امکان را میسر میسازد الف := الف + ب در یک دستورالعمل محاسبه شود اضافه کردن B، A اما مستلزم آن است که الف := ب + ج در دو دستورالعمل انجام شود حرکت B، A اضافه کردن C، A طول کدگذاری همون‌طور که توی جدول پایین می‌بینی، بعضی از مجموعه‌دستورا کاملاً ساده و ثابت‌اند؛ یعنی طول کد همه‌ی دستورها یکی‌ست. معمولاً همین RISCها هستن که سرِ ثابت دوست دارن و CISCها دل‌شان طول متغیر می‌خواهد؛ ولی استثنا هم همیشه هست مجموعه دستورالعمل‌ها جدول زیر اطلاعات اولیه مربوط به مورد معماری‌های مجموعه دستورالعمل‌ها را مقایسه می‌کنه. در برخی موارد، یک شبه ثباتِ سخت‌افزاری تا صفر، به عنوان "بخشی" از فایل‌های ثبات معماری‌ها، عمدتاً برای ساده‌سازی حالت‌های اندیس‌گذاری، گنجانده می‌شود. ستون "ثبات‌ها" فقط "ثبات‌های" صحیح قابل استفاده توسط دستورالعمل‌های عمومی در هر لحظه را می‌شمارد. برای این معماری‌ها، تعداد نشان می‌دهد که چه تعداد ثبات در یک پنجره ثبات موجود است. | ## جمع‌بندی | در ستون «نوع»، «ثبت–ثبت» مترادف با نوع رایج معماری « بارگذاری–ذخیره » است، به این معنی که هیچ دستورالعملی نمی‌تواند مستقیماً به حافظه دسترسی داشته باشد، مگر برخی موارد خاص، یعنی بارگذاری در یا ذخیره از ثبات(ها)، به استثنای دستورالعمل‌های قفل حافظه برای عملیات اتمی.