79204070

Date: 2024-11-19 15:41:38
Score: 1
Natty:
Report link

.data array: .word 10, 20, 30, 40, 50 # مصفوفة من الأعداد الصحيحة n: .word 5 # عدد العناصر في المصفوفة

.text .globl main

main: # تحميل عنوان المصفوفة وعدد العناصر la $a0, array # تحميل عنوان قاعدة المصفوفة في $a0 lw $a1, n # تحميل عدد العناصر في $a1

# إعداد المكدس للمعاملات
addi $sp, $sp, -8   # إنشاء مساحة على المكدس
sw $a0, 0($sp)      # دفع عنوان المصفوفة إلى المكدس
sw $a1, 4($sp)      # دفع عدد العناصر إلى المكدس

# استدعاء الروتين الفرعي LISTADD
jal LISTADD

# تنظيف المكدس بعد استدعاء الروتين الفرعي
addi $sp, $sp, 8

# إنهاء البرنامج
li $v0, 10          # تحميل رقم استدعاء إنهاء النظام
syscall

LISTADD: # إعداد إطار المكدس addi $sp, $sp, -8 # إنشاء مساحة لعنوان العودة والمجموع sw $ra, 4($sp) # حفظ عنوان العودة sw $zero, 0($sp) # تهيئة المجموع إلى 0

# الحصول على المعاملات من المكدس
lw $a0, 8($sp)      # تحميل عنوان المصفوفة (من المكدس الأصلي)
lw $a1, 12($sp)     # تحميل عدد العناصر (من المكدس الأصلي)

# تهيئة المجموع والعداد
move $t0, $zero     # $t0 = المجموع
move $t1, $zero     # $t1 = العداد

loop: bge $t1, $a1, end_loop # إذا كان العداد >= عدد العناصر، اخرج من الحلقة

lw $t2, 0($a0)          # تحميل العنصر الحالي
add $t0, $t0, $t2       # إضافة العنصر الحالي إلى المجموع
addi $a0, $a0, 4        # الانتقال إلى العنصر التالي
addi $t1, $t1, 1        # زيادة العداد
j loop                  # تكرار الحلقة

end_loop: beqz $a1, set_avg # إذا لم توجد عناصر، تخطى حساب المتوسط div $t0, $a1 # قسّم المجموع على عدد العناصر mflo $t3 # نقل الناتج (المتوسط) إلى $t3 j store_results # القفز إلى تخزين النتائج

set_avg: move $t3, $zero # تعيين المتوسط إلى 0 (حالة عدم وجود عناصر)

store_results: # استعادة المكدس والعودة lw $ra, 4($sp) # استعادة عنوان العودة lw $zero, 0($sp) # استعادة المجموع (غير مستخدم بعد) addi $sp, $sp, 8 # تنظيف المكدس jr $ra # العودة إلى المتصل

Reasons:
  • Long answer (-1):
  • Has code block (-0.5):
  • Unregistered user (0.5):
  • No latin characters (1):
  • Low reputation (1):
Posted by: user28379751