ثبات یا (Register) در پردازنده چیست ؟
همانطور که دستورالعمل ها و به طور کلی برنامه ها بایستی در حافظه RAM سیستم بارگزاری شوند، تا ما بتوانیم از آنها استفاده کنیم، Register ها یا ثبات های حافظه پردازنده نیز از این قاعده مستثنی نیستند. بدین معنی که پردازنده کامپیوتر برای اینکه بتواند، پردازش های خود را روی دستورالعمل ها انجام دهد، بایستی در یک مکانی آن کار ها را انجام دهد. و آن مکان ها جایی نیست جز، Register یا ثبات های حافظه پردازنده یا CPU سیستم. Register ها یا ثبات های حافظه پردازنده یک کامپیوتر، برای ذخیره و انتقال داده ها، و دستورالعمل ها با سرعت بسیار بالا مورد استفاده قرار میگیرد.
همانطور که میدانید CPU کامپیوتر، قطع به یقین یکی از مهم ترین و پیچیده ترین اجزاء یک کامپیوتر محسوب میشود، و طبیعتاََ یک سخت افزار تک منظوره و یک بعدی نیست، و وظایف متعددی بر عهده دارد. از این رو Register در پردازنده دارای انواع مختلفی است که هر کدام به نوبه خود در امر هندل و پردازش کردن دستورالعمل ها، برای CPU بسیار مهم و اجتناب ناپذیر است. همانطور که احتمالاََ حدس میزنید، حافظه های Register پردازنده از سریعترین حافظه های یک کامپیوتر به شمار میرود. (حتی سریعتر از حافظه کش L1 پردازنده)، زیرا CPU برای انجام پردازش های خود، بر روی دستورالعمل ها، دستورالعمل ها را در حافظه Register ذخیره میکند و سپس روی آنها پردازش را انجام میدهد. Register های پردازنده به طور کلی ۳ وظیفه به نام های: Decode ،Fetch و Execute را در امر پردازش دستورات بر عهده دارد که در زیر به توضیح هر کدام میپردازیم.
۱- عملیات Fetch یا واکشی داده ها : Fetch عبارتست از: گرفتن دستورالعمل هایی که توسط کاربر به کامپیوتر داده میشود، و همچنین واکشی یا Fetch کردن دستورالعمل ها توسط Register ها، از حافظه RAM سیستم، به منظور انجام پردازش روی دستورالعمل ها.
۲-عملیات Decode یا کدگشائی دستورالعمل ها : Decoding دستورالعمل ها بدین منظور است که، دستورالعمل ها به Command ها یا دستورات ترجمه شوند تا توسط واحد ALU قابل اجرا باشند. واحدی که بر عملیات Decoding دستورالعمل ها نظارت دارد واحد CU یا همان واحد کنترل در CPU میباشد.
۳- عملیات Execute یا اجرای دستورات : همانطور که گفتیم دستورات به وسیله واحد ALU پردازنده انجام میشود. بعد از اجرا نمودن دستورات توسط واحد منطقی ALU، نتیجه در حافظه RAM سیستم ذخیره میشود، تا بتوانیم از نتیجه دستورات مان استفاده کنیم.
همانطور که گفتیم Register ها دارای انواع و اقسام مختلفی هستند که هر کدام وظیفه خاص خود را بر عهده دارد. در زیر به معرفی هر کدام از Register ها میپردازیم.
Memory Address Register یا MAR
این Register همانطور که از نامش نیز پیداست، آدرس های حافظه از داده ها و دستورالعمل ها را در خود نگه میدارد. این Register برای دسترسی به داده ها و دستورالعمل ها، از حافظه RAM در طی اجرا شدن دستورالعمل ها مورد استفاده قرار میگیرد. فرض کنید CPU میخواهد برخی از داده ها را در حافظه RAM ذخیره کند و یا بر عکس، میخواهد داده هایی را از حافظه RAM فراخوانی کند CPU در این گونه مواقع می آید و آدرس های داده هایی که در حافظه RAM بایستی قرار بگیرد را در رجیستر MAR به صورت موقت ذخیره میکند. زیرا اگر این گونه نبود CPU نمیدانست که دستورالعمل ها در کدام مکان از حافظه RAM بایستی ذخیره شوند. پس اگر منطقی به این قضیه فکر کنیم وجود رجیستری به نام MAR الزامی است.
Program Counter یا PC
رجیستر Program Counter یا به اختصار PC، رجیستری است که به آن Instruction Pointer یا IP نیز میگویند. به این رجیستر گاهاََ Instruction Address Register نیز گفته میشود. این رجیستر مسیر آدرس حافظه دستورالعملی که بعد از تمام شدن پردازش دستورالعمل فعلی بایستی مورد پردازش قرار بگیرد را در خود ذخیره میکند. به عبارت دیگر این Register تا زمانیکه پردازش روی دستورالعمل فعلی به اتمام نرسیده است آدرس حافظه دستورالعمل بعدی را در خود نگه میدارد.
Accumulator Register یا AC
این Register برای ذخیره سازی نتایج دستوراتی که توسط واحد ALU پردازنده سیستم انجام شده است مورد استفاده قرار میگیرد. هنگامی که CPU دستورات را مورد پردازش قرار داد و تمام شد نتیجه دستورات در رجیستر AC به صورت موقت ذخیره میگردد. به Accumulator Register در اصطلاح فنی AX نیز میگویند.
Memory Data Register یا MDR
این Register یکی از مهم ترین رجیستر های CPU است رجیستر MDR، رجیستر واحد CU، از پردازنده میباشد و شامل اطلاعاتی است که باید در حافظه RAM سیستم یا سایر حافظه ها ذخیره شود، همچنین این رجیستر میتواند شامل داده هایی باشد که با عملیات Fetch یا واکشی داده ها از یک دستگاه ذخیره سازی بدست آمده باشد. رجیستر، MDR همانند بافر عمل میکند و شامل کپی اطلاعاتی است، که از حافظه RAM طی عملیات Fetch به این رجیستر منتقل شده است تا توسط CPU مورد پردازش قرار گیرد. توجه کنید که MDR شامل اطلاعاتی است که هنوز توسط دیکدر های پردازنده Decode نشده اند.
رجیستر MDR شامل اطلاعاتی مانند، آدرس هایی از حافظه است که در حافظه RAM نوشته یا خوانده شده اند. به عنوان مثال برای واکشی داده هایی از سلول ۱۲۳ ( به باینری )، ما مقدار ۱۲۳ (به باینری)، را در رجیستر MAR بارگزاری میکنیم و عملیات Fetch را انجام میدهیم. وقتی عملیات Fetch تمام شد یک کپی از داده های سلول ۱۲۳ در رجیستر MDR بایستی نوشته شود. یا به عنوان مثال دیگر، برای ذخیره سازی مقدار ۹۸ ( به باینری )، در سلول ۴ در حافظه بایستی آدرس داده های ذخیره شده در سلول ۴ حافظه RAM را در رجیستر MAR بارگزاری کنیم و داده های این سلول را در رجیستر MDR ، و سپس عملیات ذخیره سازی را انجام دهیم. وقتی عملیات Fetch به انجام رسید، محتویات سلول ۴ حافظه RAM با مقدار ۹۸ پر خواهد شد. رجیستر MDR یک رجیستر دو طرفه است، به این معنی که داده ها از حافظه Fetch یا واکشی میشوند و در رجیستر MDR ذخیره میشود، که در حقیقت در یک جهت در این رجیستر نوشته شده است. زمانیکه دستورالعملی میخواهد نوشته شود بایستی داده ها در رجیستر MDR نوشته شوند و سپس در حافظه RAM ذخیره شوند.
Index Register
این رجیستر در پردازنده اعداد یا مقادیری را در خود نگه داری می کند که میتواند، از بخشی از آدرس یک دستورالعمل کم یا به آن اضافه شود تا به یک آدرس موثر و کارامد تبدیل شود. به Index Register اغلب Base Register نیز گفته میشود. Index Register در پردازنده کامپیوتر رجیستری است، که برای تغییر دادن آدرس های عملوند در طول اجرای یک برنامه مورد استفاده قرار میگیرد. به Index Register در اصلاح فنی BX نیز میگویند.
Memory Buffer Register یا MBR
این Register محتویات داده، یا دستورالعمل هایی که از حافظه خوانده، یا روی آن نوشته میشوند را در خود نگهداری میکند. به عبارت دیگر این رجیستر برای ذخیره سازی داده ها یا دستورالعمل هایی که از حافظه فراخوانی شده یا روی آن بارگزاری میشوند، مورد استفاده قرار میگیرد. رجیستر MBR همان رجیستر MDR است و تفاوتی با هم ندارند.
Data Register
این رجیستر برای ذخیره سازی موقتی داده هایی که از دستگاه های ذخیره سازی خوانده یا نوشته میشوند مورد استفاده قرار میگیرد. به Data Register در اصطلاح فنی DX نیز میگویند.