اصولاَ ساختار و مشخصات داخلي CPU و همچنين ثباتها، قابليتهاي هر كامپيوتري، در كاتالوگ سيستم كامپيوتري مربوطه وجود دارد. در كاتلوگ مذكور ليست تمام دستورات، فرمتهاي مختلف دستورها، كد اجرايي و جزئيات هر دستور نوشته شده است بررسي و تجزيه و تحليل دستورات، و فراهم آوردن تابعهاي مورد لزوم براي اجراي هر دستور، توسط واحد كنترل انجام ميشود. فرمت هر دستور معمولاَ به چند قسمت1 تقسيم شده است كه معمولترين اين قسمتها شامل:
- قسمت كد اجرا، كه نوع عمليات دستور را مشخص ميكند.
- قسمت آدرس، كه آدرس يك خانه حافظه، يا ثبات پروسسور را مشخص ميكند.
- قسمت حالت آدرس دهي، كه معمولاَ روشي است كه عملوند يا آدرس مؤثر تعيين ميشود را، بيان ميكند.
البته در بعضي حاالات قسمتهاي ديگري نظير تعداد شيفت در يك دستور شيفت، و يا نظاير آن نيز وجود دارد.
اصولاَ عمليات دستورات كامپيوتر برروي اطلاعاتي است كه در حافظه، و يا ثباتهاي پروسسور قرار دارد. بديهي است هر خانه و يا ثبات پردازنده توسط آدرسدهي آنها تعيين ميشود. آدرس ثبات پردازنده با 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 را بكار ميبرد. البته براي محاسبات ضرب، و تقسيم نياز به ثبات د يگري ميباشد ولي ما در اينجا فرض ميكنيم كه ثبات اكوموليتور شامل نتيجه محاسبات است و نيازي به ثبات ديگر نميباشد به اين ترتيب برنامهاي كه مقدار را محاسبه نمايد مطابق زير است:
ACM
ACACM M
|
LOAD A
ADD B STORE T
LOAD C ADD D
MUL T STORE X |
در بنامه فوق عمليات بين ثابت اكوموليتور AC و خانه حافظه انجام ميشو و T آدرس يك خانه از حافظه ميباشد كه براي ذخيره اطلاعات موقتي مورد نياز است.
دستورات صفر آدرسي
كامپيوترهاي با تشكيلات حافظه پشته قسمت آدرس در دستورات جمع ADD و ضرب MUT ندارد( دستورات صفر آدرسي داراي قسمت آدرس نيستند). ولي دستورات PUSH و POP داراي يك قسمت آدرس هستند كه مشخص كننده عملوندي است كه با حافظه پشته در ارتباط ميباشد. برنامه زير محاسبه را در كامپيوتري با تشكيلات حافظه پشته نشان ميدهد( TOS نشان دهنده بالاي حافظه پشته است).
A | PUSH | |
B |
PUSH | |
ADD | ||
C |
PUSH | |
D |
PUSH |
|
ADD |
||
MUL |
||
X |
POP |
براي محاسبه عبارت رياضي در كامپيوترهاي با تشكيلات حافظه پشته لازم است كه ابتدا عبارت رياضي بفرم لهستاني معكوس تبديل شود. همانطوريكه ملاحظه ميشود، براي يك برنامه مورد نظر مثلاَ محاسبه X برنامه با كامپيوترهاي با دستورات سه آدرسي بسيار كوتاهتر از برنامه با دستورات يك آدرسي يا صفر آدرسي ميباشد.
دستورات كامپيوترهاي RISC
پردازندههاي RISC موقعيكه بخواهند با حافظه اربتاط برقرار كنند از دستورات STORE ( ذخيره كردن) و LOAD ( بار كردن) استفاده مينمايند، ولي بقيه دستورات بين ثباتهاي CPU دستورات LOAD و STORE داراي يك قسمت آدرس ثبات و يك قسمت آدرس حافظه هستند ولي دستورات محاسباتي سه قسمت آدرس، براي ثباتها دارند. به اين ترتيب برنامه محاسبه مطابق زير ميشود.
R1,A | LOAD | |
R2,B | LOAD | |
R3,C | LOAD | |
R4, D | LOAD | |
R1,R1,R2 | ADD | |
R3,R3,R4 | ADD | |
R1,R1,R3 | MUL | |
X,R1 | 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 اجرا ميشود دستورات انشعاب را دوباره بطريقي تعريف كند كه خط لوله بيشترين بازده را داشته باشد.
كامپايلري كه براي پروسسورهاي انشعاب با تأخير استفاده ميشود به اين ترتيب طراحي شده است كه كامپايلر دستورات قبل و بعد از دستور انشعاب را تجزيه و تحليل ميكند و ترتيب برنامه را طوري تغيير ميدهد كه بتواند در قسمتهايي كه تأخير لازم است دستوررات مفيد ديگري قرار دهد. براي مثال كامپايلر ميتواند تعيين نمايد كه وابستگي برنامه، اجازه ميدهد كه يك يا چند دستور قبل از انشعاب، به داخل قسمت تأخيري بعد از دستور انشعاب قرار گيرد( كه زمان تلف شده در خط لوله حذف گردد) يا نه. در صورتيكه اين دستورات بتوانندد بعد از انشعاب قرار گيرند اين دستورات در زماني كه دستور انشعاب در قسمتهاي ديگر در حال اجرا است ميتوانند از حافظه واكشي شوند و در مسير خط لوله اجرا گردند كه تأخيري در خط لوله ايجاد نگردد.
در حقيقت اين حالت مثل اين است كه دستورات بطور طبيعي بصورت ترتيب اصلي اجراء ميگردند فقط تأخير ناشي از انشعاب حذف ميشود. التبه اين وظيفة كامپايلر است كه دستورات مناسب را پيدا نمايد و بعد از دستور انشعاب قرار گيرد و اگر كامپايلر نتواند اين كار را انجام دهد دستور NOP ميتواند بعد از انشعاب قرار گيرد.
واكشي دستور از آدرس X با دو پالس ساعت توسط دو دستور NOP به تأخير افتاده است. در حقيقت دستور در آدرس X بعد از اينكه كنتور برنامه PC به روز درآمد در پالس ساعت هشتم واكشي ميشود.
اگر دستور LOAD در آدرس 101 و X برابر 350 باشد در اينصورت دستور انشعاب از آدرس 103 واكشي ميگردد و دستور جمع از آدرس 104 واكشي و در پالي ساعت ششم اجرا ميشود، و دستور تفريق نيز از آدرس 105 واكشي و در پالس ساعت 7 اجرا ميگردد. چون مقدار X در پالس ساعت پنجم در قسمت E به كنتور برنامه PC منتقل ميشود، بنا بر اين دستوري كه در پالس ششم از حافظه واكشي ميگردد، از آدرس 350 است كه در دستور انشعاب ميباشد.
با بررسي زمانبندي خط لوله، مشاهده ميشود كه كنتور برنامه در پالس ساعت پنجم به روز در ميآيد. و دستورات جمع و تفريق نيز بطريق مناسب از حافظه واكشي و اجرا ميگردند، به اين ترتيب ملاحظه ميشود كه اجراي اين برنامه در 8 پالس ساعت در خط لوله اجرا ميگردد، در حاليكه در حالت قبل ده پالس ساعت مورد نياز بود كه دو پالس ساعت آن بعلت تأخير دردستور انشعاب خواهد بود.
1 Filed
1 Reduced Interuction Set Computer (RISC)
2-Complex Instruction Set Computer (CISC)
1 Overlapped Register Window
1 – Current Window Pointer (CWP)
1 Displacement Constant
1 – Data Conflict