Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

‫بنيان الحواسب‬

‫جلسة عملي‬

‫إعداد‪ :‬م‪.‬همام ياسين‬


‫إشراف‪ :‬د‪.‬فادي متوج‬

‫‪ .1‬الهدف من املحاضرة‪:‬‬
‫ً‬
‫في نهاية املحاضرة يجب أن تكون قادرا على‪:‬‬
‫استخدام املحاكي ‪ CPU Simulator‬إلنشاء التعليمات األساسية الخاصة باملعالج‪.‬‬ ‫‪-‬‬
‫استخدام املحاكي لتنفيذ تلك التعليمات‪.‬‬ ‫‪-‬‬
‫التعامل مع تعليمات نقل البيانات إلى املسجالت‪ ،‬ومقارنة القيم في املسجالت‪ ،‬واالنتقال إلى مواقع العناوين‬ ‫‪-‬‬
‫وإضافة قيم إلى القيم املوجودة في املسجالت‪.‬‬
‫شرح وظيفة املسجالت الخاصة لوحدة املعالجة املركزية‪ ،‬وهي ‪( PC‬عداد البرامج) و ‪( SR‬مسجل الحالة) وأعالم‬ ‫‪-‬‬
‫الحالة ‪ OV‬و ‪ N‬و ‪.Z‬‬
‫تنفيذ برنامج يحوي عبارات شرطية بسيطة‪.‬‬ ‫‪-‬‬

‫‪https://manara.edu.sy/‬‬ ‫‪1‬‬
‫‪ .2‬تفاصيل املحاكي‬
‫تتكون النافذة الرئيسية من أقسام تمثل أجزاء وظيفية مختلفة لوحدة املعالجة املركزية التي تمت محاكاتها‪ .‬هذه‬
‫األجزاء موضحة في الشكل التالي‪.‬‬

‫‪https://manara.edu.sy/‬‬ ‫‪2‬‬
‫‪ .2.1‬قسم ذاكرة تعليمات وحدة املعالجة املركزية‪CPU ( :‬‬
‫‪)instruction memory view‬‬
‫يحتوي هذا القسم على تعليمات البرنامج‪ .‬يتم عرض التعليمات كسلسلة من‬
‫التعليمات منخفضة املستوى (بصيغة لغة التجميع ‪ )Assembly‬وليست‬
‫كرموز ثنائية‪ ،‬وذلك من أجل التوضيح وجعل الكود أكثر قابلية للقراءة من‬
‫قبل البشر‪.‬‬
‫ترتبط كل تعليمات بعنوانين‪ :‬العنوان الفعلي (‪ )PAdd‬والعنوان املنطقي‬
‫(‪.)LAdd‬‬
‫كما يعرض هذا القسم العنوان األساس ي (‪ )Base‬مقابل كل تعليمة‪،‬‬
‫مالحظة‪ :‬سيكون لسلسلة التعليمات التي تنتمي إلى نفس البرنامج نفس‬
‫العنوان األساس ي‪.‬‬

‫‪ .2.2‬قسم مسجالت وحدة املعالجة املركزية الخاصة‪Special CPU registers View :‬‬
‫ُيظهر هذا القسم مجموعة مسجالت وحدة املعالجة املركزية ذات الوظائف‬
‫ً‬
‫املخصصة واملحددة مسبقا‪:‬‬
‫‪ PC‬عداد البرنامج‪ :‬يحتوي على عنوان التعليمة التالية التي سيتم تنفيذها‪.‬‬
‫‪ IR‬مسجل التعليمات‪ :‬يحتوي على التعليمات التي يتم تنفيذها ً‬
‫حاليا‪.‬‬
‫‪ SR‬مسجل الحالة‪ :‬يحتوي على معلومات تتعلق بنتيجة آخر تعليمة تم تنفيذها‪.‬‬
‫املكدس‪ :‬مسجل يشير إلى القيمة املحفوظة في أعلى ّ‬
‫مكدس البرنامج‪.‬‬ ‫‪ SP‬مؤشر ّ‬

‫‪ BR‬املسجل األساس ي‪ :‬يحتوي على العنوان األساس ي الحالي‪.‬‬


‫‪ MAR‬مسجل عنوان الذاكرة‪ :‬يحتوي على عنوان الذاكرة الذي يتم الوصول إليه ً‬
‫حاليا‪.‬‬
‫‪ :N‬سلبي‪.‬‬ ‫بتات الحالة‪ :OV :‬تجاوز (طفحان) ؛ ‪ :Z‬صفر ؛‬

