انباشتگر

بندانگشتی|انباشتگرها بر روی یک ماشین جدول‌بندی در سال ۱۹۳۶.
در پردازنده مرکزی یک رایانه، **انباشتگر** ثباتی است که در آن داده‌های میانی که توسط واحدهای محاسباتی و منطقی تولید می‌شوند، ذخیره می‌شود.

در صورتی که ثباتی برای ذخیره‌سازی داده‌های میانی وجود نداشته باشد، لازم خواهد بود که این اطلاعات بعد از هر محاسبه درون حافظه اصلی نوشته شود، و احتمال دارد که همان داده دوباره از حافظه اصلی خوانده شود و در عملیات بعدی مورد استفاده قرار گیرد. دسترسی به حافظه اصلی بسیار کندتر از دسترسی به ثبات است و این به علت فناوری استفاده شده در ساخت آن هاست، حافظه اصلی گنجایش بیشتری دارد و در عوض کندتر از ثبات هاست. رایانه‌های الکترونیکی ابتدایی به دو دسته تقسیم می شدند، آن‌هایی که ثبات انباشتگر داشتند و آن‌هایی که چنین قابلیتی نداشتند.

رایانه‌های امروزی معمولاً شامل چند ثباتِ مختلف و چند منظوره هستند که می توانند نقش ثبات انباشتگر را هم ایفا کنند، از این رو واژه‌ی "انباشتگر" امروزه به مانند گذشته رایج نیست. با این حال امروزه نیز پردازنده‌های خاص منظوره‌ای وجود دارند که برای رعایت سادگی در طراحیشان از تنها یک ثبات انباشتگر برای کارهایشان استفاده می‌کنند.

## طرح کلی

عملیات ریاضی معمولاً به صورت گام به گام انجام می‌شوند، و از نتایج هر مرحله در مرحلهٔ بعد به صورت ورودی استفاده می‌شود. در رایانه‌های ابتدایی نتایج هر مرحله درون حافظه‌ی مغناطیسی ذخیره می‌شد. عملیات نوشتن درون حافظه‌ی مغناطیسی مدت زمان بسیار زیادی طول می‌کشید و باعث کند شدن سامانه می‌شد. از طرف دیگر در عملیات بعدی معمولاً نیاز بود که همان داده‌ای که در مرحله‌ی قبلی درون حافظه مغناطیسی نوشته شده بود از روی همان حافظه خوانده شود، از آن جا که عملیات خواندن از حافظه مغناطیسی نیز عملیاتی کند بودند باعث می‌شد که کندی در کار سامانه دو چندان شود.

انباشتگرها با فراهم ساختن یک حافظه‌یِ چک‌نویس که این قابلیت را داشت که نتایج هر مرحله را بدون کند کردن سامانه به مرحله‌ی بعد انتقال دهد، بازدهی سامانه را به شدت بهبود بخشیدند. با این کار در هر مرحله یک عملیات خواندن و نوشتن از/در حافظه‌ی مغناطیسی صرفه جویی می‌شد که آن عملیات ده‌ها و صدها برابر کندتر از عملیات ریاضی بودند.

## ماشین‌های انباشتگر
یک "ماشین انباشتگر" یا "ماشین تک عملوندی"، یا پردازنده "با معماری مبتنی بر انباشتگر"، نوعی از پردازنده است که اگرچه ممکن است چند ثبات داشته باشد اما پردازنده عمدتاً نتایج محاسبات را درون یک ثبات خاص که "ثبات انباشتگر" نامیده می‌شود، ذخیره می‌کند. تقریباً تمام رایانه‌ها الکترونیکی اولیه از نوع ماشین‌های انباشتگر بودند و تنها ابر رایانه‌ها بودند که از چند ثبات بهره می‌بردند. بعد از این که بزرگ رایانه‌ها راه را برای استفاده از رایانه‌های کوچک باز کردند، معماری انباشتگر بار دیگر محبوبیت پیدا کرد.ریزپردازنده‌ی ام‌اواس ۶۵۰۲ از برجسته‌ترین مثال‌هایی ست که از این معماری بهره می‌بردند. بسیاری از ریزکنترل‌گر‌های هشت بیتی امروزی که هنوز محبوب هستند مانند ریزکنرل‌گر پی‌آی‌سی و ۸۰۵۱ ماشین‌های انباشتگر هستند.

پردازنده‌های امروزی عمدتاً ماشین‌های دو یا سه عملوندی هستند. عملوندهای دوم یا سوم ثبات‌های مبدأ و/یا مقصد را تعیین می‌کنند. این نوع از پردازنده‌ها در دسته‌ی ماشین‌های انباشتگر قرار نمی‌گیرند.

ویژگی که ثبات انباشتگر را با دیگر انواع ثبات‌ها متمایز می‌کند (اگر معماری دارای ثبات انباشتگر باشد)، این است که این ثبات به‌طور **ضمنی** به عنوان عملوند در دستورهای حسابی استفاده می‌شود. به عنوان مثال، یک پردازنده ممکن است که دستورالعملی به این شکل داشته باشد: `ADD ''[[آدرس_حافظه|memaddress]]''`، این دستور مقدار داده‌ی درون آدرس حافظه(همان memaddress) را با مقدار داده‌ی درون ثبات انباشتگر جمع می‌کند و نتیجه‌ی آن را درون ثبات انباشتگر قرار می‌دهد. ثبات انباشتگر درون دستورالعمل تعیین نشده‌است اما این مفهوم به‌طور ضمنی در دستورالعمل وجود دارد و نمی‌توان از یک ثبات دیگر به جای ثبات انباشتگر در دستورالعمل استفاده کرد. در برخی از معماری‌ها ممکن است در تعدادی از دستورالعمل‌ها از ثبات انباشتگر استفاده شود و در دیگر دستورها از شماره‌ی ثبات‌ها به‌طور واضح در عملوندها استفاده شود.

