ثباتها یا رجیسترهای پردازنده (CPU Registers) قسمتی از سریع ترین و نزدیک ترین حافظه داخلی CPU است که وظیفه حفظ دادههایی که CPU درحال پردازش آنهاست را دارد.
ثباتهای پردازنده (CPU Registers) چیست؟
ثباتها یا Registerهای CPU قسمتی از حافظه موقتی داخلی پردازنده هستند که وظیفه حفظ دادههایی را دارند که CPU درحال حاضر درحال کار بر روی آنهاست. به همین دلیل به نام CPU Working Memory (حافظه کاری پردازنده) و CPU Workspace (میزکار پردازنده) نیز خوانده میشوند. ثباتها بسیار سریعتر از سایر حافظهها هستند؛ زیرا CPU همیشه درحال کار بر روی آنهاست و سرعت کم آن به همان اندازه باعث کاهش سرعت پردازنده میشود. ثباتها با ذخیره کردن دادهها یا آدرسها میتوانند عمل پردازش را بسیار سریعتر کنند.
به طور کلی ثباتها میتوانند شامل موارد زیر باشند:
- داده: پردازنده میتواند دادههایی که شامل اعداد (در برخی از معماریهای جدیدتر دادهها میتوانند کاراکتر یا آرایه نیز باشند) هستند را در ثباتهای خود ذخیره کند.
- آدرس: ثباتها میتوانند شامل آدرسهای مربوط به دادهها در حافظه اصلی باشند.
رجیسترهای پردازنده به عنوان یک حافظه داخلی، نزدیکترین دسترسی به واحد پردازشی CPU و در بالاترین قسمت سطوح انتزاعی حافظهها از لحاظ دسترسی به CPU قرار دارند و پس از آن، حافظه نهان داخلی پردازنده.
انواع ثباتهای CPU:
ثباتهای موجود در پردازنده را میتوان به صورت کلی به ۲ گروه زیر تقسیم کرد:
- ثباتهای قابل دسترسی (User Accessible Registers): این نوع رجیسترها توسط کاربر با استفاده از دستورات قابل دسترسی هستند.
- ثباتهای داخلی / غیرقابل دسترسی (Internal Registers): این نوع رجیسترها توسط کاربر غیرقابل دسترسی هستند و تنها به وسیله خود پردازشگر در عمل پردازش قابل دسترسی اند.
از ثباتهای قابل دسترسی مهم میتوان به موارد زیر اشاره کرد:
- ثباتهای عمومی (General Purpose Registers): این نوع ثباتها توسط کاربر قابل دسترسی و تغییر هستند و میتوانند شامل دادههای عملوند یا آدرسها باشند.
- ثباتهای ویژه (Special Purpose Registers): این نوع ثباتها به صورت مستقیم توسط کاربر قابل دسترسی نیستند و مخصوص خود پردازنده اند. برای مثال، ثباتهای ویژه میتوانند شامل Program Counter (به اصطلاح PC) باشد که وظیفه آدرس دهی دستورات برای پردازش را دارد
- شمارنده برنامه (Program Counter): این ثبات آدرس دستور بعدی در حافظه اصلی که باید پردازش شود را درخود نگه میدارد و معمولاً پس از دریافت هر دستور، به مقدار آن عدد ۱ افزوده میشود تا نشان دهنده آدرس بعدی باشد.
موضوع اصلی این مقاله ثباتهای عمومی (جزو ثباتهای قابل دسترسی) هستند. از ثباتهای داخلی / غیرقابل دسترسی نیز میتوان به موارد زیر اشاره کرد:
- ثبات دستوری (Instruction Register): این ثبات در برخی از پردازندهها (مانند Intel i7) توسط دستورات قابل دسترسی است. ثبات دستوری، دستور بعدی پردازشی را درخود نگه میدارد. این دستور معمولاً به خاطر دلایل امنیتی رمزگذاری شده و در این ثبات رمزنگاری میشود.
- ثبات آدرس حافظه اصلی (Memory Address Register): این ثبات وظیفه حفظ آدرس مربوط به هر نوع آیتم درخواست شده (آدرس مربوط به یک داده یا یک دستور) را برای نوشتن به یا خواندن از حافظه دارد.
- ثبات بافر حافظه (Memory Buffer Register): این ثبات وظیفه حفظ دادهها به صورت موقت درهنگام ارسال به حافظه یا دریافت از آن را دارد.
- ثبات داده حافظه (Memory Data Register): دادهها پس از دریافت به وسیله ثبات بافر حافظه، در این ثبات تا زمانی که تغییر داده نشوند، نگه داری میشوند.
نکته: تفاوت بین Program counter و Memory address register در این است که شمارنده برنامه تنها آدرس مربوط به دستورات را درخود نگه میدارد اما ثبات آدرس حافظه اصلی هر نوع آدرسی (داده یا دستور) را میتواند نگه دارد. پردازشگر از آدرس شمارنده برنامه برای دریافت دستورات بعدی استفاده میکند.
نکته: ثباتهای متفاومی ممکن است در CPU بسته به نوع طراحی آن وجود داشته باشد.
هر پردازنده دارای تعداد مشخصی ثبات (Register) است که بسیار سریعتر از سایر حافظهها (برای مثال حافظه Cache و…) اما محدود هستند. برای مثال، در پردازنده Intel i7 که از معماری x86 و طراحی CISC استفاده میکند، تنها ۸ رجیستر در حالت ۳۲ بیت و ۱۶ رجیستر در حالت ۶۴ بیت قابل استفاده هستند. نامهای ثباتهای عمومی ۳۲ بیت در این پردازنده به شرح زیر است (طبق گفته وبسایت رسمی اینتل در پست “راهنمای معماری برای توسعه نرمافزاری“):
EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
ثباتها چه وظیفهای دارند؟
میتوان گفت ثباتها مهمترین و کاربردی ترین حافظه در امر پردازش هستند؛ زیرا بسیاری از دستورات نمیتوانند به صورت مستقیم توسط واحد پردازشی CPU پردازش شده و خروجی را تحویل دهند. این دستورات نیازمند پردازش دستور یا دستوراتی دیگر قبل از ارائه خروجی هستند. در این حالت، CPU با استفاده از واحد اسمبلر (Assambler Unit، به معنای واحد تبدیل کننده به اسمبلی) دستور اصلی را به مجموعهای از دستورات تبدیل میکند. مجموعه دستورات بدست آمده، دستورات فرعی نام دارند.
نکته: در برنامههای نوشته شده به زبان اسمبلی، برنامه نویس میتواند به صورت مستقیم به ثباتهای عمومی دسترسی داشته باشد. بنابراین واحد اسمبلر از پروسه پردازش کنار گذاشته میشود. تنها در زبان سطح پایین اسمبلی میتوان به رجیسترها به صورت مستقیم دسترسی داشت و در سایر زبانهای سطح بالا، کامپایلرها و واحد اسمبلر این وظیفه را بر عهده دارند.
در ادامه پروسه پردازش، پردازنده هر یک از دستورات فرعی را با استفاده از واحد ALU (مخفف Arithmetic & Logic Unit و به معنای واحد محاسبه و منطق) پردازش کرده و نتیجه خروجی را در یکی از ثباتهای خود ذخیره میکند. هر یک از دستورات فرعی ممکن است بر خروجی دستور فرعی دیگر تاثیر بگذارد. به همین دلیل، ثباتها برخلاف سایر حافظهها به صورت منطقی (Logic) کار میکنند؛ یعنی یک ثبات میتواند بر ثبات دیگر اثر بگذارد. بنابراین ثباتها وظیفه دارند تا خروجیهای هر یک از دستورات فرعی را درخود (به صورت موقت) ذخیره کنند.
برای مثال، فرض کنید میخواهیم دستور زیر را پردازش کنیم. این دستور با استفاده از زبانی سطح بالاتر مانند C نوشته شده است:
y = x + z;
دستور ما به این صورت است که مقادیر دو عدد z و x با هم جمع شده، سپس در متغیر y قرار میگیرد. این دستور توسط زبانی به غیر از اسمبلی نوشته شده است. بنابراین واحد اسمبلر این دستور را به مجموعهای از دستورات فرعی تبدیل میکند: (فرض کنید که این دستورات بر روی پردازنده اینتل i7 با طراحی CISC پردازش میشوند)
LOAD EAX, LOC_X
LOAD EBX, LOC_Z
ADD EAX, EBX
STORE EAX, LOC_Y
نکته: این دستورات تنها برای آشنایی با نحوه عملکرد ثباتها نوشته شده اند و زبانهای نوشته شده خارج از بحث این مقاله هستند. همچنین تقسیم شدن دستورات به طراحی پردازنده (RISC و CISC، دو طراحی رایج) نیز بستگی دارد.
حال دستور اصلی به مجموعهای از دستورات فرعی شامل ۴ دستور جدید تبدیل شده است. مقادیر LOC_X ، LOC_Y و LOC_Z آدرسهای دادههای مربوط به هریک از متغیرها در حافظه اصلی (RAM) است. مقادیر EAX ، EBX نیز رجیسترهای پردازنده هستند که مورد استفاده قرار گرفته اند.
درخط اول، پردازنده مقدار موجود در آدرس LOC_X در حافظه اصلی را خوانده سپس در رجیستر EAX قرار میدهد. در خط دوم نیز به همین ترتیب، مقدار موجود در آدرس LOC_Z حافظه اصلی را در رجیستر EBX قرار میدهد. در خط سوم، پردازنده مقدار موجود در ثبات EBX را به ثبات EAX اضافه میکند. این عملیات جمع یک طرفه است. یعنی مقدار ثبات EAX بر EBX اضافه نمیشود (در حالت سادهتر: EAX = EAX + EBX). حال در ثبات EAX مقدار جمع شده معادله مورد نظر قرار دارد. برای آن که بتوان از این مقدار استفاده کرد آن را در حافظه اصلی، در آدرس LOC_Y قرار میدهیم. حال عملیات پردازش y = x + z به اتمام رسیده و خروجی مورد نظر، بدست آمده است.
همانطور که میبینید، در این دستور، پردازشگر از دو ثبات خود استفاده کرده است. تعداد ثباتها معمولاً برای انجام دستورات کافی هستند. در غیر این صورت، پردازشگر مجبور میشود تا از حافظه اصلی استفاده کند.
نکته: این پست به درخواست یکی از کاربران محترم سایت منتشر شده است.
آقا اطلاعاتت خیلی خوب و مفید بود. اما یه نکته ای!!
من بعنوان تحقیق میخوام این مطلبو بردارم اما این استاد ما گیر داده باید اسم منبع رو بگی… میشه بگی منبعش چه کتابی بوده؟؟؟
لطفا به ایمیلم بفرستید. ممنون ♥
سلام دوست عزیز. پستهایی که در این وبسایت منتشر میشن از هیچ منبعی برداشته نمیشن (مگر درمواردی مانند تصاویر یا لیستهای خاص. مثلاً منبع تصویری که کپی شده حتماً زیرش نوشته میشه). شما میتونید با خیال راحت از مطالب وبسایت استفاده کنید. میتونید منبع رو همین آدرس وبسایت ذکر کنید. برای اطلاعات بیشتر قسمت {مالکیت حقوق} وبسایت رو مطاله کنید.
البته لازم به ذکره که قسمت های خاصی از متن از منابع خارجی ترجمه شدن. موفق باشید.
یه سوال داشتم:
ثبات هایی که در حافظه هستند از کدام نوع فلیپ فلاپ هستش؟؟ و چرا؟؟؟
خانه های حافظه های موقت معمولا از ثبات درست نمیشه و از خازن درست میشه. البته حافظه های دائم از حوزه های مغناطیسی و یا فیوزبیت و … درست میشن.
البته حافظه کش از ثبات درست میشه. و اگر حافظه ای از ثبات درست شد، معمولا از جنس فلیپ فلاپ D هست.
شمارنده ها از فلیپ فلاپ T و یا JK استفاده می کنند.
تک بیت ها مانند بیت های پرچم و غیره از فلیپ فلاپ jk ساخته می شوند.
ممنونم از توضیحاتتون.
باسلام
اینجانب تخصص خاصی ندارم ولی دوست دارم در دو زمینه فعالیت داشته باشم و پول در بیاورم.یکی تعمیرات سخت افزارو دیگری برنامه نویسی.در زمینه برنامه نویسی کدام برنامه نویسی رو انتخاب کنم که رقیب آن کم و بروزتر باشد تا بتوان راحتر پول درآورد.و در بازار کار بتوان درخشید.خواهشن منابع آن را ذکر فرمایید اگرفیلم آموزشی که بصورت دی وی دی به همراه نام شرکت آن بفرماییدممنون می شوم. باتشکر.
من دو زبان اسمبلی و C رو بهتون پیشنهاد میدم. اسمبلی واسه اینکه برنامه نویسی برای سخت افزارها الان پول خیلی خوبی داره. البته باید یکم هم درباره الکتریک بدونین. زبان سی، واسه اینکه الان این زبان رو همه جا میتونین استفاده کنین. قابلیت انعطافش فوق العاده هستش و البته رقیب های زیادی هم در سر راهتون دارین. منابع خاصی سراغ ندارم و معتقدم که فقط قدم های اولو باید بلد باشین. بعدش خودتون با کمک منابع ساده و کم خرج اگه یاد بگیرین خیلی بیشتر از این واسه خودتون بهتره تا برین سراغ آموزش های پرهزینه.
با سلام
با تشکر از راهنمایی شما. درخصوص وی بی دانت 2008 و اس کیو ال 2008 بازار چطوره؟ وسوال دیگر اینکه زبان سی و زبان اسمبلی رو با هم یاد بگیرم یعنی لازم وملزوم همدیگر هستند؟ وسوال دیگر اینکه بعد از یادگرفتن چگونه ودر کجا دنبال بازارش بروم؟یعنی کجا می توانم دنبال مشتری آن بروم؟ خیلی خیلی ممنون.
درباره اس کیو ال نمیدونم ولی درباره دات نت باید بگم که بله دو زبان سی و اسمبلی خیلی بیشتر از اون کاربرد داره. این دو زبان مکمل همدیگه نیستن و واسه شروع کار میتونین به شرکت های آموزش برنامه نویسی ملحق بشین.
سلام
تشکرمیکنم از اطلاعات خوبی که ارائه دادید.
ممنون میشم کمکم کنید سوال منو جواب بدید .
نحوه ی ارتباط cpuوحافظه ازطریق کدوم کانال های ارتباطی انجام میشه ؟؟؟بازم ممنونم
سلام، قطعات کامپیوتری مثل پردازنده، رم، هارد و … از طریق کانال های ارتباطی که اسمشون Bus هستش به هم وصل میشن. یه باس اصلی که روی رم وجود داره کانالیه که پروسسور رو به رم متصل میکنه و معمولاً همیشه دارای ترافیک خیلی زیادی هم هست. اسم این باس Front Side Bus یا FSB ـه. البته اف اس بی پردازنده رو به کنترلر RAM متصل میکنه و از طریق اون داده ها ذخیره میشن. موفق باشید.
با سلام/سوالی که مد نظرم هست این هست که در regedit دقیقا در کدوم شاخه میتونم cpu machine keyپیدا کنم؟
و آیا فایلexport شده اگر کاملا ماله یک ویندوزه تازه نصب شده باشه و import بشه ، آیا شاخه ها replace میشن یا شاخه های قبلی کلن پاک میشه؟(یعنی فایلimport کامل غالب registery میشه یا فقط شاخه هاش replace میشن؟
ممنون و خسته نباشید
سلام. اول باید بگم که رجیستری ویندوز با رجیسترهای CPU کاملاً متفاوته و هیچ ربطی به هم ندارن. در رجیستری ویندوز تنظیمات و پیکربندی های مربوط به سخت افزار کامپیوتر در کلید ریشه HKLM {بیشتر بخوانید} و برای پروفایل هاش در کلید ریشه HKCC {بیشتر بخوانید} ذخیره میشن. برای سوال دومتون، بستگی به فایل رجیستری داره. اگه در این فایل رجیستری نوشته شده باشه که فلان کلید ها رو حذف کن، در این صورت اگه اجراش کنید اون کلید ها حذف میشن ولی بیشتر مواقع حذف شدن و فایل رجیستری ذکر نمیشه و فقط جایگزین میشن. موفق باشید.
منظوره من این هست که الان من میخوام یک ویندوز خراب رو از طریق رجیستری تعمیر کنم و میام از exportیک ویندوز تازه نصب شده استفاده میکنم ، میشه بفرمایید من برای این کار چه کار هایی رو باید انجام بدم؟
سلام، من به شخصه این کارو تاحالا انجام ندادم و نتیجشو نمیدونم ولی به احتمال زیاد ویندوز خراب درست نمیشه چون پیکربندی های سخت افزاری توی رجیستری ویندوز سالم با خراب فرق داره. چرا ویندوز رو از نو نصب نمیکنید؟ درصد موفقیت این روش خیلی کمه.
فوق العاده توضیح داده ایی . اینکه بتونی یک مطلب را خوب و همراه با مثال توضیح بدهی ، هنریست که هر کسی آنرا ندارد بخصوص بعضی از اساتید دانشگاه .
خیلی ممنونم ازتون 😉
سلام ممنون از اطلاعات خوبي مع در اختيار ما قراد دارين به سوْال واقعا دسترسي به ثباتها يا حافظه به چه دردي مي خوره با زبان c خيلي راحت تَر مي شه أين دستوران را اجرا كنه يعني كجا به دردمون مي خوره اين زبان اسمبلي
سلام، ممنون. دوست عزیز همونطور که میدونید زبان هایی که به صورت انتزاعی در سطوح بالاتر هستند (مثل C) برای اجرا شدن نیاز به منابع سیستم عامل دارن و سیستم عامل هم به صورت اتوماتیک منابع سیستمی رو در اختیار برنامه قرار میده به همین دلیله که برنامه نویس چندان نیازی به فهمیدن منابع سیستمی نداره و میتونه خیلی راحت برنامه رو بسازه و همه چیزو به عهده سیستم عامل بزاره. ولی مشکل اینجاست که سیستم عامل به صورت بهینه این اختصاص دادن منابع رو انجام نمیده به همین دلیل اگه همون برنامه با زبان اسمبلی نوشته بشه سرعت بسیار زیادی نسبت به همون برنامه c خواهد داشت. در کل میشه اسمبلی رو برای “بهینه بودن برنامه” و جاهایی که نیاز به نوشتن درایورهای سخت افزاری هست (به دلیل این که سرعتش باید بالا باشه) و در ابزارهایی که حافظه تعبیه شده داره و اندازه کدها خیلی مهمه، مناسب دونست.
سلام من هم دانشجو it هستم خیلی ممنون
سلام، خواهش میکنم دوست عزیز
سلام.من 60 سال سن دارم ومیخواهم تعمیرات را خوب یاد بگیرم.البته من عاشق تعمیراتم ولی باید علم مربوطه را هم پیدا کنم.خواهش میکنم در مورد ولتاژ گیری یک مقاله مبسوط بنویسید و اینکه ولتاژ وی کور چیست وچگونه تست میشود
VCORE
سلام. اینا مباحث مربوط به رشته برق هستن معمولا. پیشنهاد میکنم صفحه انگلیسی ویکی پدیا رو درمورد CPU Core Voltage و مقاله هایی در مودم نحوه Overclock رو بخونید چون در این جور مقاله ها بیشتر به مباحث مربوط به برق سی پی یو پرداخته میشه.
دمت گرم خیییلی خوب توضیح دادی
خیلی ممنون 😉
سلام اقا امیر خیلی خوب بود من فارغ تحصیل رشته سخت افزارم و اون اطلاعاتی رو که در مورد RiscوSisc گذاشته بودی خوب بود ولی هنوز برای اینکه سایتت پر محتواتر بشه منابع و مقالاتی رو که استفاده میکنی بزار تو سایتت و هم اینکه هنوز تو بحث تخصصی اسمبلی ریزتر شی عالییه ولی در کل با توجه به سن وسالی که داری و این اطلاعات بالات شک ندارم اینده بیشتر ازت میشنوم اقا امیر گل
خیلی ممنونم دوست عزیز، چشم. 😉
سلام…مرسي از مطالب خوبت
كلي استفاده كردم ..خيلي خوب توضيح ميدي….
موفق باشي….
خواهش میکنم 😉
سلام واسم خیلی جالب بود اطلاعات خوبی بود واقعا ممنون نیاز به ارتقاع سطح دارم بطور جدی
نظر لطفتونه 🙂
با سلام
باید بگم کارتون عالیه
خیلی ممنونم ازتون 🙂
سلام.ممنون از سایت خوبتون.یک سوال داشتم.درایورهای لپ تاپ من updete نمیشن و این پیامو نشون میده.
windows has determined the driver software for your device is up tp date ولی وقتی driver date نگاه میکنم همون تاریخ قبل هست که خیلی قدیمیه.ممنون میشم منو راهنمایی کنید.ببخشید سوال رو اینجا مطرح کردم.
دوست عزیز این پیام یعنی این که “ویندوز تشخیص داده درایوراتون آپدیت هستن” نه این که “ویندوز درایوارتونو آپدیت کرده”. اگه واقعا مطمئنین که یه آپدیت جدید تر وجود داره، بهتره دستی دانلود و نصبش کنید.
خیلی ممنون که به سوالم جواب دادید.متشکرم.
زنده باشید 🙂
مرسی امیر جان مطالب که گذاشتین خیلی خوب هس
یاشا داداش.
سلام دوست عزیز مرسی از اطلاعات مفیدت یک سوال داشتم:چطور میشه بد سکتور سخت افزاری رو برطرف کرد ممنون.
سلام. بد سکتورهای سخت افزاری قابل برطرف کردن نیستن ولی با تکنیک های تخصصی میشه اطلاعاتشون رو بازیابی کرد.
سلام!
خدا سلامتیتون بده!
واقعا فوق العاده بود!
ممنونم!
تنها کاری که از دستم بر میومد این بود که نظر بدم!!!
خیلی ممــنون…!
خواهش میکنم دوست عزیز 🙂 زنده باشید.