‫‪https://manara.edu.sy/‬‬ ‫‪3‬‬
‫‪ .2.3‬قسم مسجالت وحدة املعالجة املركزية‪CPU registers View :‬‬
‫ُ‬
‫ُيظهر هذا القسم محتويات مسجالت األغراض العامة‪ ،‬والتي تستخدم‬
‫لتخزين القيم املؤقتة عند تنفيذ تعليمات البرنامج‪.‬‬

‫املسجالت هي ذواكر سريعة ً‬


‫جدا تحمل ً‬
‫قيما مؤقتة أثناء تنفيذ وحدة‬
‫املعالجة املركزية للتعليمات‪.‬‬

‫ً‬
‫سجال‪ً .‬‬
‫غالبا ما تستخدم هذه املسجالت‬ ‫تدعم هذه البنية من ‪ 8‬إلى ‪ 64‬م‬
‫لالحتفاظ بقيم متغيرات البرنامج كما هو محدد في اللغات عالية املستوى‪.‬‬
‫يختلف عدد هذه املسجالت بحسب بنية املعالج املستخدم‪ ،‬فبعض‬
‫ً‬
‫املعالجات قد يملك ‪ 8‬مسجالت فقط‪ ،‬وبعضها اآلخر قد يملك ‪ 128‬مسجال‬
‫لالغراض العامة‪ ،‬لكن في جميع الحاالت فإن هذه املسجالت لها نفس‬
‫الوظيفة‪.‬‬

‫يعرض في هذا القسم اسم كل سجل (‪ )Reg‬وقيمته الحالية (‪ )Val‬وبعض‬


‫القيم اإلضافية املحجوزة لتصحيح أخطاء البرنامج‪ .‬يمكن استخدامه ً‬
‫أيضا‬
‫إلعادة ضبط السجل الفردي ً‬
‫يدويا والتي ً‬
‫غالبا ما تكون مفيدة لتصحيح‬
‫األخطاء املتقدم‪.‬‬

‫‪ .2.4‬قسم ّ‬
‫مكدس البرنامج‪Program stack View :‬‬
‫مكدس البرنامج هو منطقة أخرى تحافظ على القيم املؤقتة أثناء تنفيذ‬
‫ً‬ ‫ً‬
‫التعليمات‪ .‬املكدس عبارة عن بنية بيانات ‪( LIFO‬الداخل أخيرا يخرج أوال)‪.‬‬
‫كما أنها تستخدم إلجراء املقاطعة واستدعاء التوابع الفرعية بكفاءة‪ .‬كل‬
‫برنامج له مكدس فردي خاص به‪.‬‬
‫ُ‬
‫تستخدم تعليمات وحدة املعالجة املركزية ‪( PSH‬الدفع) و ‪ POP‬لتخزين القيم‬
‫أعلى قيم املكدس وسحب القيم من أعلى املكدس على التوالي‪.‬‬

‫‪https://manara.edu.sy/‬‬ ‫‪4‬‬
‫‪ .2.5‬قسم قائمة البرنامج‪Program list View . :‬‬
‫يستخدم زر إزالة البرنامج إلزالة البرنامج املحدد من القائمة ؛ استخدم‬
‫الزر ‪ REMOVE ALL PROGRAMS‬إلزالة كافة البرامج من القائمة‪ .‬ويمكن‬
‫عرض ذاكرة معطيات برنامج محدد بواسطة الزر ‪SHOW PROGRAM‬‬
‫‪.DATA MEMORY‬‬

‫‪ .2.6‬إنشاء البرنامج‪Program creation :‬‬


‫إلنشاء برنامج جديد نكتب اسمه في مربع اسم البرنامج وعنوانه‬
‫األساس ي في مربع العنوان األساس ي ثم ننقر فوق الزر ‪ .ADD‬سيظهر‬
‫اسم البرنامج الجديد في قسم قائمة البرامج املذكور في الفقرة السابقة‪.‬‬

‫‪ .2.7‬التعامل مع التعليمات‪Instructions :‬‬


‫زر ‪ ADD NEW‬إلضافة تعليمة جديدة‪.‬‬
‫زر ‪ EDIT‬لتعديل التعليمة املختارة‪.‬‬
‫أزرار ‪ MOVE DOWN / MOVE UP‬لتحريك التعليمة املحددة ألسفل أو‬
‫ألعلى‪.‬‬
‫أزرار ‪ …INSERT ABOVE… / INSERT BELOW‬إلدخال تعليمة جديدة أعلى أو أسفل التعليمة املحددة على التوالي‪.‬‬

