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

[ تمت الإجابة ]كيفية حساب المعادلة ؟

بدأه إشراقة فجر في 24 أبريل 2010 · 11 رد · 1,701 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أنا مبتدئة بلغة الأسمبلي , وأحتاج مساعدة في حل السؤال التالي ..

أكتب برنامج يقوم بحساب المعادلة التالية :

(Rval = Xval + (Yval-Zval

و هذي محاولتي بس ما أدري إذا صح ولا لا ؟ ..

.data
Rval DWORD  ?
Xval DWORD  10
Yval DWORD  8
Zval DWORD  2
.code 
MOV EAX,Xval 
MOV EBX,Yval
SUB  EBX,Zval
ADD EAX,EBX
MOV Rval ,EAX

و شكراً جزيلاً .,

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

#2

صحيحة إن كانت معالجة الأرقام ستكون ضمن حدود DWORD

مثلاً:

Xval = 0xffffffff

Yval= 0x1

النتيجة ستكون 0x100000000 وهو أكبر من DWORD ، هنا تدخل الرايات في القضية وما يهمنا هنا هو CF "Carry Flag" (حالة الأعداد unsigned) و OF "Overflow Flag" (حالة الأعداد signed).

تعليمتي ADD و SUB .. ممم blind

لا تميزان بين حالة الأعداد signed/unsigned - فما تقومان به هو تنفيذ العملية وحفظ النتيجة ووضع بت في CF و OF في حالة كانت الأعداد unsigned و signed على الترتيب. أي أنهما يضعان البت لكلا الحالتين في الرايتين والباقي على الله

لا أعلم بالضبط ما درستموه وما هو مطلوب منكم فعلياً لكن هذه هي المعلومات بشكل عام.

بالتوفيق

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3
Xacker كتب:

صحيحة إن كانت معالجة الأرقام ستكون ضمن حدود DWORD

إذا لم يحدد نوع المتغيرات في السؤال فأضعها DWORD (هذا كلام دكتورنا ..) :wink: ,

عندي سؤال آخر ..

لو طلب مني حل نفس المعادلة .. لكن بدون كتابة تركيبة الضرب ؟ كيف يمكنني كتابة الكود ؟

فكرت في إستخدام TEXTEQU ؟  

مشكور أخوي Xacker .. والله يعطيك العافية :happy: ,

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

#4
إشراقــه فجــر كتب:

لو طلب مني حل نفس المعادلة .. لكن بدون كتابة تركيبة الضرب ؟ كيف يمكنني كتابة الكود ؟

عن أي تركيبة ضرب تتكلمين ؟

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5
Xacker كتب:

عن أي تركيبة ضرب تتكلمين ؟

أقصد تركيبة الجمع و الطرح ..

أحل حالياً سؤال آخر فيه تركيبة ضرب فتلخبطت :wacko: .. المعذرة ,

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

#6
إشراقــه فجــر كتب:

أقصد تركيبة الجمع و الطرح ..

أحل حالياً سؤال آخر فيه تركيبة ضرب فتلخبطت :wacko: .. المعذرة ,

هل تقصدين معالجة العمليات ما بين الأقواس أولاً ، وبدون أقواس ؟

بالنسبة للأسمبلي فلا يوجد تمييز بين الأقواس، باعتبار أننا نكتب الكود مباشرة فنحن المسؤولين عن تحديد العمليات التي يجب أن تتم أولاً.

وبما أن المعادلة كلها لا تتضمن سوى جمع وطرح فلا يوجد أفضلية لعملية على حساب الأخرى.. تستطيعين كتابة الكود والحصول على ذات النتيجة بإحدى الطرق التالية دون اختلاف في النتيجة

mov	eax,Xval
add	eax,Yval
sub	eax,Zval
mov	Rval,eax


mov	eax,Xval
mov	ebx,Yval
add	eax,ebx
mov	ebx,Zval
sub	eax,ebx
mov	Rval,eax


mov	eax,Xval
mov	ebx,Yval
add	eax,ebx
sub	eax,Zval
mov	Rval,eax
1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7

شكراً جزيلاً أخوي Xacker ..

اقتباس
هل تقصدين معالجة العمليات ما بين الأقواس أولاً ، وبدون أقواس ؟

لا , ما أقصد ..

اللي أقصده , ان الكود ما يكون فيه SUB أو ADD أو حتى MUL ..

كيف أكتب الكود ؟

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

#8
mov	eax,Xval	; eax = A
mov	ecx,eax		; ecx = A
mov	ebx,Yval	; ebx = B
;-
and	eax,ebx
shl	eax,1
xor	ecx,ebx
xor	eax,ecx
mov	Rval,eax

ما فوق هو عملية جمع رقمين.

أعرفها من دراستي لمادة Digital Systems وفيها كنا ندرس عن البوابات المنطقية وكيفية تشكيل half adder, full adder, multiplier, ...

بالنسبة لعملية الطرح لا يوجد في الأسمبلي أعداد سالبة، فما يمكن أن نقوم به هو استخدام المتمم الثنائي.

للحصول على المتمم الثنائي ننفذ عملية NOT مع الرقم ومن ثم نضيف 1 إليه. لكن لا يمكننا استخدام ADD مرة أخرى، بالتالي نقوم بتنفيذ ذات التعليمات الموجودة في الكود أعلاه (أي ضعيه في proc) وفي نهاية الأمر ننفذه للمرة الثالثة لنحصل على الجمع والطرح للأعداد الثلاثة.

بالتوفيق

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9

الله يعافيك ع المساعدة ,

لكن الدكتور يريد طريقة بدون إستخدام البوابات المنطقية ..

هل توجد ؟

و شكراً جزيلاً ..

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

#10
إشراقــه فجــر كتب:

الله يعافيك ع المساعدة ,

لكن الدكتور يريد طريقة بدون إستخدام البوابات المنطقية ..

هل توجد ؟

و شكراً جزيلاً ..

متى استخدمنا بوابات منطقية؟ :D

استخدام البوابات المنطقية موضوع آخر لا يخص قسم البرمجة بالأسمبلي.

هذه صورة لدارة full adder

550px-Full-adder.png

فيما ذكرته لك نستخدم bitwise operators كتعليمات مثل and, xor ..

فإن قال لك الدكتور بأنه لا يريدها أيضاً كـ bitwise operators فليسمح لي أن أرفع له قبعتي وأطلبي منه أن يمن علينا بتبيان طريقة أخرى لأني لا أعلم سوى هذه الطريقة!

بالتوفيق

تم تعديل هذه المشاركة بواسطة Xacker في 25 أبريل 2010 في 11:05

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#11
Xacker كتب:

متى استخدمنا بوابات منطقية؟ :D

استخدام البوابات المنطقية موضوع آخر لا يخص قسم البرمجة بالأسمبلي.

أنا درست البوابات المنطقية في مادة رياضيات الحاسب , و ما تطرقنا لها في الأسمبلي أبداً ,

وأنت قلت بوابات منطقية في ردك السابق , وبعد ما شفت الكود اللي وضعته أنت قلت يمكن هذي بوابات منطقية جديدة علي :D ,

كل اللي درسناه mov , add , mul , sub , و الريجسترات و أشياء بسيطة ..  وما درسنا and, xor

ع العموم , أنا مبتدئة وسامحني على الإطالة ..

Xacker كتب:

فإن قال لك الدكتور بأنه لا يريدها أيضاً كـ bitwise operators فليسمح لي أن أرفع له قبعتي وأطلبي منه أن يمن علينا بتبيان طريقة أخرى لأني لا أعلم سوى هذه الطريقة!

يقول فيه أكثر من طريقة :wacko: ..

شكراً جزيلاً يا Xacker على المساعدة .. بارك الله فيك ,

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

#12
إشراقــه فجــر كتب:

يقول فيه أكثر من طريقة :wacko: ..

قبعتي جاهزة متى ما أراد فليتفضل بزيارة المنتدى ;)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

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