بنيان 34, LECTURES 3 & 4, COMPUTER ARCHITECTURE PDF
Document Details
Uploaded by DynamicNash3049
الجامعة الوطنية الخاصة
Dr. Rouida Mehbani
Tags
Summary
These lecture notes cover computer architecture, focusing on machine language, assembly language, and the assembler. The notes include explanations, examples, and exercises on assembly instructions. The document is part of a course on computer architecture.
Full Transcript
# المقرر: بنيان الحواسيب 2 ## المحاضرة الثالثة والربعة **د. رويدة مهباني** ## تعليمات الأسمبلي ### 1-2 لغة الآلة ولغة التجميع ماذا يحدث لو حاولت الاتصال بشخص لا تعرف لغته و لا يعرف لغتك. ### لغة الآلة هي اللغة التي يفهمها الحاسب ويستطيع تنفيذ البرامج بها دون الحاجة إلى مترجم. وتعتمد هذه الل...
# المقرر: بنيان الحواسيب 2 ## المحاضرة الثالثة والربعة **د. رويدة مهباني** ## تعليمات الأسمبلي ### 1-2 لغة الآلة ولغة التجميع ماذا يحدث لو حاولت الاتصال بشخص لا تعرف لغته و لا يعرف لغتك. ### لغة الآلة هي اللغة التي يفهمها الحاسب ويستطيع تنفيذ البرامج بها دون الحاجة إلى مترجم. وتعتمد هذه اللغة على النظام العددي الثنائي ( صفر ( 1 ). ### لغة التجميع ظهرت لغة التجميع بوصفها أو لغة ترميز، تستخدم الرموز SYMBOLIC CODE للتعبير عن تعليمات لغة الآلة، وذلك لمواجهة صعوبة الترميز بلغة الآلة، ولغة التجميع لغة قريبة من لغة الآلة التي يفهمها الحاسب الآلي، وتسمى هذه اللغات بلغات المستوى البسيط . ويمكن تمثيل الأوامر بكود أو شفرة مكتوبة من ثلاث أو أربع حروف من الحروف الابجدية ورموز يسهل حفظها وكتابتها و تدل على ما يقوم به المعالج عند تنفيذ هذا الأمر، ومن أمثلة الاختصارات: * **ADD:** Addition ( جمع ) * **SUB:** Subtraction ( طرح ) و نلاحظ أن كل نوعية من انواع المعالجات الدقيقة يتم تزويدها بقائمة تحتوى على هذه الاختصارات الحرفية وغالبا تختلف الاختصارات من شركة إلى أخري. واى برنامج مكتوب بهذه الاختصارات **يقال عنه (لغة الاسمبلي )**. #### مميزات لغة التجميع * أسهل من لغة الآلة من حيث قراءة البرنامج المكتوب بها بالنسبة للمستخدم. * تتمتع بقدرة أكبر على استغلال موارد الحاسب الآلي ووحدة المعالجة المركزية. #### عيوب لغة التجميع * محدودة بطراز معين * صعبة التعلم حيث لابد للمبرمج من المعرفة الكاملة بمكونات المعالج والمسجلات الموجودة بداخله ### 2-2 المجمع Assembler المجمع Assembler الذي يقوم بتحويل لغة التجميع إلى لغة الآلة، كي يفهمها الحاسب ويستطيع تنفيذها وذلك لان المعالج لا يتعامل إلا مع الشفرات الثنائية فلا بد من ترجمة الرموز الحرفية المختصرة الى شفرات ثنائية يفهمها المعالج * ويطلق على البرنامج المكتوب بلغة الاسمبلي ) الشفرات الحرفية ( اسم برنامج المصدر Source Program والبرنامج المكتوب بلغة الآلة ( الشفرات الثنائية ( اسم برنامج الهدف Object Program | نوع البرنامج | | | :--------------- | :---- | | برنامج المصدر | لغة الاسمبلي | | برنامج الهدف | لغة الآلة | #### مميزاتها : * تشغل حيز صغير من الذاكرة * سريعة في التشغيل * سهولة تعلمها بالنسبة للمتخصصين . * سهولة اكتشاف الأخطاء . ### INSTRUCTIONS الأوامر عادة ما يتم تكوين أى برنامج من عدد من الأوامر المتتالية و عن طريق هذه الأوامر يمكن تحقيق الهدف المطلوب ويمكن ان يتم عمل وتنفيذ البرنامج عن طريق استخدام Lغة الماكينة أو لغة التجميع. يعرف الأمر عادة بأنه الشفرة الثنائية او الكود الذى يعطى للميكروبرسيسور ثم يقوم المعالج الدقيق بتنفيذ عملية معينة مثل الجمع أو إحضار معلومة من الذاكرة أو وضع معلومة في الذاكرة . كل الأوامر في لغة التجميع تأخذ الصورة الآتية : حقول يفصل بينهم مسافة واحدة على الاقل | | | | :------------ | :--- | | NAME | حقل الاسم | | OPERATION | حفل OPERATION | | OPERAND | حقل OPERAND | | COMMENTS | حقل الملحوظات | #### حقل الاسم حقل اختياري يستخدم في حالة حدوث عملية تفريع لهذا الأمر. #### حفل OPERATION يحتوي على الأمر المراد تنفيذه. #### حقل OPERAND يحتوى على المعامل او المعاملات المطلوب تنفيذها بواسطة الأمر المحدد. #### حقل الملحوظات يستخدم عادة لتعليق على الأمر الحالي. ### 2- التعليمات الوهمية PSEDUO INSTRUCTIONS تحتوى التعليمات الوهمية على ملاحظات من المبرمج وتعليقات على الأمر الحالي و هو عادة يقوم بتوضيح وظيفة الأمر وأى معلومات قد تكون مفيدة لأى شخص قد يقرأ البرنامج وتساعده في فهمه . يتم بدء هذا الحقل بالفاصلة المنقوطة ) : ( واى عبارة تقع بعد هذه الفاصلة المنقوطة يتم تجاهلها على انها ملاحظات رغم أن هذا الحقل اختيارى ولكن لان لغة التجميع تحتاج التعليمات فيها لبعض الشرح فإنه من الافضل ان يتم وضع تعليقات على أمر غير واضح أو يحتاج لتفسير وعادة ما يتم تعليق على كل سطر من أسطر البرنامج ويتم اكتساب الخبرة بمرور الزمن عن كيفية وضع التعليق المناسب #### مثال للتعليمات **Start: MOV CX, 5; initialize counter** هذا الأمر ذو عنوان Start ( ابدأ ). والأمر المستخدم MOV ) اختصار لامر MOVE انقل أو حرك ). والمعاملات هي CX والرقم 5 المسجل CX ( العداد ( اسم هذا المسجل يدل على عمله ، أي أنه يستخدم كعداد ، وغالباً ما نستخدمه لحساب التكرارات في الحلقة أو لتحديد عدد الحروف في السلسلة. ومعني ذلك هو وضع الرقم 5 في المسجل CX وحقل الملاحظات يوضح أن 5 هي القيمة الابتدائية للعداد . ### 2- التعليمات الدقيقة MICRO INSTRUCTIONS يحتوى هذا الحقل على التعليمات الدقيقة المطلوب تنفيذها ويجب ان تكون إحدى التعليمات المعروفة للبرنامج الذى سيقوم بمعالجة البرنامج ASSEMBLER حيث يقوم بتحويلها الى لغة الآلة. * مثال التعليمات ( SUB & ADD & MOV ) أما إذا كانت PSEUDO-OP فلا يتم تحويلها للغة الآلة و لكنها لإخطار الأسمبلر ليقوم بشئ محدد مثلا ) PROC ) تستخدم لتعريف برنامج فرعی Procedure وتعنى إجراء . #### شرح بعض الأوامر الأساسية في هذا الجزء سنتعرف على بعض الأوامر الأساسية وكيفية استخدامها والقيود المختلفة علي استخدامها وسنفترض أن لدينا متغيرات حرفية باسم 1 Byte و 2 Byte ومتغيرات كلمات باسم Word1 و Word2 #### 1- الأمر- MOV يستخدم الأمر MOV في نقل البيانات من مكان لآخر وهذه الأماكن هي المسجلات العامة أو المسجلات الخاصة أو المتغيرات في الذاكرة أو حتى في نقل ) وضع ) قيمة ثابتة في مكان محدد من الذاكرة أو علي مسجل. والصورة العامة للأمر هي: MOV Destination. Source حيث يتم نقل محتويات المصدر Source إلى المستودع Destination ولا تتأثر قيمة المصدر بعد تنفيذ الأمر مثلا MOV AX, Word1 حيث يتم نسخ محتويات ) قيمة ( المتغير Word إلى المسجل AX ) المسجل AX المركم ( هذا المسجل يستخدم دائما أو على الأغلب في العمليات الحسابية أو المنطقية، وهذا لا يعني أن باقي المسجلات لا تصلح لمثل هذه الحالات ، وإنما القصد أن هذا المسجل هو الأکفأ لمثل هذه الحالات وبالطبع يتم فقد القيمة الأولية للمسجل AX بعد تنفيذ الأمر. #### 2- العمليات الحسابية: ADD, SUB, INC, DEC, NEG : يتم استخدام الأمرين ADD و SUB لجمع أو طرح محتويات مسجلين أو مسجل وموقع في الذاكرة أو موقع في الذاكرة مع مسجل أو مسجل مع موقع في الذاكرة والصيغة العامة للأمرين هي: * ADD Destination, Source * SUB Destination, Source #### مثلا الأمر يقوم بجمع محتويات المسجل AX إلى قيمة المتغير WORDI ويتم تخزين النتيجة في المتغير ) WORDI لا يتم تغيير قيمة محتويات المسجل AX بعد تنفيذ الأمر كذلك الأمر #### حيث يتم طرح محتويات المسجل DX من المسجل AX و يتم تخزين النتيجة في المسجل AX لاحظ ان محتويات المسجل DX لا تتغير بعد تنفيذ الأمر في أمر واحد ** لاحظ أنه غير مسموح بالجمع أو الطرح المباشر بين مواقع في الذاكرة وبالتالي فإن الأمر ADD BYTE BYTE2 غير مسموح به ولكن يمكن إعادة كتابته على الصورة :** * MOV AL, BYTE2 * ADD BYTE1, AL * ADD BL,5 **يقوم بجمع الرقم 5 إلى محتويات المسجل BL وتخزين النتيجة في المسجل BL** #### ملاحظة عامة. نجد أنه يجب أن يكون المتغيرين لهما نفس الطول بمعني أن الأمر التالي غير مقبول MOV AX,BYTE1 وذلك لأن طول المتغير BYTE هو خانه واحدة أما المسجل AX فان طوله هو خانتين BYTE **بينما نجد الـ ASEMBLER يستقبل الأمر ) MOV AH, A مادام AH بايت فإن المصدر يجب أن يكون كذلك بايت حيث يتم وضع الرقم 141 في المسجل AH ويقوم أيضا بتقبل الأمر ) 'MOV AX ,'A مادام AX كلمة فإن المصدر يجب أن يكون كذلك كلمة ) حيث سيتم وضع الرقم 10041 في المسجل . AX)** #### MOV * **تستخدم هذه التعليمة لنقل بايت أو كلمة معطيات من متحول المصدر إلى متحول الهدف و لها الشكل التالي:** | | | | :------- | :--- | | الأعلام المتأثرة | لا يوجد | | العملية | نقل | | الصيغة | MOV DS | | المعنى | الكلمة المحتركة | * **إن S,D لهذه التعليمة يمكن أن تكون مسجلات داخلية أو حجرات تخزين في الذاكرة و يبين الجدول التالي مختلف أنواع متحولات المصدر و الهدف مع مثال لكل منها:** | | | | | :---------- | :---------- | :-------------------------- | | Destination | Source | المعنى | | Mem | Acc | المراكم | | Acc | Mem | حجرة ذاكرة | | Reg | Reg | مسجل | | Mem | Reg | مسجل | | Reg | Mem | حجرة ذاكرة | | Reg | Imm | متحول فوري | | Mem | Imm | متحول فوري | | Seg-reg | Reg16 | متحول مقطع | | Reg16 | Seg-reg | مسجل ذو 16 بت | | Seg-reg | Mem 16 | حجرتي ذاكرة | | Mem 16 | Seg-reg | حجرتي ذاكرة | | | | | :---------- | :--- | | Acc | Acc | | Mem | Mem | | Reg | Reg | | Imm | Imm | | Seg-reg | Seg-reg | | Reg16 | Reg16 | | Mem 16 | Mem 16 | 1- **لا تستطيع تعليمة MOV أن تنقل المعطيات بشكل مباشر بين حجرتي ذاكرة لذلك لا نرى في الجدول المجاور الحالة التالية : Mem - Mem و لحل هذه المشكلة فإن المعطيات المرغوب بنقلها يجب نقلها أولا ولا في في مسجل داخلي بواسطة تعليمة MOV ، و من ثم تنقل محتويات هذا المسجل إلى حجرة جديدة في الذاكرة بواسطة تعليمة MOV أخرى.** 2- **لا يمكن وضع قيمة فورية في مسجل مقطع مباشرة. أي أن التعليمة التالية غير مسموح بها 1000,MOV DS و لحل هذا المشكلة نستخدم التعليمتين التاليتين :** * MOV AX, 1000 * MOV DS,AX 3- **لا يمكن نقل محتويات أحد مسجلات المقاطع إلى مسجل مقطع آخر مباشرة أي أن التعليمة التالية غير مسموح بها MOV DS,ES و لحل هذه المشكلة نقوم بـ** * MOV AX,ES * MOV DS,AX **مثال عام : MOVAL,SI هذه التعليمة تعني نقل محتويات حجرة الذاكرة المشار إليها بواسطة المسجل SI إلى المسجل و A إن نظام العنونة في هذه التعليمة هو عنونة غير مباشرة بالمسجل و متحول المصدر عنوانه الفيزيائي هو PA = 10h + Sl و أما متحول الهدف فهو AL.** ### تعليمة التبديل XCHG تستخدم هذه التعليمة لاستبدال متحول المصدر بمتحول الهدف والاستبدال متحول الهدف بمتحول المصدر. | | | | | :----------------- | :------------ | :--- | | الأعلام المتأثرة | لا يوجد | | | العملية | تبديل | | | الصيغة | S-D | | | | D-S | | | | XCHG DS | | | | | | | | | | | | | | * **و بين الجدول التالي مختلف أنواع متحولات المصدر و الهدف التعليمة** | الهدف D | المصدر S | | | :---------- | :---------- | :------- | | Acc | Reg16 | | | Mem | Reg | | | Reg | Reg | | **مثال:** * XCHG AX, BX في هذا المثال يتم التبديل بين محتويات AX و BX * XCHG [SUM] BX يتم التبديل بين محتوى الحجرة SUM في الذاكرة و بين المسجل BX ### XLAT | مnemonic | Meaning | Format | Operation | Flags | | :--------- | :-------- | :------ | :------------------------------- | :----- | | XLAT | Translate | XLAT | ((AL)+(BX)+(DS)0) →(ال) | None | **The XLAT instruction simplifies implementation of lookup table.** **Example: Assume (DS) = 0300H. (BX)-0100H, and (AL)=0DH. Here 0Dh represent the ASCII character CR.** **Execution of XLAT replaces the contents of Al by the contents of memory location with physical address** **PA=(DS)0+(BX) +(AL) =03000H+0100H+0DH-0310DH** **Thus (0310DH) → (AL)** **Assuming this memory locations contains 52H (EBCDIC code for CR) this value is placed in AL. That is (AL)-52h.** #### مثال عملي عن xlat بفرض أنه لدينا جدول في الذاكرة يحتوي على مربعات الأعداد من 1 إلى 9 أي أنه في أول حجرة من الجدول يوضع مربع العدد 1 و في الحجرة الثانية يوضع مربع العدد 2 (أي (4) ، و هكذا ... ومن هذا نرى أن الجدول طوله تسع بايتات إزاحة بدايته عن بداية مقطع الـ DS هي 100 DS عندما يطلب منا الحصول على مربع أحد هذه الأعداد و ليكن العدد ٤ أي أن المطلوب هو أن تصبح قيمة 16 = AL لذلك نقوم بما يلي: * BX = 100, AL = ٤ نضع * نعطي التعليمة XLAT و بعد تنفيذها يصبح 16 = AL و هو المطلوب. <br> ### تعليمات الجمع و الأعلام المتأثرة | | | | | | :---- | :---- | :----------------------------------------- | :-------------------- | | | | عبارة الجمع | الأعلام المتأثرة | | ADD | جمع | S+D→D | اعلام الحالة | | ADC | جمع | S+D+CFD | اعلام الحالة | | INC | | D+1→D | اعلام الحالة | | | | Carry→ CF | | | | | Carry→ CF | | | | | D-1→D | | ### تعليمتي inc و ADC و ADD - **الجدول الآتي يبين المتحولات المسموح بها** | الهدف | والمصدر | | | :------- | :------- | :-- | | Reg | Reg | | | Reg | Mem | | | Mem | Reg | | | Mem | Imm | | | Reg | Imm | | | Acc | Imm | | - **بالنسبة للتعليمة inc** : | الهدف | | | :------- | :------ | | Reg8 | | | Reg16 | | Mem | | #### مثال **مثال بفرض AX = 4F3D و BX = FD81 و 1 = CF فما هي نتيجة تنفيذ التعليمة ADC AX, BX ؟ مبيناً حالة أعلام الحالة بعد تنفيذ عملية الجمع هذه؟** 1111 111 1 **AX = 0100 1111 0011 1101 b BX = 1111 1101 1000 0001 b CF = 1 b + 0100 1100 1011 1111 b CF = 1** - **0 = PF لأن عدد الواحدات فردي في البايت الأول من ناتج الجمع متضمنا علم الحمل الزائد.** - **0 = AF لأنه لا يوجد انزياح من الخانة ٣ إلى الخانة ٤ في البايت الأول من ناتج الجمع ) حيث يتم ترقيم الخانات بدءاً من الصفر ) .** - **0 = SF و هي آخر خانة من نتيجة الجمع ( الناتج موجب ).** - **1 = CF بسبب وجود انزياح خارجي** - **0 = OF لأنه يوجد إنزياح داخلي و انزياح خارجي** **ملاحظة: الانزياح الداخلي هو الداخل إلى الخانة ذات الأهمية العظمى MSB** **ملاحظة : 1 = OF إذا وجد انزياح داخلي فقط أو وجد انزياح خارجي فقط.** <br> ### الطرح - **الطرح بنفس الطريقة طرح عادي SUB** - **و طرح مع حمل SBB** - **و إنقاص بمقدار واحد DEC** | | | | | | :---- | :---- | :----------------------------------- | :-- | | | | عبارة الطرح | | | SUB | طرح | D-SD | | | 58B | طرح | D-S-CFD | | | DEC | | D-1→D | | | | | burrow → CF | | | | | Carry → CF | | | | | D-1→D | | | | | الصلحية | | | | | الصيغة | | | | | المعنى | | | | | الكلمة المختزلة | | | | | الأعلام المتأثرة | | | | | | | - **إن المتحولات المستخدمة من أجل تعليمتي الطرح SUBSB هي نفسها المتحولات المسموحة من أجل تعليمتي الجمع ADD,ADC أما بالنسبة إلى المتحولات المستخدمة من أجل تعليمة DEC فهي نفسها المتحولات المسموحة من أجل تعليمة INC** - بفرض أن 0018 = SI و DS = 2F00 و العنوان الفيزيائي المتولد عنهما هو 2018 و بفرض كانت محتويات الحجرة التي يشير إليها العنوان الفيزيائي 0400 = [2018] ، ما هو ناتج تنفيذ التعليمة SUB [SI],03F8h **تقوم هذه التعليمة بطرح محتويات متحول المصدر ) متحول فوري هنا ( من محتويات متحول الهدف ( محتويات حجرة ذاكرة هنا ) حيث أن تعليمة الطرح تتم بإيجاد المتمم الثنائي لمتحول المصدر و من ثم جمعه مع متحول الهدف.** Destination = 0400h = 00000100 0000 0000 b Source = 03F8h = 1111 1100 0000 1000 b + 1 0000 0000 0000 1000 b **تذكرة بالمتمم الثنائي ) و الذي يشار إليه بوضع خطين فوق العدد الذي نريد إيجاد المتمم الثنائي له ) :** **إذا . أردت الحصول على المتمم الثنائي للعدد 038 فاعمل ما يلي:** **تحويل هذا العدد إلى النظام الثنائي فيصبح 1111 0011 0000 1000 أقلب الأصفار واحدات والواحدات أصفاراً فينتج 1100 1111 0000 0111 أضف واحد إلى الرقم الناتج فتحصل على المتمم التنائي - 03F8h = 1111 1100 0000 1000** - **لاحظ أن : 0 = PF لأن عدد الواحدات فردي في البايت الأول من الناتج** - **0 = AF لأنه لا يوجد معنا حمل ( انزياح ) عند الانتقال من الخانة الثالثة إلى الخانة الرابعة.** - **0 = F لأن النتيجة ليست صفرية.** - **SF = O و هي قيمة آخر خانة من الناتج MSB** - **1 = CF لأن هناك انزياح خارجي.** - **0 = OF لحصول انزياح داخلي و انزياح خارجي بآن واحد.** <br> ### الضرب والقسمة | | | | | | :----------------- | :-------------------- | :------------ | :--------- | | الأعلام المتأثرة | عبارة العملية | الصيغة | المعنى | | أعلام الحالة | AL.S8 → AX | MULS | ضرب بدن إشارة | | أعلام الحالة | AX.S16 → DX, AX | MUL | حالة بايت | | أعلام الحالة | Q[AX/S8] → AL | DIVS | تقسيم بدون إشارة | | | R[AX/S8] → AH | | حالة كلمة | | | Q[(DX,AX)/S16] → AX | DIV | | | | R[(DX,AX)/S16] → DX | | | ### التعليمات المنطقية | | | | | | :----------------- | :--------------- | :----------------------- | :--------- | | الأعلام المتأثرة | عبارة العملية | الصيغة | المعنى | | أعلام الحالة | S.DD | AND D,S | المنطقي AND | | أعلام الحالة | S-D-D | OR D,S | المنطقي OR | | أعلام الحالة | S-D-D | XOR D,S | المنطقي XOR | | لا يوجد | DD | NOT D | المنطقي NOT | | | | | | | | | | | | | | | | | | | | | * **المعاملات المسموح بها في التعليمات المنطقية هي الآتي :** | D | S | | :-- | :-- | | Reg | Reg | | Reg | Mem | | Mem | Reg | | Reg | Imm | | Mem | Imm | | AX | Imm | #### مثال - **لنفرض بأن المسجل BL يحتوي على 00111010 •** - **ونريد التعليمة الآتية: AND BL, OFH;** - **فما هي النتيجة ؟** - **BL to 0000 1010 •** #### OR - **مثال** * **AL register contains 0011 1010 •** * **OR BL, OFH;** * **الجواب: BL to 0011 1111 •**