الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]استفسار عن لغة Mips

بدأه ذكريات الطفو في 12 ديسمبر 2009 · 12 رد · 2,748 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

انا اجد صعوبه في لغة MIPS

من ناحيه استخدام Matrices في عمليات الضرب multiplication

فارجو من يستطيع مساعدتي اعطائي فكره بسيطه لعمليه ضرب two matrices باستخدام لغة MIPS

حيث اعمل علي برنامج PCSpim simulator

ارجو المساعدة ولو بفكره

ولكم جزيل الشكر

تم تعديل هذه المشاركة بواسطة ذكريات الطفو في 12 ديسمبر 2009 في 21:42

#2

راجع الملف التالي ، ستجد الكود الخاص بـ Matrix Multiplication في آخر أربع شرائح :

http://faculty.kfupm.edu.sa/coe/mudawar/ics233/lectures/06-FloatingPoint.ppt

سبحان الله وبحمده ... سبحان الله العظيم

#3

السلام عليكم

يسلمو كتير علي هذا الملف لقد افادني كثيرا في فهم ايضا بعض الشغلات وخاصه floatingسوف اقوم بتجريب الكود واقوم بعرضه لاتاكد من صحه عملي

شكرا كثيرا علي المساعده

#4

مرحبا

لقد قمت بتجريب الكود ولكن لا يعطيني output حيث هناك خطاء ولا اعرف السبب حيث يشير الي هذه الجزئيه بالخطاء

ldc1 $f2, 0($t4) # $f2 = y[k]

ممكن اعرف التصحيح الخطاء وشو السبب وشو اعمل حتي يعطيني قيمه

واريد ان اعرف في هذا الكود هل انا اقوم بادخال عناصرmatrixes

وذا اردت ادخال العناصر هل سوف اقوم بالغاء for lop ام ستبقي كما هي

اريد ان اعرف التعديل الذي سوف يحدث عند ادخال العناصر الي اريدها

اذا سمحتم ارجو المساعده

ولكم جزيل الشكر

#5

مرحبا

شكلو انا وانت نحتاج نفس السؤال بماده العماره لحسام ... يعني راح ناخد اصفار في هذه المشروع اكيد افهمت الفكره الي بدي تصلك يا زعيم

لانو انا اعمل علي هذا الكود واحوال تصحيح اخطائه للحصول علي نتيجه

واتمني من الفريق العربي مساعدتي

في هذا الخطاء

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 19 ديسمبر 2009 في 21:11

#6

الكود يعمل بالضبط كما هو بدون أي تعديل ،

ملاحظة : يجب أن تضع حجم الصف في المصفوفة في $a0 ، وعنوان المصفوفة الأولى في $a1 و الثانية في $a2 ، والمصفوفة التي ستسقبل الناتج في $a1 . ومن الأفضل جعل الكود يعمل كـ Procedure

1

سبحان الله وبحمده ... سبحان الله العظيم

#7

لدي سؤال ، هل عناصر المصفوفة التي تستخدمها أرقام صحيحة أم أرقام عشرية ؟

لأن الكود الذي وضعته أنا يقوم بضرب مصفوفتين من الأرقام العشرية ( double-precision floating point numbers )..

1

سبحان الله وبحمده ... سبحان الله العظيم

#8

اريد ضرب مصفوفتين من الاعداد الصحيحه انا بدي ادخل المصفوفتين خلال الكود واقوم بضربهم ما بدي كود بكل مره اير المفوفتين لانها مش رادي يعطيني نتيجه ماذا افعل وما في داله تطبع

كيف بدي اخلي يطلع نتيجه علي الشاشه

اريد حل اذا ممكن

ولكم جزيل الشكر

#9

ضع الكود الذي تستخدمه هنا ، وحدد أين تكون المشكلة

بالمناسبة أنا أستخدم MIPS MARS وليس PCSpim

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 26 ديسمبر 2009 في 07:40

سبحان الله وبحمده ... سبحان الله العظيم

#10

نفس الكود بعد التعديل :

#===============================================================================
# Procedure Name: 	MatrixMultiplication
# Description:  multiplies two matrices by each other and stores the result in the output buffer
#
# Input:	    $a0 = size N of the ( N*N ) matrix
#				$a1 = address of the output matrix
#				$a2 = address of the first matrix 
#				$a3 = address of the second matrix 
#
#--------------------------------------
MatrixMultiplication:

mm:		addu  $t1, $0, $0	# $t1 = i = 0; for 1st loop
L1:		addu  $t2, $0, $0	# $t2 = j = 0; for 2nd loop
L2:		addu  $t3, $0, $0	# $t3 = k = 0; for 3rd loop
		subu $t0, $t0, $t0	# $t0 = sum = 0


L3:		multu $t1, $a0		# i*size(row) = i*n
		mflo  $t4			# $t4 = i*n
		addu  $t4, $t4, $t3	# $t4 = i*n + k
		sll   $t4, $t4, 2	# $t4 =(i*n + k)*4
		addu  $t4, $a2, $t4	# $t4 = address of y[k]
		lw  $t7, 0($t4)	# $t7 = y[k]


		multu $t3, $a0	# k*size(row) = k*n
		mflo  $t5	# $t5 = k*n
		addu  $t5, $t5, $t2	# $t5 = k*n + j
		sll   $t5, $t5, 2	# $t5 =(k*n + j)*4
		addu  $t5, $a3, $t5	# $t5 = address of z[k][j]
		lw  $t8, 0($t5)		# $t8 = z[k][j]


		mul $t9, $t7, $t8	# $t9 = y[k]*z[k][j]
		addu $t0, $t0, $t9	# $t0 = sum
		addiu $t3, $t3, 1	# k = k + 1	
		bne   $t3, $a0, L3	# loop back if (k != n)



		multu $t1, $a0	# i*size(row) = i*n
		mflo  $t6	# $t6 = i*n
		addu  $t6, $t6, $t2	# $t6 = i*n + j
		sll   $t6, $t6, 2	# $t6 =(i*n + j)*4
		addu  $t6, $a1, $t6	# $t6 = address of x[j]
		sw  $t0, 0($t6)	# x[j] = sum


		addiu $t2, $t2, 1	# j = j + 1	
		bne   $t2, $a0, L2	# loop L2 if (j != n)
		addiu $t1, $t1, 1	# i = i + 1	
		bne   $t1, $a0, L1	# loop L1 if (i != n)


	jr    $ra	# return

سبحان الله وبحمده ... سبحان الله العظيم

#11

مرحبا

وانا استخدم لعه mips ولكن اكتب الكود

علي هذا البرنامج PCSpim لقد قمت بتجريب الكود الذي عدلت عليه ولا يعطيني ايه اخطاء ولكن لا يعطي ناتج لا يعطي جواب امامي

هنا المشكله كيف استطيع ان اري ناتج امامي لا اعرف كيف اخرج الناتج

#12

أخي الكريم ، الكود الذي وضعته أنا يقوم بضرب مصفوفتين ويضع الناتج في مصفوفة ثالثة ولا يقوم بطباعتها على الشاشة .. يجب عليك كتابة كود آخر يقوم بعملية الطباعة ..

1

سبحان الله وبحمده ... سبحان الله العظيم

#13

السلام عليكم

شكرا كثيرا لمجهودك معي يا مبرمج احمد

وشكرا كتيررررررر علي المساعده

يعطيك العافيه

مواضيع مشابهة