البرمجة

كتابة كود MIPS لقراءة وتخزين مصفوفة كتابة كود MIPS لقراءة وتخزين مصفوفة

تعريف المشكلة:

لديك مشكلة في كتابة كود MIPS لقراءة حجم مصفوفة جديدة من المستخدم، ثم قراءة قيم العناصر من المستخدم لملئ هذه المصفوفة بالقيم، وبعد ذلك ترتيب القيم وطباعتها بالترتيب الذي تم إدخالها (مثل صف الانتظار FIFO). تبحث عن كود كامل يتم تنفيذه في MIPS دون استخدام أمور معقدة.

الحل:

فيما يلي كود MIPS يقوم بحل هذه المشكلة:

assembly
# تعريف المتغيرات .data array: .space 100 # المصفوفة التي ستحتوي على القيم المدخلة size_prompt: .asciiz "Enter the size of the array (up to 100): " value_prompt: .asciiz "Enter a value for element " newline: .asciiz "\n" .text .globl main main: # طباعة رسالة لطلب حجم المصفوفة من المستخدم li $v0, 4 la $a0, size_prompt syscall # قراءة حجم المصفوفة من المستخدم li $v0, 5 syscall move $t0, $v0 # تخزين حجم المصفوفة في $t0 # حلقة لقراءة القيم من المستخدم وتخزينها في المصفوفة la $t1, array # $t1 يحتوي على عنوان المصفوفة li $t2, 0 # متغير لتتبع الفهرس الحالي في المصفوفة loop: beq $t2, $t0, done # انتهاء الحلقة عندما يتساوى الفهرس الحالي مع حجم المصفوفة # طباعة رسالة لطلب قيمة للعنصر الحالي من المصفوفة li $v0, 4 la $a0, value_prompt syscall # قراءة قيمة العنصر الحالي من المستخدم li $v0, 5 syscall sw $v0, ($t1) # تخزين قيمة العنصر الحالي في المصفوفة addi $t1, $t1, 4 # تحريك $t1 ليشير إلى العنصر التالي في المصفوفة addi $t2, $t2, 1 # زيادة الفهرس الحالي للمصفوفة بمقدار واحد j loop done: # طباعة قيم المصفوفة بالترتيب الذي تم إدخالها li $t2, 0 # إعادة تهيئة المتغير ليتم استخدامه كفهرس li $v0, 4 la $a0, newline syscall print_loop: beq $t2, $t0, exit_print_loop # انتهاء الحلقة عندما يتساوى الفهرس الحالي مع حجم المصفوفة lw $a0, array($t2*4) # تحميل القيمة من المصفوفة بالفهرس الحالي li $v0, 1 syscall li $v0, 4 la $a0, newline syscall addi $t2, $t2, 1 # زيادة الفهرس الحالي للمصفوفة بمقدار واحد j print_loop exit_print_loop: # الخروج من البرنامج li $v0, 10 syscall

كيفية عمل الكود:

  1. يطلب البرنامج من المستخدم إدخال حجم المصفوفة.
  2. يطلب البرنامج من المستخدم إدخال قيم للعناصر في المصفوفة.
  3. يتم تخزين القيم التي تم إدخالها في المصفوفة.
  4. يتم طباعة القيم في المصفوفة بالترتيب الذي تم إدخالها.

ملاحظات:

  • يرجى التأكد من ترك مساحة كافية للمصفوفة باستخدام .space في الجزء .data.
  • تحتاج إلى استخدام الفهارس المناسبة للوصول إلى عناصر المصفوفة وطباعتها بالترتيب الصحيح.

المزيد من المعلومات

بالتأكيد! يتم استخدام التسلسل الزمني لتخزين القيم التي تم إدخالها بواسطة المستخدم في المصفوفة. عندما يُطلب من المستخدم إدخال حجم المصفوفة، يتم تخزين هذا الحجم في السجل $t0. ثم يتم استخدام حلقة لقراءة قيم العناصر وتخزينها في المصفوفة. تبدأ الحلقة من 0 وتستمر حتى n-1 حيث n هو حجم المصفوفة المدخل من المستخدم. قيمة العنصر الحالي المقروء تخزن في السجل $v0 وتتم عملية التخزين في المصفوفة باستخدام المؤشر $t1 الموجه إلى العنصر الحالي. في النهاية، يتم طباعة قيم المصفوفة بالترتيب الذي تم إدخالها باستخدام حلقة أخرى تبدأ من 0 وتستمر حتى n-1.

إليك الكود الكامل:

assembly
# تعريف المتغيرات .data array: .space 100 # المصفوفة التي ستحتوي على القيم المدخلة size_prompt: .asciiz "Enter the size of the array (up to 100): " value_prompt: .asciiz "Enter a value for element " newline: .asciiz "\n" .text .globl main main: # طباعة رسالة لطلب حجم المصفوفة من المستخدم li $v0, 4 la $a0, size_prompt syscall # قراءة حجم المصفوفة من المستخدم li $v0, 5 syscall move $t0, $v0 # تخزين حجم المصفوفة في $t0 # حلقة لقراءة القيم من المستخدم وتخزينها في المصفوفة la $t1, array # $t1 يحتوي على عنوان المصفوفة li $t2, 0 # متغير تستخدم للحفاظ على ترتيب العناصر read_loop: # طباعة رسالة لطلب قيمة العنصر الحالي من المستخدم li $v0, 4 la $a0, value_prompt syscall # قراءة قيمة العنصر الحالي من المستخدم li $v0, 5 syscall sw $v0, ($t1) # تخزين القيمة في المصفوفة addi $t1, $t1, 4 # تحريك المؤشر إلى العنصر التالي في المصفوفة addi $t2, $t2, 1 # زيادة المتغير المستخدم للتأكد من ترتيب العناصر blt $t2, $t0, read_loop # إعادة التكرار إذا لم تمتلئ المصفوفة بالقيم بعد # طباعة قيم المصفوفة بالترتيب الذي تم إدخالها la $t1, array # إعادة تهيئة المؤشر إلى بداية المصفوفة li $t2, 0 # متغير لتتبع ترتيب العناصر print_loop: lw $a0, ($t1) # تحميل قيمة العنصر الحالي للطباعة li $v0, 1 syscall # طباعة المسافة بين العناصر li $v0, 4 la $a0, newline syscall addi $t1, $t1, 4 # تحريك المؤشر إلى العنصر التالي في المصفوفة addi $t2, $t2, 1 # زيادة المتغير المستخدم للتأكد من ترتيب العناصر blt $t2, $t0, print_loop # إعادة التكرار إذا لم تمتطلق المصفوفة بالقيم بعد # الانتهاء من البرنامج li $v0, 10 syscall

يرجى ملاحظة أن هذا الكود يفترض أن الحجم الذي يدخله المستخدم لن يتجاوز 100. يمكنك تعديل المساحة المخصصة للمصفوفة (array: .space 100) والحد الأقصى للحجم (syscall للقراءة من المستخدم) وفقًا لاحتياجاتك.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!