‫‪https://manara.edu.sy/‬‬ ‫‪5‬‬
‫‪ .3‬تمارين‬
‫ً‬
‫لكتابة أي برنامج نبدأ من قسم ‪ Program‬في الفقرة ‪ 6‬السابقة‪ ،‬نكتب اسما للبرنامج في ‪( Program Name‬وليكن االسم ‪،)First‬‬
‫ً‬ ‫ً‬
‫ثم نضيف عنوانا أساسيا ‪( Base Address‬يمكن أن نكتب أي رقم وليكن ‪ ،)100‬ثم نضغط على زر ‪ .ADD‬بهذا يضاف البرنامج‬
‫ً‬
‫‪ First‬في قائمة البرامج ‪( .Program List‬يمكن حفظ البرنامج في ملف ‪ ،Save‬أو تحميل برنامج محفوظ سابقا من ملف ‪.)Load‬‬
‫بعد إنشاء البرنامج أصبحنا جاهزين إلدخال التعليمات في القسم ‪ Instructions‬في الفقرة ‪ 7‬السابقة‪ ،‬وذلك بالضغط على‬
‫زر ‪ ADD NEW‬مما يفتح نافذة جديدة ‪( Instructions: CPU 0‬استخدم ملحق التعليمات ‪ 4‬في نهاية املحاضرة)‪.‬‬
‫تمرين ‪:1‬‬
‫أنش ئ تعليمة تنقل الرقم ‪ 5‬إلى املسجل ‪ ،R00‬ثم ّنفذها بالنقر عليها مرتين وراقب مسجالت األغراض العامة‪.‬‬ ‫‪.1‬‬
‫ً‬
‫أنش ئ تعليمة تنقل الرقم ‪ 7‬إلى املسجل ‪ ،R01‬ثم ّنفذ هذه التعليمة وراقب مسجالت األغراض العامة أيضا‪.‬‬ ‫‪.2‬‬
‫أنش ئ تعليمة تضيف محتوى املسجلين ‪ R00‬و ‪ ،R01‬ثم ّنفذها‪ ،‬وراقب في اي مسجل تم وضع النتيجة‪.‬‬ ‫‪.3‬‬
‫أنش ئ تعليمة تقفز إلى التعليمة األولى‪ ،‬ثم ّنفذها‪ ،‬وراقب القيمة في عداد البرنامج ‪( PC‬عنوان التعليمة التالية التي‬ ‫‪.4‬‬
‫ّ‬
‫ستنفذ)‪.‬‬
‫يدويا قيمتين متساويتين في كل من املسجلين ‪ R04‬و ‪ ،R05‬ثم أنش ئ تعليمة ملقارنة القيم في املسجلين ّ‬ ‫ً‬
‫ونفذها‪.‬‬ ‫أدخل‬ ‫‪.5‬‬
‫راقب قيم أعالم الحالة ‪ ،OV,Z,N‬ماذا تغير فيها؟‬ ‫‪.6‬‬
‫ً‬
‫أدخل يدويا قيمة في املسجل ‪ R04‬أكبر من القيمة في املسجل ‪ ،R05‬ثم أعد تنفيذ التعليمة السابقة‪.‬‬ ‫‪.7‬‬
‫راقب قيم أعالم الحالة ‪ ،OV,Z,N‬ماذا تغير فيها؟‬ ‫‪.8‬‬
‫ً‬
‫أدخل يدويا قيمة في املسجل ‪ R04‬أقل من القيمة في املسجل ‪ ،R05‬ثم أعد تنفيذ التعليمة السابقة‪.‬‬ ‫‪.9‬‬
‫راقب قيم أعالم الحالة ‪ ،OV,Z,N‬ماذا تغير فيها؟‬ ‫‪.10‬‬
‫أنش ئ تعليمة تقفز إلى التعليمة األولى إذا تساوت القيم في كل من املسجلين ‪ R04‬و ‪.R05‬‬ ‫‪.11‬‬
‫اختبر التعليمة السابقة بإدخال قيمتين متساويتين في كل من املسجلين‪ ،‬ثم إعادة تنفيذ تعليمة املقارنة‪ ،‬ثم‬ ‫‪.12‬‬
‫تنفيذ تعليمة القفز (إذا تمت عملية املقارنة بنجاح سيحدد البرنامج التعليمة األولى)‪.‬‬

