اصولاَ ساختار و مشخصات داخلی CPU و همچنین ثباتها، قابلیتهای هر کامپیوتری، در کاتالوگ سیستم کامپیوتری مربوطه وجود دارد.
در کاتلوگ مذکور لیست تمام دستورات، فرمتهای مختلف دستورها، کد اجرایی و جزئیات هر دستور نوشته شده است بررسی و تجزیه و تحلیل دستورات، و فراهم آوردن تابعهای مورد لزوم برای اجرای هر دستور، توسط واحد کنترل انجام میشود.
فرمت هر دستور معمولاَ به چند قسمت1 تقسیم شده است که معمولترین این قسمتها شامل:
1- قسمت کد اجرا، که نوع عملیات دستور را مشخص میکند.
2- قسمت آدرس، که آدرس یک خانه حافظه، یا ثبات پروسسور را مشخص میکند.
3- قسمت حالت آدرس دهی، که معمولاَ روشی است که عملوند یا آدرس مؤثر تعیین میشود را، بیان میکند.
البته در بعضی حاالات قسمتهای دیگری نظیر تعداد شیفت در یک دستور شیفت، و یا نظایر آن نیز وجود دارد.
اصولاَ عملیات دستورات کامپیوتر برروی اطلاعاتی است که در حافظه، و یا ثباتهای پروسسور قرار دارد.
بدیهی است هر خانه و یا ثبات پردازنده توسط آدرسدهی آنها تعیین میشود.
آدرس ثبات پردازنده با 16 ثبات تا دارای قسمت آدرس ثبات با 4 بیت میباشد مثلاَ عدد باینری 0101 ثبات را مشخص مینماید.
کامپیوتر ممکن است دارای دستورات با طولهای مختلف و تعداد بیتهای قسمت آدرس متفاوت باشند.
تعداد بیتهای قسمت آدرس در فرمت دستور، تابع تعداد ثباتهای CPU است، ثباتهای اکثر CPU کامپیوترها، به یکی از سه فرم زیر میباشد.
- CPU دارای یک اکومولیتور
- CPU دارای چندین ثبات
- CPU دارای حافظه پشته
یک مثالی از تشکیلات کامپیوتری که CPU آن فقط یک اکومولیتور است مورد بحث قرار گرفت.
در این CPU تمام عملیات برروی اکومولیتور انجام میشود به عنوان مثال دستوری که جکع ریاضی را انجام میدهد در زبان اسمبلی بصورت:
ADDX
نوشته میشود که در آن X آدرس عملوند در حافظه است این دستور محتوای خانه حافظه به آدرس X را که به نمایش میدهیم با محتوی اکومولیتور AC جمع، و تیجه را در اکومولیتور AC قرار میدهد یعنی .
مثالی از کامپیوترهائی که دارای چندین ثبات هستند نشان داده شده است.
فرمت
دستور در این کامپیوتر نیاز به سه قسمت آدرس دارد.
به این ترتبیب دستور در این کامپیوتر نیاز به سه قسمت آدرس دارد.
لذا دستور زبان اسمبلی برای جمع ریاضی ممکن است به صورت زیر نوشته شود.
ADD R1 , R2 , R3
که عملیات را انجام میدهد.
البته قسمتهای آدرس دستور را، میتوان از 3 به 2 تقلیل داد، بشرط اینکه ثبات مبدأ و مقصد یکی شود یعنی دستور بصورت ADD R1 , R2 باشد، که عملیات را انجام میدهد.
که در این صورت در این دستور فقط آدرس ثباتهای و قرار دارند.
در کامپیوترهای با چندین ثبات در CPU دستور MOV برای انتقال اطلاعات بین ثباتها بکار میرود.
مثلاَ MOV R1, R2
که عملیات ( یا بستگی به نوع کامپیوتر) را انجام میدهند.
بنابراین دستورات انتقال نیاز به آدرس، برای ادرس ثبات مقصد، و ادرس ثبات منبع دارد.
فرمت دستور کامپیوترهائی که دارای چندین ثبات در CPU هستند دو یا 3 قسمت آدرس دارند.
بدیهی است هر قسمت آدرس میتواند ادرس یک ثبات پردازنده، یا ادرس یک خانه حافظه باشد.
به عنوان مثال دستور:
ADD R1 , X
عملیات را مشخص میکند.
این دستور دارای دو آدرس یکی برای ثبات و دیگری X جهت آدرس یک خانه حافظه است.
در این کامپیوترها دستورات PUSH و POP دارای یک ادرس هستند مثلاَ دستور:
PUSH X
خانه حافظه به آدرس X را در بالای حافظه پشته قرار میدهد، و اشاره گر پشته SP ، بطور خودکار بهنگام میشود.
البته دستورات اجرائی در کامپیوتر با تشکیلات پشته نیازی به قسمت آدرس ندارند، چون عملیات برروی دو مقدار که بالای حافظه پشته هستند انجام میشود.
به عنوان مثال دستور:ADD در کامپیوترهای باتشکیلات حافظه پشته فقط دارای ناحیه کد احرایی میباشند، و نیازی به قسمت آدرس ندارند.
در حیقت برای اجرای این دستور دو مقدار بالای حافظه پشته استخراج میشود، با هم جمع میگردند، و نتیجه در حافظه پشته قرار داده میشود.
به این ترتیب در این دستور نیازی به قسمت آدرس نیست چون همه عملیات برروی بالای حافظه پشته انجام میشود.
البته بعضی کامپیوترها دارای تشکیلات CPU ، از مجموع سه فرم ذکرشده هستند .
به عنوان مثال میکروپروسسور 8080 دارای 7 ثبات CPU اسن که یکی از آنها اکومولیتور میباشد.
در این CPU ، تمام دستورات ریاضی، منطقی، بارکردن و ذخیره نمودن در حافظه برروی اکومولیتور AC انجام میشود.
بنابراین دستورات این CPU فقط دارای یک آدرس است، چون آدرس دیگر آدرس اکومولیتور است، که بدیهی میباشد و نیازی نیست که در دستور ذکر گردد.
ولی دستوراتی که اطلاعات بین دو ثبات را انتقال میدهند دارای دو قسمت ادرسس برای دو ثباتها میباشند.
علاوه براین، CPU مذکور دارای حافظه پشته و دستورات PUSH و POP میباشد.
البته این CPU دارای دستورات صفر آدرسی نیست، که این دستورات جزء مشخصات CPU های نوع حافظه پشته است.
برای بررسی اثر تعداد آدرسهای دستور کامپیوتر در برنامه کامپیوتری ما محاسبه عبارت زیر را :
X=(A+B) (C+D)
با دستورات صفر آدرسی، یک آدرسی و سه آدرسی بررسی مینمائیم.
ما سمبولهای
ADD ‘ SUB ‘ MUL ‘ و DIV را برای چهار عمل محاسباتی +،-، ،/ در نظر میگیریم.
و نماد MOVE را برای انتقال اطلاعات بین ثباتها و نمادهایLOAD وSORTE را جهت انتقال اطلاعات از حافظه به ثبات اکومولیتور AC و بالعکس در نظر میگیریم.
ما فرض میکنیم که عملوندها در آدرسهای AوB وC وD حافظه قرار دارند و نتیجه محاسبات نیز در آدرس X حافظه قرار خواهد گرفت.
دستورات سه آدرسی
در کامپیوترهای با فرمت دستورات سه آدرسی، هر قسمت آدرس را، برای مشخص نمودن یک ثبات پردازنده و یا آدرس یک عملوند در حافظه، تخصیص میدهد.
نمونههائی از دستورات سه آدرسی در یک برنامه اسمبلی برای محاسبه همراه با توضیحات هر دستور در زیر نشان داده شده است:
در کامپیوترهای با فرمت دستورات سه آدرسی، هر قسمت آدرس را، برای مشخص نمودن یک ثبات پردازنده و یا آدرس یک عملوند در حافظه، تخصیص میدهد.
نمونههائی از دستورات سه آدرسی در یک برنامه اسمبلی برای محاسبههمراه با توضیحات هر دستور در زیر نشان داده شده است: ADD R1 , A , B ADD R2, C ,D MUL X , R1 , R2 فرض میگردد که کامپیوتر دارای دو ثبات پردازنده و است و یعنی عملوندی که در آدرس حافظه A قرار دارد.
یکی از محاسن فرمت سه آدرسی دستور، اینست که برنامه محاسبات ریاضی کوتاه میشود.
و اشکال آن اینست که فرم باینری دستور دارای بیتهای زیادی برای مشخص نمودن سه آدرس میباشد.
یک مثالی از کامپیوتری که دستورات سه آدرسی مصرف میکند کامپیوتر 170 Cyber است.
فرمت دستور در کامپیوتر مذکور، یا دارای سه قسمت برای آدرس ثباتها، دو یا دو قسمت جهت آدرس ثباتها و یک قسمت برای آدرس حافظه میباشد.
دستورات دو آدرسی دستورات دو آدرسی معمولترین فرمت دستور در کامپیوترها هستند در اینجا نیز قسمت آدرس میتواند یک ثبات پردازنده، یا یک خانه حافظه را مشخص نماید.
در این صورت برنامه محاسبه فرمول x مطابق زیر میشو A MOV R1 , ADD R1 , B MOV R2 ADD R2 , D MUL R1,R2 MOV X,R1 دستور MOV عملوند را از خانه حافظه به ثباتها و بالعکس منتقل مینماید.
دستورات یک آدرسی دستورات یک آدرسی، برای تمام عملیات برروی دادهها ثبات اکومولیتور AC را بکار میبرد.
البته برای محاسبات ضرب، و تقسیم نیاز به ثبات د یگری میباشد ولی ما در اینجا فرض میکنیم که ثبات اکومولیتور شامل نتیجه محاسبات است و نیازی به ثبات دیگر نمیباشد به این ترتیب برنامهای که مقدار را محاسبه نماید مطابق زیر است: در بنامه فوق عملیات بین ثابت اکومولیتور AC و خانه حافظه انجام میشو و T آدرس یک خانه از حافظه میباشد که برای ذخیره اطلاعات موقتی مورد نیاز است.
دستورات صفر آدرسی کامپیوترهای با تشکیلات حافظه پشته قسمت آدرس در دستورات جمع ADD و ضرب MUT ندارد( دستورات صفر آدرسی دارای قسمت آدرس نیستند).
ولی دستورات PUSH و POP دارای یک قسمت آدرس هستند که مشخص کننده عملوندی است که با حافظه پشته در ارتباط میباشد.
برنامه زیر محاسبه را در کامپیوتری با تشکیلات حافظه پشته نشان میدهد( TOS نشان دهنده بالای حافظه پشته است).
برای محاسبه عبارت ریاضی در کامپیوترهای با تشکیلات حافظه پشته لازم است که ابتدا عبارت ریاضی بفرم لهستانی معکوس تبدیل شود.
همانطوریکه ملاحظه میشود، برای یک برنامه مورد نظر مثلاَ محاسبه X برنامه با کامپیوترهای با دستورات سه آدرسی بسیار کوتاهتر از برنامه با دستورات یک آدرسی یا صفر آدرسی میباشد.
دستورات کامپیوترهای RISC پردازندههای RISC موقعیکه بخواهند با حافظه اربتاط برقرار کنند از دستورات STORE ( ذخیره کردن) و LOAD ( بار کردن) استفاده مینمایند، ولی بقیه دستورات بین ثباتهای CPU دستورات LOAD و STORE دارای یک قسمت آدرس ثبات و یک قسمت آدرس حافظه هستند ولی دستورات محاسباتی سه قسمت آدرس، برای ثباتها دارند.
به این ترتیب برنامه محاسبه مطابق زیر میشود.
در برنامه مذکور دستور باز کردن LOAD عملوند را از حافظه به ثبات CPU انتقال میدهد و دستورات جمع و ضرب برروی اطلاعات ثباتهای CPU ( بدون مراجعه به حافظه) انجام میشوند سپس نتیجه محاسباتی با دستور STORE در حافظه ذخیره میگردد.
کامپیوترهای RISC1 یکی از مسائل مهم در معماری کامپیوتر طراحی دستورات برای پروسور است.
در حقیقت انتخاب دستورات برای یک کامپیوتر بخصوص روشی که برنامه به زبان ماشین نوشته میشود را، مشخص مینماید البته کامپیوترهای اولیه بمنظور کم کردن سخت افزار، تعداد محدودی دستورات ساده داشتند و به همین ترتیب که مدارهای مجتمع(IC ) و سختافزار پیشرفت کرد تعداد دستورات و پیچیدگی دستورات بیش از 200 دستور دارند علاوه بر این با انواع دادهها و آدرسدهی های مختلف کار میکنند.
پیچیده تر کردن سختافزار و دستورات بیشتر دلائل متعددی دارد که از جمله این دلائل عبارتند از: به روز درآوردن و توسعه کامپیوتر، با قابلیتهای جدید، برای بدست آوردن مشتریهای بیشتر.
اضافه کردن دستورات برای اینکه برنامههی سطح بالا آسانتر به زبان ماشین ترجمه گردند.
وسوق به طرف ماشینهائی که کارهای نرمافزاری را با سختافزار انجام دهد.
کامپیوترهای باتعداد دستورات زیاد به نام کامپیوترهای با دستورات پیچیده CISC 2 دستهبنید میشوند.
در سلهای 1980 عدهای از طراحان کامپیوتر پیشنهاد نمودند که کامپیوترهایی با دستورات سادهتر و کنتر طراحی شوند بطوریکه دستورات CPU با سرعت بیشتر اجرا گردند، و حداقل مراجعه به حافظه را داشته باشند این نوع کامپیوترها به نام کامپیوترهای با دستورات تقلیل یافته RISC معروف شدند.
در این بخش ما مشخصات اصلی معماری کامپیوترهای CISC و RISC را مورد بحث قرار خواهیم داد.
مشخصات کامپیوترهای CISC در طراحی دستورات کامپیوتر نه فقط میبایستی به ساختار زبان ماشین توجه نمود بلکه مشخصاتی را که زبانهای سطح بالا تعیین مینمایند را میبایستی در نظر گرفت ترچمه برنامه از زبان سطح بالا به زبا ماشین توسط برنامه کامپایلر انجام میپذیرد.
یکی از دلائل تمایل به طراحی کامپیوترهای بادستورات پیچیده CISC ساده بودن عمل کامپایلر بالطبع بالا بردن کارائی کامپیوتر است وظیفه کامپایلر این است که هر عبارت زبان سطح بالا را تبدیل به یک سری دستورات زبان ماشین نماید.
بدیهی است اگر عبارات زبان سطح بالا مستقیماَ بوسیله دستورات زبان ماشین اجرا شوند وظیفه کامپایلر بسیار سادهتر خواهد بود.
هدف اصلی معماری CISC ان است که برای هر عبارت زبان سطح بالا یک دستور زبان ماشین وجود داشته باشد.
مثالی از معماری کامپیوترهای CISC کامپیوترهای VAX شرکت Digital Equipment و کامپیوترهای 370 ای.
بی.
ام میباشند.
یکی دیگر از مشخصات معماری کامپیوترهای CISC به کار بردن فرمت دستور با طول متغیر است.
به عنوان مثال دستوراتی که عملوندهای داخل ثباتها را نیاز دارند، ممکن است دو بایتی باشند ولی دستوراتی که دو آدرس حافظه در آنها قرار دارند ممکن است پنج بایتی باشد.
بنابراین اگر کلمه کامپیوتر ما 32 بیتی( 4بایت) باشد، دستور اول نصف کلمه را اشغال مینماید ولی دستور دوم یک کلمه بعلاوه حافظههای با طول کلمه ثابت نیاز به یک مدار رمزگشا دارد، که تعداد بایتهای استفاده شده هر کلمه را بشمارد و دستورات را بر حسب طول موج آنها در کلمات جای دهد.
در دستورات کامپیوترهای CISC محل عملوند در حافظه مستقیماَ در دستور مشخص میشود به عنوان مثال در دستور جمع ADD یک عملوند ممکن است از طریق آدرسدهی شاخص تعیین شود، و عملوند دوم از طریق ادرسدهی مستقیم مشخص گردد، و بالاخره در دستور ممکن است محل دیگری از حافظه برای مشخص کردن نتیجه جمع تعیین گردد.
به این ترتیب برای اجرای دستور فوق نیاز به سه بار مراجعه با حافظه میباشد.
بهرحال هر چه دستورات و نحوه آدرسدهی بیشتری در کامپیوتر وجدود داشته باشد سختافزار بیشتری برای پیاده سازی آنها مورد نیاز است که ممکن است باعث پایین آمدن سرعت محاسبات گردد.
بطور خلاصه مشخصات اصلی کامپیوترهای CISC بقرار زیرند: تعداد زیادی دستور مثلاَ بین 100 تا 250 دارند.
بعضی دستورات، که وظایفی خاصی را انجام میدهندکمتر مصرف میشوند.
گونههای زیادی حالتهای آدرسدهی دارند، مثلاَ بین 5 تا 20 حالت آدرسدهی ممکن است داشته باشند.
فرمت دستورات با طول متغیر دارند.
دستوراتی دارند که با عملوندهایی در حافظه کار میکنند.
مشخصات کامپیوترهای RISC اصولاَ معماری کامپیوترهای RISC بر این اساس است که سعی شود با سادهکردن دستورات زمان اجرای دستورات تقلیل یابد.
شمخصات اصلی پروسسورهای RISC عبارتند از: دستورات نسبتاَ کمی دارند.
حالتهای آدرس دهی نسبتاَ کمی دارند.
دسترسی به جافظه فقط از طریق دستور باز کردن LOAD ، و ذخیره نمودن STORE ، انجامئ میشود.
تمام عملیات در داخل ثباتهای CPU انجام میشود.
دستورات با طول ثابت و بالطبع رمزگشایی سادهتری دارند.
اجرای دستورات در یک سیکل پالس ساعت انجام شود.
کنترل سختافزاری بجای کنترل میکروپروگرام بکار گرفته شود.
اکثر دستورات کامپیوترهای RISC بین ثابتهای پروسسور انجام میشود، و فقط دستور بارکردن LOAD و ذخیره نمودن STORE از طریق حافظه انجام میگیرد.
به این ترتیب هر عملوندی با دادههائی که در ثباتها قرار دارند انجام میشوند، و نتیجه نیز از طریق دستور ذخیره نمودن STPRE ، در حافظه ذخیره میگردد.
فلسفه کم شدن تعداد حالتهای آدرسدهی به این علت است که در تمام دستورات روی ثباتها انجام میشود، در نتیجه حالت آدرسدهی ثباتها بکرا میرود.
البته حالتهای آدرسدهی دیگر از قبیل آدرسدهی بالفصل و آدرس دهی نسبی نیز وجود دارند.
با بکار بدرن فرمت نسبتاَ ساده دستور، طول دستورات میتوانند ثابت و در حدود یک کلمه حافظه باشند یکی از ویژگیهای فرمت دستورات کامپیوترهای RISC این است که رمزگشایی آنها آسان است.
چون کد اجرایی، و آدرس ثباتها توسط واحد کنترل همزمان دیکد میشوند، در نتیجه مدار متطقی کمتر و دستور سریعتر اجرا میشود.
علاوه بر این برای سرعت بیشتر کنترل سختافزاری بکرا میرود.
یک مشخصه دیگر پردازندههای RISC قابلیت آنها برای اجرای دستور در یک سیکل پالس ساعت است، که این عمل با روش خط لوله، برای مراحل واکشی، رمزگشایی، و اجرای دستور انجام میپذیرد.
البته دستورات بارکردن LOAD ذخیره نمودن در حافظه STORE ممکن است نیاز به دو پالس ساعت داشته باشند چون دسترسی به حافظه بیش از دسترسی به ثباتها وقت میگیرد.
ویژگیهای دیگر معماری RISC عبارتند از: اصولاَ تعداد زیادی ثبات در پروسسور وجود دارند.
بکاربردن ثباتهای همپوشی برای سرعت بخشیدن به عملیات فراخوانی CALL و برگشت RETURN از سابروتین استفاده میگردد.
خط لوله دستورات با بهره بالا بکرا گرفته میشود.
کامپایلرهایی برای ترجمه، با بهره خوب، زیانهای سطح بالا، به زبان ماشین دارند.
البته با بکاربردن تعداد زیادی ثبات، نتیجه مجاسبات موقتی را میتوان بجای ذخیره درحافظه، در ثباتها ذخیره نمود.
یکی از محاسن ذخیره در ثبات این است که ثباتها میتوانند اطلاعات را خیلی سریعتر( نسبت به حافظه) با ثبات دیگر تبادل نمایند.
همپوشی پنچره ثبات 1 در زبانهای سطح بالا فراخوانی سابروتین و برگشت از آن بسیار اتفاق میافتد.
موقعیکه یک فراخوانی سابروتین،(در برنامه به زبانهای سطح بالا) به زبان ماشین ترجمه گردد تولید تعدادی دستورات: برای ذخیره نمودن مقادیر ثباتها مینماید.
برای انتقال پارامترهای مورد نیاز به سابروتین میگردد.
و سپس دستورات سابروتین اجرا میشود.
موقعیکه از سابروتین برگشت میشود، مقادیر قبلی ثباتها به آنها برگشت داده میشوند.
نتایج محاسبات سابروتین به برنامه اصلی منتقل میشوند، و کنترل به برنامه اصلی برمیگردد.
بعضی کامپیوترها بانکهای متعددی ا زثبات دارند، و هر سابروتینی به بانک ثبات خودش وابسته است که در اینصورت نیازی نیست که در برنامه محتوای ثباتها را ذخیره نمود و سپس بازیابی کرد.
عدهای از کامپیوترها، حافظه پشته برای ذخیره پارامترهایی که در سابروتین نیاز است بکار میبرند، ولی برای هر بار مراجعه به حافظه پشته میبایستی به حافظه اصلی مراجعه شود.
یکی از مشخصات بعضی پروسسورهای RISC اینست که برای انتقال پارامترهای سابروتین از پنجره ثباتهای همپوشی استفاده میکنند، که در اینصورت نیازی نیست که مجتوی ثباتها در حافظه ذخیره شود، و دوباره بازیابی گردد.
هر فراخوانی سابروتین باعث میشود که تعدادی از پنجره ثباتهای پروسور برای سابروتین جدید بکرا رود.
هر فراخوانی سابروتین، با افزایش یک اشارهگر، پنجره ثباتهای جدیدی در پروسسور را فعال میکند، و هر برگشت از سابروتین یکی از اشارهگرهای پنجره ثباتها را کم میکند، و پنجره ثباتهای قبلی را فعال میکند.
در این سیستم 74 ثبات وجود دارد که ثباتهای تا ثباتهای کلی هستند که پارامترهای مشترک تمام سابروتینها را نگه میدارد.
بقیه 64 ثبات به چهار پنجره برای سابروتینهای AوB وC وD تقسیم شدهاند.
هر پنجره ثباتها شامل 10 ثبات محلی، و 6 ثبات مشترک با پنجره ثبات بالائی و 6 ثبات مشترک با پنجره ثبات پائینی است.
ثباتهای محلی برای ذخیره متغیرهای محلی است، و ثباتهای مشترک برای تبادل پارامترها، و انتقال نتایج بین سابروتینهای همسایه است.
ثباتهای همپوشی مشترک برای انتقال پرامترهای سابروتین بدون انتقال واقعی پرامترهاست.
در هر لحظه فقط یک پنجره ثباتها فعال است که اشارهگر، فعال بودن آن پنجره را نشان میدهد.
هر فراخوانی سابروتین با افزایش یک اشارهگر یک پنجره جدید ثبات را فعال میکند.
ثباتهای بالائی سابروتینی که فراخوانی میکند، با ثباتهای پائینی سابروتین فراخوانی شده همپوشی یا مشترک میشود، به این ترتیب پارامترها بطور خودکار از سابروتینی که فراخوانده است، به سابروتینی که فراخوانده میشود منتقل میگردد.
به عنوان مثال فرض میکنیم که سابروتین A ، سابروتینB ، را فراخوانی کند، در اینصورت ثباتهای تا مشترک بین دو سابروتین هستند.
بنابراین سابروتین A پرامترهای مورد نظر را برای متغیرهای محلی بکار میبرد.
اگر سابروتین B سابروتین C را فراخوانی کند، در اینصورت سابروتین B پارامترهای مورد نیاز را برای انتقال به سابروتین C در ثباتهای تا ذخیره مینماید.
موقعیکه سابروتین B در انتهای محاسباتش میخواهد به ساروتین A برگردد سابروتین B ، نتیجه محاسباتش را در ثباتهای تا قرار میدهد، و به پنجره ثبات A برمیگردد.
البته ثباتهای تابین سابروتینهای A وD مشترک هستند، چون چهار پنجره فرم دایرهای دارند و سابروتین A پهلوی سابروتین B قرار میگیرد.
همانطوریکه قبلاَ ذکر شد، 10 ثبات کلی تا در اختیار تمام سابروتین با میباشند.
هر سابروتینی که فعال باشد دارای 32 ثبات فعال است یعنی 10 ثبات کلی، 10 ثبات محلی، شش ثبات همپوش یا مشترک پائین و شش ثبات همپوشی بالا در اختیار دارد.
بطور کلی تشکیلات پنچرههای ثبتها بصورت زیر میباشند: G تعداد ثباتهای کلی L تعداد ثباتهای محلی در هر پنجره C تعداد ثباتهای مشترک در دو پنجره W تعداد پنجرهها در اینصورت تعداد ثباتهای هر پنجره از رابطه زیر مشخص میشود: اندازه پنجره و تعداد ثباتهای مورد نیاز هر پروسسور برابر: فایل ثباتها میباشد به عنوان مثال، مقدار ،، و است و اندازه پنجره برابر میباشد و تعداد ثباتهای فابل ثباتها برابر است.
کامپیوترهای RISC I دانشگاه برکلی یکی از پروژههای اولیهای که در جهت نشان دادن محاسن معماری کامپیوتر RISC I انجام شد از دانشگاه برکلی کالیفرنیا میباشذ.
کامپیوتر RISC I دانشگاه برکلی دارایCPU ،32 بیتی است.
که میتواند بصورت 8،16و32 بیتی کار کند و 32 بیت آدرس دارد.
این کامپیوتر دارای 31 دستور 32 بیتی است و دارای سه حالت آدرسدهی مانند آدرس ثبات بلافصل، و آدرس دهی نسبی برای دستورات انشعاب است.
این CPU دارای یک فایل ثبات، متشکل از 138 ثبات 32 بیتی است، که بصورت 10 ثبات کلی، و 8 پنجره ثبات است و هر یک متشکل از 32 ثبات میباشند.
چون در هر لحظه فقط یک پنجره( که دارای 32 ثبلت است ) میتواند قابل دسترسی باشد، پس یک ناحیه 5 بیتی برای انتخاب هر یک از ثباتها در فرمت دستور کافیست.
در فرمت دستور، کد اجرایی 8 بیتی است، که 7 بیت برای مشخص کردن کد اجرایی، و یک بیت نیز تعیین مینماید که آیا، بیتهای وضعیت بعد از عملیات ALU به روز در بیایند یا نه.
برای دستورات حالت ثبات به ثبات قسمت Rd، پنج بیتی است که با ترکیب این 5 بیت یکی از 32 ثباتهای مقصد را، برای نتایج محاسبات میتوان انتخاب نمود.
البته عملیات روی اطلاعاتی که در ناحیههایRS (RS یک ثبات منبع را مشخص مینماید)و2S مشخص شده انجام میشود، اگر بیت 13 دستور صفر باشد، قسمت 2S (5 بیت کوچکتر) ثبات منبه دیگری را مشخص میکند.
در صورتیکه بیت 13 دستور، برابر یک باشد، در اینصورت 2S یک عدد ثبات 13 بیتی است، که در حالت بلافصل استفاده میشود.
به این ترتیب در فرمت دستور سه آدرس است، که ثبات دوم منبع، میتواند یک ثبات، یا یک عملوند بلافصل باشد.
در دستورات مراجعه به حافظه، RS یک ثبات 32بیتی، آدرس را مشخص میکند و 2S نیز افست آنرا تعیین میکند.
ثبات 0Rدارای مقدار صفر است که در موقع نیاز، میتواند توسط هر قسمتی برای مقدار صفر انتخاب شود.
سومین فرمت دستور که برای دستورات پرش و فراخوانی سابروتین بکار میرود، دارای یک ناحیه آدرس 19 بیتی است، و فیلد CONDپنج بیتی است که یکی از 16 شرط انشعاب را تعیین میکند.
دستورات عملیاتی روی دادهها ریاضی منطقی و شیفت را انجام میدهند.
سمبولهای زیر ستون کد اجرایی و عملوندها، سمبولهای زبان اسمبلی کامپیوتر مذکور را مشخص نمایند.
ستون زبان انتقال ثباتها، و توضیحات، توضیح نوع عملیات، بصورت، قواعد و کلمات است.
همانطوریکه ملاحظه میشود تمام دستورات سه عملوند دارند که عملوند دوم منبع 2S، میتواند یک ثبات و یا عملوند بافاصله باشد که با علامت # مشخص شده است.
به عنوان مثال حالات مختلفی که دستور ADD میتواند اجرا شود بصورت زیر میباشند.
ADD R22,R21,R23 R23R22+R21 ADD R22#150,R23 R23R22+150 ADD R0,R21,R22 R22R21(MOVE)انتقال ADD R0,#150,R22 R0150آدرس دهی بلافصل ADD R22#1,R22 R22R22+1افزایش همانطوریکه ملاحظه میشود با استفاده از ثبات R0 که محتوای آن همیشه صفر است، میتوان عمل انتقال یک ثبات به ثبات دیگر را، و یا انتقال یک عدد، به ثبات را، با دستور جمع انجام داد.
بهمین ترتیب برای افزایش یک، میتوان عدد ثابت 1 را، با ثبات مورد نظر جمع نمود، به این ترتیب فقط با دستور جمع میتوان دستورات جمع ثبات، جمع اعداد با ثبات، دستور MOVE و معادل دستور INCEREMENT و LOAD IMMEDIATE را انجام داد.
دستورات انتقال اطلاعات شامل شش دستور بار کردن، سه دستور ذخیره نمودن، و دو دستور انتقال کلمه وضعیت برنامه PSW میباشد.
ثباتی که PSW را نگهمیدارد، شامل بیتهای وضعیت CPU، بیتهای وضعیت ALU، اشاره کننده به پنجره ثباتها، و دیگر اطلاعاتی است که وضعیت CPU را مشخص میکند.
دستورات بار کردن و ذخیره نمودن، اطلاعات را بین یک ثبات و حافظه انتقال میدهد.
دستورات بارکردن، اعداد علامتدار، یا بدون علامت، 8بیتی (بایت)یا 16 بیتی(کلمه کوتاه)و یا 32 بیتی(کلمه بلند) را از حافظه، به ثباتها بار میکنند.
گرچه بنظر میرسد که نحوه آدرس دهی، آدرس مستقیم ثبات بعلاوه افست است، اما حالت آدرس غیر مستقیم و مستقیم را نیز میتوان بکار برد.
مثالهای زیر دستورات(با کلمه بلند) با حالتهای آدرسدهی مختلف را نشان میدهد: LDL (R22) , #150, R5 R5M[R22]+150 LDL (R22) , # 0,R5 R5M[R22] LDL (R0) , # 500, R5 R5M[500] آدرس مؤثر در دستور اول برابر محتوای ثبات بعلاوه افست 150 است.
افست دستور دوم صفر است که تبدیل به آدرسدهی مستقیم ثبات میشود.
و دستور سوم با استفاده از مقدار ثابت برابر صفر است، در حقیقت حالت آدرسدهی مستقیم میباشد.
دستورات کنترل برنامه با کنترل برنامه PC عمل میکنند در حقیقت دو دستور پرش و دو دستور فراخوانی سابروتن وجود دارند.
اولی آدرسدهی شاخص بعلاوه افست است، و دومی آدرسدهی نسبی با کنترل برنامه PC ، و مقدار نسبی Y (19 بیتی ) است.
دستورات فراخوانی و برگشت از سابروتن، اشارهگر پنجره جاری CWP 1 سه بیتی را بکار میبرد که اشاره به پنجره ثبات فعال میکند.
هر باری که برنامه یک سابروتن جدید را فراخوانی میکند، مقدار CWP یکی کم میشود که پنجره ثبات بعدی پایینی را نشان بدهد، و بعد از دستور برگشت از سابروتن مقدار CWP یکی اضافه میشود، که برگشت به پنجره قبلی بشود.
خط لوله کامپیوترهای RISC یکی از قابلیتهای کامپیوترهای RISC داشتن خط لوله دستور با بهره بالا است.
ساده بودن دستورات این نوع کامپیوتر، میتواند برای پیادهسازی خط لوله دستور با بهره بالا بکار رود.
اصولاَ در این کامپیوترها خط لوله دستور به تعداد کمی از عملیات جزئی که هر یک در یک پالس ساعت اجرا میشود تقسیم میگردد.
در این کامپیوترها به علت فرمت طول دستور ثابت عملیات رمزگشایی، همزمان با انتخاب ثباتها انجام میشود.
تمام دستورات عملیاتی روی دادهها در ثباتها انجا میشود.
چون تمام عملوندها در اثبات هستند.
بنابراین نیازی به محاسبه آدرس مؤثر یا واکنشی عملوند از حافظه نیست.
بنابراین خط لوله دستور میتواند با دو یا سه قسمت پیاده سازی شود.
به این ترتیب یک قسمت دستور را از حافظه برنامه واکنشی میکند، و قسمت دیگر دستور را در ALU اجرا مینماید، و بالاخره قسمت سوم ممکن است برای ضبط نتیجه عملیات ALU ، در ثبات مقصد بکار برده شود.
دستورات انتقال اطلاعات در کامپیوترهای RISC محدود به دستورات بارکردن LOAD ، و ذخیره نمودن STORE میشود، که البته این دستورات دارای آدرس غیر مستقیم ثبات میباشند، که معمولاَ نیاز به سه یا چهار طبقه خط لوله دارند.
برای جلوگیری از برخورد بین واکشی دستور از حافظه و بارکردن، یا ذخیره نمودن عملوند در حافظه، اکثر کامپیوترهای RISC دارای دوگذرگاه مجزا با دو حافظه میباشند، یعنی یک حافظه برای ذخیره دستور، و حافظه دیگر جهت ضبط دادهها میباشد.
این دو حافظه بعضی اوقات میتوانند با سرعت پالس ساعت CPUکار کنند، و به عنوان حافظههای نهان معروفند.
یکی از محاسن کامپیوترهای RISC این است که قادر است دستورات را با سرعت یک پالس ساعت اجرا نماید.
برتری کامپیوتر RISC بر کامپیوتر CISC این است که، در کامپیوترهای RISC میتوان قسمتهای خط لوله را طوری تنظیم نمود که اجرای دستور فقط در یک پالس ساعت انجام شود، ولی در کامپیوترهای CISC قسمتهای طولانیتر و زیادتری در خط لوله وجود دارد، بطوری که اجرای دستور به پالس ساعت بیشتری نیاز دارد.
ویژگی دیگر کامپیوترهای RISC داشتن کامپایلری است که برنامه زبان سطح بالا را به زبان ماشین ترجمه مینماید.
در این کامپیوتر بجای طراحی سختافزار برای تشخیص و مینیمم کردن تأخیر، که در دستورات انشعاب پیش میآید، از کامپایلری که دارای بهره بالاتری است استفاده میشود.
در مثالهای زیر ملاحظه میشود که کامپایلر چطور میتواند برنامه به زبان ماشین را بهینه نماید، که برخورد در خط لوله حداقل گردد.
مثال- خط لوله دستور العمل سه قسمتی: از جدول مذکور ملاحظه میشود که سه نوع دستور وجود دارد.
دستورات عملیات روی دادهها، در ثباتهای پروسسور عمل مینمایند.
دستورات انتقال، شامل دستورات بارکردن LOAD، و ذخیره نمودن STORE است که آدرس مؤثر آنها، جمع محتوای دو ثبات، و یا یک ثبات و یک عدد فاصله مکانی1 میباشد(که در دستور قرار داده شده است).
دستورات کنترل برنامه از مقدار ثباتها و یک عدد ثابت، آدرس دستور انشعاب را محاسبه مینمایند، که این آدرس به یک ثبات یا کنتور برنامه pc منتقل میشود.
حال ما عملیات سختافزاری را برای چینن کامپیوتری بررسی میکنیم.
قسمت کنترل، دستور را از حافظه برنامه واکشی میکند، و آنرا وارد ثبات دستور مینماید.
در زمانی که دستوری رمزگشایی میشود، ثباتهائی که برای دستور در حال اجرا لازم است، انتخاب میگردند.
در واحد پروسسور شامل یک تعدادی ثبات و همچنین واحد ریاضی منطقی ALU است که عملیات ریاضی، منطقی و شیفت را انجام میدهد.
حافظه دادهها نیز برای بارکردن اطلاعات از آن، به ثباتها، و ذخیره نمودن محتوای ثباتها، در آن بکار میرود.
سیکل دستورالعمل را میتوان به سه ریز عملیات تقسیم نمود، که در سه قسمت خط لوله به طریق زیر: I- واکشی دستور عملیات ALU E- اجرای دستور پیاده سازی نمود.
قسمت واکنشی I دستور را از حافظه برنامه واکشی میکند.
دستور رمزگشایی میشود و یک عمل توسط ALU در قسمت A انجام میشود.
دستگاه ریاضی/ منطقی ALU بستگی به نوع دستور دیکد شده اعمال مختلف را انجام میدهد، که این عملیات شامل عملیات محاسباتی، منطقی و انتقال و همچنین تعیین مقدار آدرس مؤثر برای دستورات بارکردن LOAD و ذخیره نمودن STORE ، و بالاخره محاسبه آدرس دستور انشعاب برای کنترل برنامه میباشد.
بستگی به نوع دستور دیکد شده قسمت E خروجی واحد ALU را به یکی از ثباتهای مقصد منتقل میکند، و یا آدرس مؤثر را برای دستورات بار نمودن LOAD و ذخیره نمودن STEORE به حافظه منتقل مینماید و یا بالاخره آدرس انشعاب را به کنترل برنامه منتقل میکند.
بارگیری تأخیری برای روشن شدن این مطلب عملیات چهار دستور زیر را در نظر میگیریم: 1- LOAD R1M[آدرس 1] 2- LOADR2 R2M[آدرس 2] 3-ADD R1,R2, R3 R3R1+R2 4- STORE R3 M [آدرس 3]R3 اگر خط لوله سه قسمتی بطور مرتب و بدون وقفه عملیات انجام دهددر این صورت دستور سوم اطلاعات صحیح را برای اجرا نخواهد داشت.
به عبارت دیگر برخورد اطلاعات 1 بوجود آمده است.
(چون در این زمان هنوز محتوای جدید R2 به قسمت A خط لوله نرسیده است.
قسمت E خط لوله در سیکل چهارم پالس ساعت در حال اجرای عملیات برای قرار دادن محتوای حافظه به ثبات R2 است.
و قسمت A خط لوله نیز در همین زمان نیاز به این مقدار دارد که فعلاَ حاضر نیست چون مقدار جدید R2 هنوز از حافظه نیامده است و وارد R2 نشده است البته اینجا وظیفه کامپایلر است که مطمئن شود دستور بعد از دستور بارکردن LOAD ، اطلاعات صحیح از حافظه آمده را بکرا برد.
اگر کامپایلر نتواند دستور مناسبی بعد از دستور LOAD قرار دهد یک دستور (NO OPERATION ) NOP بعد از دستور LOAD قرار میدهد.
که البنه دستور NOP دستوری است که حافظه .واکشی میشود، ولی عملیاتی انجام نمیدهد بنابرای فقط سیکل پالس ساعت را تلف میکند این روش استفاده از بارکردن از حافظه و استفاده با تأخیر از آن به نام» بارکردن با تأخیر« نامیده میشود.
به این ترتیب دستور NOP برای جلوگیری از برخورد اطلاعات بکاربرده شده است (توجه داریم که دستور NOP در پالس چهارم در قسمت A خط لوله و در پالس پنجم در قسمت E خط لوله است.) بار کردن با تأخیر بدین معنی است که وابستگی به اطلاعات قبلی توسط کامپایلر در نظر گرفته میشود که چون قسمت سختافزار نمیبایستی بررسی نماید که آیا مقدار جدیدی به R2 وارد شده یا نه بالطبع سختافزار ساده خواهد بود.
انشعاب تأخیر یافته این تأخیر برابر زمانی است که دستوری که آدرس آن در دستور انشعاب قرار دارد از حافظه واکشی شود.
البته چندین رو.ش برای کم کردن این تأخیر در بخش قبلی بحث شد.
روشی که در اکثر پروسسورهای RISC اجرا میشود دستورات انشعاب را دوباره بطریقی تعریف کند که خط لوله بیشترین بازده را داشته باشد.
کامپایلری که برای پروسسورهای انشعاب با تأخیر استفاده میشود به این ترتیب طراحی شده است که کامپایلر دستورات قبل و بعد از دستور انشعاب را تجزیه و تحلیل میکند و ترتیب برنامه را طوری تغییر میدهد که بتواند در قسمتهایی که تأخیر لازم است دستوررات مفید دیگری قرار دهد.
برای مثال کامپایلر میتواند تعیین نماید که وابستگی برنامه، اجازه میدهد که یک یا چند دستور قبل از انشعاب، به داخل قسمت تأخیری بعد از دستور انشعاب قرار گیرد( که زمان تلف شده در خط لوله حذف گردد) یا نه.
در صورتیکه این دستورات بتوانندد بعد از انشعاب قرار گیرند این دستورات در زمانی که دستور انشعاب در قسمتهای دیگر در حال اجرا است میتوانند از حافظه واکشی شوند و در مسیر خط لوله اجرا گردند که تأخیری در خط لوله ایجاد نگردد.