## تاریخچه

هر سامانه‌ای که از تنها یک خانه‌ی حافظه برای نگهداری نتایج چندین عملیات استفاده می‌کند را می‌توان به عنوان یک انباشتگر در نظر گرفت. پرسپر اکرت حتی از ماشین‌های قدیمی جمع کننده، که توسط پاسکال و لایبنیتس طراحی شده بودند، به عنوان سامانه‌های مبتنی بر انباشتگر یاد می‌کرد.

بر اساس قراردادهایی که از گذشته بر جای مانده است انباشتگر یک ثبات است، یک "عضو حسابی" که دقیقاً در هر مرحله از عملیات حسابی داده‌ها را درون خودش انباشت می‌کند:
اولین قسمت عضو حسابی ... باید یک عضو ذخیره‌سازی باشد که بتواند با دریافت یک عدد، آن عدد را به مقدار فعلیش اضافه کند، همچنین بتواند مقدار درونش را حذف (پاک) کند و نیز بتواند مقدار درونش را در جایی دیگر ذخیره کند. ما به چنین عضوی "انباشتگر" می‌گوییم. این یک چیز بسیار مرسوم در حال و گذشته‌ی انواع ماشین‌های محاسبه‌گر است، مانند ضرب کننده‌های رومیزی، شمارنده‌های آی‌بی‌ام، ماشین‌های امروزی‌ترِ رله و انیاک.(گلدستین و فن نیومن، ۱۹۴۶؛ صفحه ۹۸ در بل و نیوول ۱۹۷۱).

برخی از دستورها به عنوان مثال عبارتند از:
* پاک کردن انباشتگر و اضافه کردن داده از خانه‌ی X حافظه به آن.
* پاک کردن انباشتگر و کم کردن داده از خانه‌ی X حافظه از آن.
* جمع کردن داده از خانه‌ی X حافظه با مقدار فعلی انباشتگر و قرار دادن نتیجه در انباشتگر.
* کم کردن داده از خانه‌ی X حافظه از مقدار فعلی انباشتگر و قرار دادن نتیجه در انباشتگر.
* پاک کردن انباشتگر و انتقال (شیفت) دادن داده‌ی یک ثبات به درون انباشتگر.

قراردادی برای نام دستورهایی که داده‌ها را از ثبات‌ها به انباشتگر انتقال می‌دهند یا بالعکس، وجود ندارد. با این حال به‌طور سنتی( مانند رایانه‌ی فرضیِ کنوت) از دو دستور "LDA r" به معنی انتقال داده از ثبات r به انباشتگر و "STA r" به معنی انتقال داده‌ی انباشتگر به ثبات r استفاده می‌شود. مدل کنوت شامل دستورهای متعددِ دیگری نیز هست.

## رایانه‌های مبتنی بر انباشتگرِ مشهور
بندانگشتی|صفحه‌ی جلویی یک رایانه "آی‌بی‌ام ۷۰۱" که چراغ‌هایش نمایانگر انباشتگر و دیگر ثبات‌ها هستند.
در سال ۱۹۴۵ رایانه‌ی انیاک دارای بیست ثبات انباشتگر بود که می‌توانستند به‌طور موازی و همزمان با یکدیگر کار کنند. هر ثبات توانایی ذخیره‌سازی یک عدد دهدهیِ هشت بیتی را داشتند که می‌توانستند عملیات جمع یا تفریق را روی این اعداد انجام دهند. بیشتر رایانه‌های دودویی اولیه‌یِ آی‌بی‌ام که اولین آن‌ها "آی‌بی‌ام ۷۰۱" در سال ۱۹۵۲ بود از یک ثبات انباشتگرِ ۳۶ بیتی استفاده می‌کردند. "آی‌بی‌ام ۶۵۰" یک ماشین دهدهی بود که از یک ثبات انباشتگر ده رقمی استفاده می‌کرد، "آی‌بی‌ام ۷۰۷۰" نیز یک ماشین دهدهی بود که از سه ثبات انباشتگر استفاده می‌کرد.

"پی‌دی‌پی ۸" که از اولین ریزرایانه‌ها بود، از یک انباشتگر ۱۲ بیتی استفاده می‌کرد و الهام بخش بسیاری از رایانه‌های بعد از خود بود.
ریزپردازنده‌های اولیه‌ی چهار بیتی و هشت بیتی مانند، ۴۰۰۴ و ۸۰۰۸ و بسیاری دیگر به‌طور معمول از یک ثبات انباشتگر استفاده می‌کردند. ریزپردازنده‌ی ۸۰۵۱ دارای دو ثبات انباشتگر است، یک انباشتگر اصلی و یک انباشتگر فرعی که انباشتگر فرعی تنها در دستورهای ضرب و تفریق مورد استفاده می‌گیرد و قسمتی از جواب را در خود ذخیره می‌کند. پردازنده‌ی ۸۰۸۰ که نسخه گسترش یافته‌ی ۸۰۰۸ بود، پردازنده‌ی ۸۰۸۶ و پردازنده‌ی امروزی و فراگیرِ اینتل اکس۸۶ هنوز از دو ثبات انباشتگر اصلی و فرعی استفاده می‌کنند.

## جستارهای وابسته
* معماری کامپیوتر
* طراحی پردازنده

## منابع

رده:ثبت‌های دیجیتال
رده:ریزپردازنده‌ها
رده:معماری‌های مجموعه دستورالعمل
رده:واحد پردازشگر مرکزی