‫‪https://manara.edu.sy/‬‬ ‫‪6‬‬
‫تمرين ‪ :2‬الحلقات‪:‬‬

‫أنش ئ تعليمة تنقل الرقم ‪ 0‬إلى املسجل ‪.R01‬‬ ‫‪.1‬‬


‫أنش ئ تعليمة تضيف الرقم ‪ 1‬إلى املسجل ‪.R01‬‬ ‫‪.2‬‬
‫أنش ئ تعليمة تقارن الرقم ‪ 10‬مع املسجل ‪.R01‬‬ ‫‪.3‬‬
‫أنش ئ تعليمة تقفز إلى التعليمة ‪ 2‬إذا لم تتساوى قيمة كل من ‪ R01‬و الرقم ‪.10‬‬ ‫‪.4‬‬
‫أنش ئ تعليمة ‪.HLT‬‬ ‫‪.5‬‬
‫ّنفذ التعليمات من ‪ 1‬حتى ‪ 4‬بالتتالي‪ .‬ماذا تالحظ؟‬ ‫‪.6‬‬
‫اضغط على ‪ ،RESET PROGRAM‬ستحدد التعليمة رقم ‪ ،1‬ثم اضغط ‪ .RUN‬الحظ سير الحلقة وما النتيجة؟‬ ‫‪.7‬‬

‫تمرين ‪:3‬‬
‫أنش ئ كود برمجي لعبارة شرطية‪ ،‬إذا كانت القيمة في املسجل ‪ R02‬أكبر من القيمة في املسجل ‪ ،R01‬عندها ضع‬
‫القيمة ‪ 8‬في املسجل ‪ .R03‬نفذ البرنامج‪.‬‬

‫تمرين ‪:4‬‬
‫أنش ئ كود برمجي لحلقة تتكرر ‪ 5‬مرات‪ ،‬بحيث تزداد القيمة في املسجل ‪ R02‬بمقدار ‪ 2‬في كل تكرار‪ .‬نفذ البرنامج‪.‬‬

‫‪https://manara.edu.sy/‬‬ ‫‪7‬‬
:‫ ملحق التعليمات‬.4

Instruction Description
Data transfer instructions
MOV Move a number to register; move register to register
MOV #2, R01 moves number 2 into register R01
MOV R01, R03 moves contents of register R01 into register R03
LDB Load a byte from memory to register
LDW Load a word (2 bytes) from memory to register
STB Store a byte from register to memory
STW Store a word (2 bytes) from register to memory
PSH Push a number to top of program stack (TOS); push register to TOS
PSH #6 pushes number 6 on top of the stack
PSH R03 pushes the contents of register R03 on top of the stack
POP Pop data from top of program stack to register
POP R05 pops contents of top of stack into register R05
Note: If you try to POP from an empty stack you will get the error message “Stack underflow”
Arithmetic instructions
ADD Add a number to register; add register to register
ADD #3, R02 adds number 3 to contents of register R02 and stores the result in register R02.
ADD R00, R01 adds contents of register R00 to contents of register R01 and stores the result in
register R01.
SUB Subtract number from register; subtract register from register
MUL Multiply number with register; multiply register with register
DIV Divide number with register; divide register with register

https://manara.edu.sy/ 8
Control transfer instructions
JMP Jump to given instruction address unconditionally
JMP 100 unconditionally jumps to instruction address location 100
JLT Jump to instruction address if less than (after last comparison)
JGT Jump to instruction address if greater than (after last comparison)
JEQ Jump to instruction address if equal (after last comparison instruction)
JEQ 200 jumps to instruction address location 200 if the previous comparison instruction result
indicates that the two numbers are equal, i.e. the Z status flag is set (the Z box will be checked in this
case).
JNE Jump to instruction address if not equal (after last comparison)
CAL Jump to subroutine address
RET Return from subroutine
SWI Software interrupt (used to request OS help)
HLT Halt Simulation
Comparison instruction
CMP Compare a number with register; compare register with register
CMP #5, R02 compare number 5 with the contents of register R02
CMP R01, R03 compare the contents of registers R01 and R03
Note: If R01 = R03 then the status flag Z will be set, i.e. the Z box is checked.
If R01 < R03 then none of the status flags will be set, i.e. none of the status flag boxes are checked.
If R01 > R03 then the status flag N will be set, i.e. the N status box is checked.
Input, output instructions
IN Get input data (if available) from an external IO device
OUT Output data to an external IO device

‫انتهت املحاضرة‬

https://manara.edu.sy/ 9

You might also like