بنيان الحواسيب 2 - المحاضرة الخامسة - PDF
Document Details
Uploaded by DynamicNash3049
الجامعة الوطنية الخاصة
د. رويدة مهباني
Tags
Summary
هذه المحاضرة الخامسة لمقرر بنيان الحواسيب 2، وتغطي تعليمات نقل البيانات، والعمليات الحسابية والمنطقية في معالجات البيانات، مع أمثلة توضيحية للهياكل والعمليات. The document includes diagrams and instructions on computer architecture and instructions. It focuses on computer architecture concepts.
Full Transcript
# المقرر: بنيان الحواسيب 2 ## المحاضرة الخامسة ## د. رويدة مهباني ## التعليمات البسيطة للعمليات الحسابية والمنطقية - تحتوي معالج البيانات على العديد من الخلايا تسمى خانات التسجيل *registers* وهي خلايا ذاكرة داخل المعالج نفسه. - كما يحتوي المعالج على وحدة تسمى بوحدة الحساب و المنطق وهي تقوم بالعملي...
# المقرر: بنيان الحواسيب 2 ## المحاضرة الخامسة ## د. رويدة مهباني ## التعليمات البسيطة للعمليات الحسابية والمنطقية - تحتوي معالج البيانات على العديد من الخلايا تسمى خانات التسجيل *registers* وهي خلايا ذاكرة داخل المعالج نفسه. - كما يحتوي المعالج على وحدة تسمى بوحدة الحساب و المنطق وهي تقوم بالعمليات الحسابية وطريقة عملها يمكن تلخيصها بهذا الشكل التالي: <br> | | | | :--------------- | :----------------------------------- | | **نافل معلومات** | | | | **المعلومة (1)** | | | **المعلومة (2)** | | | **مسجل مؤقت** | | | **مجمع** | | **تعليمات >** | **وحدة الحساب والمنطق** | | | **النتيجة** | <br> - بعد انتهاء العملية الحسابية تخزن النتيجة في المجمع وتحدد نوع النتيجة إذا كانت سالبة مثلا في المعلم *flag*. - يبين الشكل التالي هيكل لآلة افتراضية. <br> ## تصنيف التعليمات - يمكن تصنف التعليمات كما يلي: ### 1. تعليمات نقل البيانات *DATA TRANSFER INSTRUCTIONS* - ومن امثلتها: - التحميل *LOAD* - التخزين *STORE* ### 2. العمليات الحسابية و المنطقية *ARITHMETIC & LOGIC INSTRUCTIONS* - ومن امثلتها: - الجمع - الطرح - المقارنة - التحريك - النقل - ... - ADD, AND, OR, XOR, SHFT, ROTATAE ### 3. تعليمات التحكم *CONTROL INSTRUCTIONS* - ومن امثلتها: - القفز او التشعب *JUMP (OR BRANCH)* - الايقاف أو الانهاء *HALT (OR STOP)* <br> ## بنية التعليمات - تتكون التعليمات من ثلاث مجموعات *مثال من المعالج 8085 INTEL*: - مجموعة تعليمات تحتل موقع واحد في الذاكرة *Byte (1)* - مجموعة تعليمات تحتل موقعين في الذاكرة - مجموعة تعليمات تحتل ثلاثة مواقع في الذاكرة <br> | | | | :- | :-------------------------- | | | **التعليمة** | | | --- | | | **عناوين المعاملات** | | | ***Operands Adress*** | | | --- | | | **شيفرة العملية** | | | ***Operation Code*** | <br> - الموقع الأول دائما يحتوى على رمز العملية *Opcode (The Operation code)* - الثاني يحتوى عناوين المعاملات *The operand* <br> ### امثلة #### 1. التخزين *STORE* - *STORE RO, 6E* - هذا يعنى خزن محتويات المسجل (0) في الذاكرة بالعنوان (6E) - *STORE R5, F5* - هذا يعنى خزن محتويات المسجل (5) في الذاكرة بالعنوان (F5) <br> #### 2. التحميل *LOAD* - *LOAD RO, AB* - هذا يعنى ضع محتويات AB في السجل (0) <br> ## شرح خطوات برنامج مع كتابة البرنامج مستعين بالترميز - **مثال (1)** | | | | :----------- | :------------------ | | **الخطوة الأولى** | 156C | | **الخطوة الثانية** | 166D | | **الخطوة الثالثة** | 5056 | | **الخطوة الرابعة** | 306E | | **الخطوة الخامسة** | C000 | <br> - **الحل** - 1. الخطوة الأولى : حمل المحتويات الموجودة فى عنوان الذاكرة 6C في المسجل رقم (5) - 2. الخطوة الثانية : حمل المحتويات الموجودة في عنوان الذاكرة 6D في المسجل رقم (6) - 3. الخطوة الثالثة : اجمع محتويات المسجل رقم (5) و محتويات المسجل رقم (6) و وضع النتيجة في المسجل (0) - 4. الخطوة الرابعة : خزن محتويات المسجل (0) فى عنوان الذاكرة (6E) - 5. الخطوة الخامسة : توقف <br> - **السؤال الان كيف عرفت الخطوات من الارقام والحروف؟** - **هل نقوم بحفظ كل حرف وما يعنيه لا طبعا لانها بالغة الصعوبة . ولذا هناك جدول يقوم بالترجمة وما عليك الا ان تفهم كيفية الترجمة و سنأخذ مثال يوضح ذلك بعد التعرف والاطلاع على جدول الترميز** <br> ## جدول الترميز | المعامل | كود | وصف العملية | | :------- | :-- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | RXY | 1 | حمل المسجل R بالقيمة الموجودة فى خلية الذاكرة التي عنوانها XY. مثال :يحمل محتويات خلية الذاكرة الموجودة في العنوان A3 لكي تكون في مسجل 4 | | RXY | 2 | حمل المسجل R بالقيمة XY. مثال : لتحميل القيمة A3 في المسجل (0) | | RXY | 3 | تخزين محتويات المسجل R في خلايا الذاكرة التي تكون في العنوان XY. مثال : لتخزين محتويات المسجل 5 توضع في خلايا الذاكرة التي عنوانها B1 | | ORS | 4 | نقل القيمة الموجود بالمسجل R إلى المسجل S. مثال : لجعل محتويات المسجل A تنقل للمسجل ؟ | | RST | 5 | اجمع القيم الموجوده في المسجل S T معا وتوضع النتيجة في المسجل R على هيئة المكمل الثنائي. مثال : لجعل القيمة الثنائية الموجودة في المسجل 2 تضاف علي القيمة الموجودة داخل المسجل 6 ووضع ناتج الجمع في المسجل 7 على صورة المكمل الثاني | | RST | 6 | تضاف لقيمة . اجمع القيمة الموجودة في المسجل T.S معا وضع الناتج في المسجل R ويضاف لقيمة النقطة العائمة. مثال: 634 اجمع القيمة الموجوده في المسجل 4 E النقطة العائمة ويوضع الناتج في المسجل 3 | | RST | 7 | تنفيذ دالة OR على القيمة الموجودة في المسجل S.T ثم ضع الناتج بالمسجل R. مثال : 7CB4 ضع نتيجة الجمع المنطقى (OR) لمحتويات المسجلات 4.B توضع في المسجل C | | RST | 8 | تنفيذ دالة AND على القيمة الموجودة في المسجل S.T ثم ضع الناتج بالمسجل R. مثال : 8045 ضع نتيجة عملية الضرب المنطقى (AND) المحتويات المسجلات 4 و 5 لتوضع في سجل (0) | | RST | 9 | تنفيذ دالة XOR للقيم الموجودة في المسجل TS وتوضع النتيجة في المسجل R. مثال : 953 ضع نتيجة عملية XOR لمحتويات المسجل و 3 وضع الناتج في المسجل 5 | | ROX | A | دور القيمة الثنائية الموجودة في المسجل R خانة واحده عدد X مرة الي اليمين وضعها في R. مثال : A403 لجعل القيمة الموجودة بالمسجل 4 تدور 3 خانات من اليمين للايضاح : نفترض أن القيمة الموجودة بالمسجل 4 01011100 بعد عملية الدوران 3 خانات يكون الناتج النهائي للمسجل 1000101114 | | RXY | B | أقفز إلى الأمر الموجود في خلية الذاكرة الموجودة في العنوان XY إذا كانت القيمة الموجودة بالمسجل R مساوية للقيمة الموجودة بالمسجل (0) غير ذلك تتابع التنفيذ يستمر بطريقة طبيعية. القفزة مطبقة بواسطة نسخ XY في عداد البرنامج لتنفيذ الأمر الموجود | | 000 | C | التوقف. مثال : C000 توقف عن تنفيذ البرنامج | <br> ## مثال ### 0100 0000 1111 0100 #### 4 0 F 4 - من الجدول يتم الترجمة حيث رقم (4) تعبر عن الكود و ( ORX ) تعبر عن المعامل. ### 0100 0000 1111 0100 #### 4 0 F 4 #### 4 0 R X - وعلي ذلك يكون الأمر: - **انقل محتوبات المسجل (F) الى المسجل رقم (4).** <br> ## تعليمات القفز <br> ## تعليمات القفز والتشعب - الغاية من تعليمة القفز هي تعديل طريق تنفيذ التعليمات في البرنامج. وهناك نوعان من تعليمات القفز هما: - **1. القفز غير المشروط**: - في القفز غير المشروط لا يوجد أي شروط لحدوث القفز. - **2. القفز المشروط**: - أما في القفز المشروط فإن الحالات الشرطية الموجودة في لحظة تنفيذ تعليمة القفز تتخذ القرار فيما إذا سيحدث القفز أم لا، ففي حال تحقق الحالات الشرطية فإنه يتم القفز، وإلا يتابع التنفيذ بالتعليمة التي تلي تعليمة القفز في البرنامج. ### (1) تعليمة القفز غير المشروط - و هي مشروحة في الجدول التالي: | | | | | | :----------- | :----------------- | :------------------- | :--------------------------- | | **العملية** | **الصيغة** | **المعنى** | **الكلمة المختزلة** | | | **القفز إلى العنوان المحدد بواسطة operand المتحول** | **قفز غير مشروط** | **JMP** | <br> - **هناك نوعان أساسيان من القفز غير المشروط**: - **الأول**: القفز ضمن المقطع الجزئي - **الثاني**: القفز بين المقاطع الجزئية <br> - **أي يُمكننا من القفز من أحد مقاطع الشفرة إلى مقطع آخر و إن تحقيق هذا النوع من القفز يتطلب منا تعديل محتويات كل من مقطع ال CS و مسجل مؤشر التعليمة IP ، أما القفز ضمن المقطع الجزئي فإنه يتطلب منا تعديل قيمة ال IP فقط.** <br> - إن المتحولات المسموحة لتعليمة القفز غير المشروط هي: | | | | :---------------------------------------- | :-------------------------- | | **للقفز ضمن المقطع الجزئي** | **للقفز بين المقاطع الجزئية** | | **Operand** | | | --- | --- | | Short_Label | Near Label | | Near_Label | Memptr16 | | Memptr16 | Regptr16 | | Regptr16 | Far_Labrl | | Far_Labrl | Memptr32 | | ***متحول اللافتة القصيرة*** | ***متحول اللافتة الغربية*** | | ***متحول اللافتة الغربية*** | ***مؤشر ذاكري 16 بت*** | | ***مؤشر ذاكري 16 بت*** | ***مؤشر مسجلي 16 بت*** | | ***مؤشر مسجلي 16 بت*** | ***اللافتة البعيدة*** | | ***اللافتة البعيدة*** | ***مؤشر ذاكري 32 بت*** | <br> - **القفز ضمن المقطع الجزئي** - **أ)** **إن متحولات اللافتة القصيرة واللافتة القريبة تحدد القفز النسبي لعنوان تعليمة القفز نفسها فمثلاً في تعليمة القفز باللافتة القصيرة يتم تشفير العدد ذي 8 بت كمتحول فوري لتحديد الإزاحة (Disp) ذات الإشارة التي تشير إلى التعليمة التالية التي سيتم تنفيذها من حجرة تعليمة القفز، و عندما تنفذ تعليمة القفز يعاد شحن ال IP بقيمة جديدة موضحة كما يلي:** - قيمة IP الجديدة = [ قيمة IP + طول شفرة تعليمة القفز ) + مقدار الإزاحة ذات الإشارة بعد تمديدها بجعل متحول 8 بتات بالشكل 16 بت ] - **إن القيمة الجديدة لـ IP مع قيمة CS الحالية تعطي العنوان الفيزيائي للتعليمة التالية التي ستجلب و تنفذ.** <br> ## امثلة ### ليكن لدينا - **IP=0112h** - **JMP disp: disp = 0F2h** - **إن عنوان تعليمة القفز ) موجود تحت العنوان المخزن في (IP) ، إذن سيتم القفز إلى التعليمة ذات العنوان التالي:** - address العنوان المنطقي = I +2 + disp ( 2 + 0112 = ( بعد تمديد إشارتها + FFF2 = **أهملنا خانة الحمل** 0106 - بما أن العنوان الناتج أصغر من عنوان تعليمة القفز فهذا يعني أننا قفز إلى تعليمة تسبق تعليمة القفز أي **القفز إلى الوراء** 0112 - 0106 <br> ### مثال (2) - **IP = 0112h** - **JMP 04** - **Address = 0112+2+0004 = 0118h** - **نلاحظ أن 0112 - 0118 فهذا يعني أن القفز نحو الأمام.** - **و للحصول على العنوان الفيزيائي يجب إضافة مقدار ال CS لقيمة address** - **ملاحظة**: بما أن متحول اللافتة القصيرة ذا 8 بت فهو يسمح بالقفز في المجال من 126 إلى 129 و سبب ذلك أنه إذا أضفنا طول شفرة تعليمة القفز و هو 2 بايت إلى المجال التالي من 128 إلى 127 سنحصل على المجال السابق. أما متحول اللافتة القريبة فهو متحول فوري ذو 16 بت ولذلك يسمح بالقفز ضمن مجال يساوي 32KB نحو الخلف أو نحو الأمام من عنوان تعليمة القفز. <br> ### مثال (3) - **JMP label** - **هذا يعني القفز إلى نقطة في البرنامج مقابلة للمتحول label حيث تتم إضافة هذا المتحول ( الإزاحة 16 بت ) إلى قيمة ال IP و القيمة الجديدة لـ IP و القيمة الحالية في CS تعطي العنوان الفيزيائي للتعليمة التي ستنفذ** - **ب يمكن تحديد القفز إلى عنوان بشكل غير مباشر بواسطة محتويات حجرة ذاكرة أو محتويات مسجل أي باستخدام متحول مؤشر ذاكري 16 بت أو متحول مؤشر مسجلي 16 بت و هنا أيضاً يتم القفز ضمن مجال 32KB** <br> ### مثال (4) - **JMP BX** - **في هذه التعليمة يُستعمل مضمون المسجل BX من أجل الإزاحة و هذا يعني أن قيمة BX يتم تحميلها في IP ثم يحسب العنوان الفيزيائي للتعليمة التي سيتم القفز إليها باستعمال المحتويات الحالية لـ CS و القيمة الجديدة لـ IP** - **بفرض أن**: - **BX0200h** - **CS-0100h** - **}** - **العنوان الفيزيائي للتعليمة التي سيتم القفز إليها** - **rA=(CS10h) + BX = 01000 +0200 -01200h** - **ملاحظة**: يمكن استخدام مختلف أنواع أنظمة العنونة لتحديد المتحول المستعمل كمؤشر ذاكري فمثلا IMP [SI ففي هذه التعليمة تستعمل محتويات SI كعنوان حجرة الذاكرة التي تحتوي على العنوان الفعال، هذا العنوان يتم تحميله في IP و الذي يُستعمل مع محتويات CS الحالية لحساب العنوان الفيزيائي للتعليمة التي سيتم القفز إليها و عادة في هذه الحالة تستخدم المسجلات التالية : DI SI BX . - **القفز بين المقاطع الجزئية أو القفز خارج المقطع الجزئية** - **(أ)** **تستعمل اللافتة البعيدة متحولاً فوريا ذا 32 بت لتحديد القفز إلى عنوان ما. حيث يتم تحميل الـ 16 بت الأولى من هذا المتحول في IP و تكون هي العنوان الفعال نسبة لمحتويات المسجل CS أما الـ 16 بت الثانية فيتم تحميلها في المسجل CS و التي تحدد مقطع الشفرة الجديد.** <br> ### مثال (5) - **JMP farlabel** - **حيث farlabel هو متحول بـ 32 بت الكلمة الأول تشحن في IP و الكلمة الثانية تشحن في الـ CS )** - **ب إن الطريقة غير المباشرة لتحديد العنوان الفعال و عنوان مقطع الشفرة من أجل القفز بين المقاطع الجزئية هي باستعمال متحول مؤشر ذاكري بـ 32 بت و في هذه الحالة فإن أربع بايتات من الذاكرة متتابعة اعتبارا من العنوان المحدد تحتوي على العنوان الفعال و عنوان مقطع الشفرة الجديد على الترتيب. وهنا أيضاً يمكن استخدام أي نوع من أنواع أنظمة العنونة** <br> ### مثال (6) - **JMP farseg [DI]** - **ففي هذه التعليمة تستعمل محتويات DS DI لحساب عنوان حجرة الذاكرة التي تتضمن الكلمة الأولى للمؤشر الذي يُعرف الحجرة التي سيتم القفز إليها، فإذا كان**: - **DI = 0200h** - **DS = 0100h** - **}** - **العنوان الفيزيائي للمؤشر هو** - **PADS x 10h + DI-01000 +0200-01200h** <br> - **و لتكن محتويات هذه الحجرة والحجرات التي تليها كما هو واضح في الشكل التالي:** | | | | | :----------- | :- | :----------------- | | **Address (h)** | | **Content** | | 01200 | | 10 | | 01201 | | 30 | | 01202 | | 00 | | 01203 | | 04 | <br> - **قيمة IP الجديدة هي 3010 = IP** - **قيمة CS الجديدة هي 0400 = CS** - **إذن العنوان الفيزيائي للتعليمة التي سيتم القفز إليها هو:** - **PACS x 10h+IP=07010h** <br> ### (2) تعليمة القفز المشروط - و هي مشروحة في الجدول التالي; | | | | | | :----------- | :- | :---------------- | :------------------ | | **العملية** | | **الصيغة** | **المعنى** | | | | **Jcc متحول** | **قفز مشروط** | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | <br> - **إذا تحقق الشرط cc فإنه يتم القفز إلى العنوان المحدد بواسطة المتحول و إلا فيتم تنفيذ التعليمة التالية لتعليمة القفز** <br> - **اك 18 من تعليمات القفز المشروط و هي مشروحة في الجدول التالي:** | الكلمة المختزلة | المعنى | | :--------------- | :---------------------------------------------------------------------- | | JC | القفز إذا كان 1 = CF | | JNC | القفز إذا كان 0 = CF | | JO | القفز إذا كان 1 = OF | | JNO | القفز إذا كان 0 = OF | | JS | القفز إذا كان 1 = SF | | JNS | القفز إذا كان 0 = SF | | JCXZ | القفز إذا كان 0000 = CX | | JE/JZ | القفز في حالة التساوي / أو إذا كان الناتج يساوي الصفر | | JGE/JNL | القفز إذا كان أكبر أو يساوي / القفز إذا لم يكن أصغر | | JA/JNBE | القفز إذا كان فوق / القفز إذا لم يكن تحت أو يساوي | | JAE/JNB | القفز إذا كان فوق أو يساوي القفز إذا لم يكن تحت | | JB/JNAE | القفز إذا كان تحت القفز إذا لم يكن فوق أو يساوي | | JBE/JNA | القفز إذا كان تحت أو يساوي / القفز إذا لم يكن فوق | | JG/JNLE | القفز إذا كان أكبر / القفز إذا لم يكن أصغر أو يساوي | | JLE/JNG | القفز إذا كان أصغر أو يساوي / القفز إذا لم يكن أكبر | | JNE/JNZ | القفز إذا لم يكن يساوي / القفز إذا كان الناتج يساوي قيمة غير صفرية | | JNB/JBO | القفز إذا كانت خانة Parity غير موجودة / القفز إذا كان 0 = PF | | JP/JPE | القفز في حالة وجود خانة Parity / القفز إذا كان 1 = PF | <br> ## ملاحظة - للتمييز بين الأعداد ذات الإشارة والأعداد بدون إشارة فإن هناك اسمين مختلفين يبدو أنهما نفس الشيء في تعليمات القفز و هما **فوق ( A ) و تحت ( B ) من أجل مقارنة الأعداد بدون إشارة، و أصغر (L) ) و أكبر ( G ) من أجل مقارنة الأعداد ذات الإشارة.** - فمثلا العدد ABCD هو فوق العدد 1234 إذا اعتبرناهما عددين بدون إشارة. - أما إذا اعتبرناهما بإشارة فإن ABCDh هو عدد سالب و 1234h هو عدد موجب و لذلك ABCDh هو أصغر من 1234