Practical-ComputerArchitecture1-Lec-4 أرشفة معدلة.pdf
Document Details
Uploaded by HeartwarmingJadeite9833
null
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