Practical-ComputerArchitecture1-Lec-4 أرشفة معدلة.pdf

Full Transcript

‫‪910‬‬ ‫عملي‬ ‫‪00‬‬ ‫تمارين عن ال ‪loop‬‬ ‫‪4‬‬ ‫و ‪System call‬‬ ‫‪17/05/2023‬‬ ‫‪13‬‬ ‫د‪.‬عبير ميّا‬ ‫الصفحا‬...

‫‪910‬‬ ‫عملي‬ ‫‪00‬‬ ‫تمارين عن ال ‪loop‬‬ ‫‪4‬‬ ‫و ‪System call‬‬ ‫‪17/05/2023‬‬ ‫‪13‬‬ ‫د‪.‬عبير ميّا‬ ‫الصفحا‬ ‫محتوى مجاني غير مخصص للبيع التجاري‬ ‫ت‬ ‫تحدثنا في المحاضرة السابقة عن تعليمات تحميل وتخزين ‪ ،) lw , sw ( word‬ولكن ماذا لو أردنا التعامل مع بايت‬ ‫واحد ( كما في المحارف مثالً؟ )‬ ‫تعليمات تحميل وتخزين بايت‪:‬‬ ‫‪ lb (load byte):‬‬ ‫تحمّل بايت واحد من الذاكرة إلى سجل معين‪.‬‬ ‫في هذه التعليمة يطرأ تعديالت على السجل وليس على الذاكرة ألننا فقط نقرأ من الذاكرة‪ ،‬وبما أن‬ ‫سجالت ال ‪ MIPS‬مكونة من ‪ 4‬بايت‪ ،‬فسوف نضع البايت الذي نريد تحميله في أول مكان في السجل‬ ‫(في أول بايت بالسجل أي من البت ‪ 0‬إلى البت ‪ )7‬ألننا نتعامل مع البايت األدنى‪.‬‬ ‫)‪lb $t0 , 0($a0‬‬ ‫]‪# $t0  Mem[0+a0‬‬ ‫مثال‪:‬‬ ‫هنا قمنا بجمع عنوان السجل القاعدي مع قيمة االنزياح العددي )‪ ،offset(0‬ثم وضعنا أول بايت من‬ ‫محتوى هذا العنوان في السجل ‪.$t0‬‬ ‫‪ sb (store byte):‬‬ ‫تخزّن بايت واحد من السجل إلى الذاكرة‬ ‫في هذه العملية يطرأ تعديالت على الذاكرة وليس على السجل‪ ،‬وكما في تعليمة ‪ lb‬فإن البايت يخزن‬ ‫في البايت األدنى في الذاكرة‪.‬‬ ‫)‪sb $t0 , 1($a1‬‬ ‫مثال‪# Mem[1+a1]  $t0 :‬‬ ‫هنا بعد أن نقوم بحساب عنوان الذاكرة ]‪( Mem [1+a1‬تماماً بنفس الطريقة التي تم حساب العنوان بها‬ ‫سابقاً في تعليمة ‪ )lb‬نقوم بتخزين بايت واحد من محتوى السجل ‪ $t0‬في هذا العنوان من الذاكرة‪.‬‬ ‫محتوى مجاني غير مخصص للبيع التجاري‬ ‫‪1‬‬ ‫بنيان حاسوب| د‪.‬عبير م ّيا‬ ‫‪ ‬مثال‪:‬‬ ‫𝑎𝑡𝑎𝑑 ‪.‬‬ ‫للتصريح عن معطيات ‪#‬‬ ‫’‪𝑏𝑡:. 𝒃𝒚𝒕𝒆 ‘𝑎’ , ‘2’ , ‘𝐵’ , ‘3‬‬ ‫قيم ابتدائية‬ ‫‪ :.byte #‬للتصريح عن محارف وكل‬ ‫محرف مكون من بايت واحد‬ ‫‪𝑠𝑝:. 𝑠𝑝𝑎𝑐𝑒 4‬‬ ‫أي بدءاً من العنوان ‪ 0x10010000‬سيتم حجز ‪ 4 bytes‬لل ‪ bt‬ثم سيحجز ‪ 4‬آخرين لل ‪.sp‬‬ ‫اسم اختياري‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0x10010000‬‬ ‫‪3‬‬ ‫‪B‬‬ ‫‪2‬‬ ‫‪a‬‬ ‫‪0‬‬ ‫‪4‬‬ ‫‪bt‬‬ ‫‪sp‬‬ ‫𝑡𝑥𝑒𝑡 ‪.‬‬ ‫‪#‬هنا يبدأ الكود(التعليمات)‬ ‫𝑡𝑏 ‪𝑙𝑎 $𝑠2 ,‬‬ ‫‪ #‬شحن السجل ‪ $s2‬بعنوان ال ‪bt‬‬ ‫𝑝𝑠 ‪𝑙𝑎 $𝑠1 ,‬‬ ‫‪ #‬شحن السجل ‪ $s1‬بعنوان ال ‪sp‬‬ ‫)‪𝑙𝑏 $𝑡0 , 3($𝑠2‬‬ ‫‪ #‬حمّل ‪ 1 byte‬من الذاكرة ]‪ Mem[3+$s2‬وضعها في البايت األدنى من السجل ‪$t0‬‬ ‫ماذا نقصد ب ‪ 3+$s2‬؟ أي نقصد البايت الذي يحمل القيمة ’‪‘3‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫من اليمين إلى اليسار‬ ‫‪3‬‬ ‫‪B‬‬ ‫‪2‬‬ ‫‪a‬‬ ‫)‪𝑠𝑏 $𝑡0 , 0($𝑠1‬‬ ‫‪bt‬‬ ‫‪ #‬خزّن ‪ 1 byte‬من السجل ‪ $t0‬وضعه في الذاكرة ]‪( Mem[0+$s1‬أي سنأخذ البايت ذو القيمة ’‪ ‘3‬وسنضعه‬ ‫في الذاكرة)‬ ‫)‪𝑙𝑏 $𝑡0 , 2($𝑠2‬‬ ‫‪ #‬حمًل بايت ذو القيمة ’‪‘B‬‬ ‫‪ #‬خزًن البايت ’‪ ‘B‬في ]‪Mem[3+$s1‬‬ ‫)‪𝑠𝑏 $𝑡0 , 3($𝑠1‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪B‬‬ ‫‪\0‬‬ ‫‪\0‬‬ ‫‪3‬‬ ‫‪sp‬‬ ‫محتوى مجاني غير مخصص للبيع التجاري‬ ‫‪2‬‬ ‫‪/ITE.RBCs‬‬ ‫بنيان حاسوب| د‪.‬عبير م ّيا‬ ‫الفرق بين ‪:lw , lb /sw , sb‬‬ ‫‪.1‬في ‪ lw‬و ‪ sw‬كان االنزياح من مضاعفات ال ‪ 4‬دائماً ‪ /‬أما في ‪ sb‬و ‪ lb‬هنا يتم التعامل مع بايت واحد‬ ‫("محرف") فيكون االنزياح (‪).....1 , 0‬‬ ‫‪.2‬في ‪ lw‬و ‪ sw‬كنا ننقل ‪ word‬كاملة ‪ /‬أما في ‪ lb‬و ‪ sb‬ننقل ‪1 byte‬‬ ‫الفرق بين ‪ lb‬و ‪:lbu‬‬ ‫)‪1. lb (sign_extended‬‬ ‫تحمّل من البت ‪ 0‬إلى البت ‪ 7‬من السجل‪ ,‬ثم تنسخ خانة اإلشارة )‪ (sign bit‬لملء باقي السجل من‬ ‫اليسار (من البت ‪ 8‬إلى البت ‪ )31‬ويستخدم للحفاظ على إشارة العدد المعطى(سالبة أو موجبة)‬ ‫‪2. lbu (zero_extended):‬‬ ‫تمأل باقي السجل (من البت ‪ 8‬إلى البت ‪ )31‬باألصفار مهما كان ال ‪sign bit‬‬ ‫يستخدم عندما ال تهمنا اإلشارة ‪ ,‬كما عندما نتعامل مع محارف‪.‬‬ ‫تمرين‪ :‬اكتب برنامجة بلغة التجميع ‪ MIPS‬يقوم بنسخ سلسلة المحارف المخزنة في الذاكرة بدءاً من العنوان القاعدي‬ ‫في السجل ‪ $s2‬إلى موقع الذاكرة ذي العنوان القاعدي في السجل ‪ $s1‬علماً أن سلسلة المحارف تنتهي ب ‪null‬‬ ‫( قيمته ‪ 0‬في ترميز ال ‪) ASCII‬‬ ‫‪1..data‬‬ ‫للتصريح عن ‪ string‬تنتهي ب ‪2. str:.asciiz “Best wishes“ # Null character‬‬ ‫‪3. sp:.space 10‬‬ ‫حجز مساحة للمصفوفة من ‪ 10 byte‬ونسميها ‪# sp‬‬ ‫‪4..text‬‬ ‫‪5. la $s2, str‬‬ ‫شحن السجل ‪ $s2‬بعنوان ال ‪ string‬الذي عرفناه ‪#‬‬ ‫‪6. la $s1, sp‬‬ ‫شحن السجل ‪ $s1‬بعنوان المصفوفة ‪ sp‬التي حجزناها ‪#‬‬ ‫‪7. Loop:‬‬ ‫)‪8. lb $t0,0($s2‬‬ ‫)‪9. sb $t0,0($s1‬‬ ‫‪10. addi $s2,$s2,1‬‬ ‫‪11. addi $s1,$s1,1‬‬ ‫‪12. bne $t0,$zero,Loop‬‬ ‫محتوى مجاني غير مخصص للبيع التجاري‬ ‫‪3‬‬ ‫‪/ITE.RBCs‬‬ ‫بنيان حاسوب| د‪.‬عبير م ّيا‬ ‫ شرح التمرين )‪:(loop‬‬ ‫من ‪ 7  1‬حلقة تقوم بتحميل محرف من سلسلة المحارف ”‪ “Best wishes‬المخزنة في السجل ‪$s2‬‬ ‫وتخزينه في المكان الموافق له من المصفوفة ‪ sp‬المخزنة في السجل ‪.$s1‬‬ ‫ومن ثم نضيف ‪ 1‬على محتوى السجلين ‪$s1 , $s2‬‬ ‫(أي أنه بهذه العملية ننتقل إلى المحرف التالي من سلسلة المحارف وكذلك ننتقل إلى الموقع التالي من‬ ‫المصفوفة الذي سيكون جاهزاً الستقبال هذا المحرف‪ ،‬يستمر البرنامج بالدخول إلى الحلقة طالما قيمة‬ ‫‪ $t0‬ال تساوي الصفر)‪.‬‬ ‫مالحظة‪:‬‬ ‫لو وضعنا )‪ (ascii‬بد ًال من )‪(asciiz‬‬ ‫سينتج لدينا حلقة ال نهائية ألنه سيعتبر أنه ال يوجد شرط لكسر الحلقة‪.‬‬ ‫شكل آخر للحلقة (من السطر ‪:)7‬‬ ‫‪Loop2:‬‬ ‫)‪lb $t0,0($s2‬‬ ‫‪beq $t0,$zero,end‬‬ ‫)‪sb $t0,0($s1‬‬ ‫‪addi $s2,$s2,1‬‬ ‫‪addi $s1,$s1,1‬‬ ‫‪j Loop2‬‬ ‫‪end:‬‬ ‫محتوى مجاني غير مخصص للبيع التجاري‬ ‫‪4‬‬ ‫‪/ITE.RBCs‬‬ ‫بنيان حاسوب| د‪.‬عبير م ّيا‬ ‫تمرين‪ :‬أعد الحل لنسخ عناصر مصفوفة أعداد صحيحة منتهية بالصفر‪:‬‬ ‫‪1..data‬‬ ‫ شكل آخر للحلقة‪:‬‬ ‫‪2. arr:.word 1, 2, 3,4, 0‬‬ ‫‪1. Loop2:‬‬ ‫‪3. sp:.space 20‬‬ ‫‪4..text‬‬ ‫)‪2. lw $t0,0($s2‬‬ ‫‪5. la $s2, arr‬‬ ‫‪3. beq $t0,$zero,end‬‬ ‫‪6. la $s1, sp‬‬ ‫)‪4. sw $t0,0($s1‬‬ ‫‪7. Loop:‬‬ ‫‪5. addi $s2,$s2,4‬‬ ‫)‪8. lw $t0,0($s2‬‬ ‫‪6. addi $s1,$s1,4‬‬ ‫)‪9. sw $t0,0($s1‬‬ ‫‪7. j Loop2‬‬ ‫‪10. addi $s2,$s2,4‬‬ ‫‪8. end:‬‬ ‫‪11. addi $s1,$s1,4‬‬ ‫‪12. bne $t0,$zero,Loop‬‬ ‫مالحظة‪:‬‬ ‫عندما تعاملنا مع المحارف في التمرين األول استخدمنا التعليمتين ‪ lb‬و ‪ sb‬وكنا‬ ‫نضيف ‪ 1‬في كل مرة ندخل في الحلقة ألننا نتعامل مع محرف ( ‪)1 byte‬‬ ‫لكن حين أردنا التعامل مع أعداد صحيحة في التمرين الثاني استخدمنا ‪ lw , sw‬وكنا‬ ‫نضيف ‪ 4‬في كل مرة ندخل في الـ ‪ loop‬ألن كل ‪ Integer‬تخزّن في ‪4 byte‬‬ ‫وظيفة‪ :‬ما هو عمل البرنامج التالي‪ ،‬وما هي القيمة الناتجة في ‪$v0‬عند انتهاء التنفيذ؟‬ ‫‪1. li $t0,1‬‬ ‫شرح خطوات البرنامج‪:‬‬ ‫‪2. li $t1,0‬‬ ‫‪.1‬شحن السجل ‪ t0‬بالقيمة ‪1‬‬ ‫‪3. loop:‬‬ ‫‪.2‬شحن السجل ‪ t1‬بالقيمة ‪0‬‬ ‫‪4. add $t1,$t0,$t1‬‬ ‫‪Loop.3‬‬ ‫‪.4‬جمع محتوى السجلين ‪ $t0‬و ‪ $t1‬وتخزين الناتج في السجل‬ ‫‪5. addi $t0,$t0,1‬‬ ‫‪$t1‬‬ ‫‪6. slti $t2,$t0, 7‬‬ ‫‪.5‬إضافة ‪ 1‬لمحتوى السجل ‪$t0‬‬ ‫‪7. bne $t2,$zero,loop‬‬ ‫‪.6‬التحقق فيما إذا كانت ‪ t0

Use Quizgecko on...
Browser
Browser