السلام عليكم ورحمة الله وبركاته
علمت كيف اعمل المضروب
وطبقته ولكن المشكله تكمن اني اريد بدل استخدام تعليمة الضرب ان استخدم تعليمة الجمع
انا اعرف بالنسبه لعددين كيف احولهم لجمع لكن المضروب يصعب علي ذلك
فاتمنى ان تزودني بافكار تساعدني بعمل الكود
وشكرا
السلام عليكم ورحمة الله وبركاته
علمت كيف اعمل المضروب
وطبقته ولكن المشكله تكمن اني اريد بدل استخدام تعليمة الضرب ان استخدم تعليمة الجمع
انا اعرف بالنسبه لعددين كيف احولهم لجمع لكن المضروب يصعب علي ذلك
فاتمنى ان تزودني بافكار تساعدني بعمل الكود
وشكرا
عملية الضرب هي تكرار لعملية جمع.
3 × 2 هي جمع 3 مع نفسها مرتين.
5 × 10 هي جمع 5 مع نفسها 10 مرات.
xor ax,ax mov bx, 5 mov cx,10 @1: add ax,bx loop @1 ; عند الوصول هنا الناتج يكون في AX ; وهو مساوي لضرب 5×10
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
مشكور اخويxacker جزاك الله الف خير على المجهود
انا مشكلتي بالضبط ليس تحويل الضرب الى تعليمة الجمع بنسبه لعددين 3*5
انا المشكله لدي ان المضروب انا استخدم به الضرب وهذا طبقته لكن اريد بدل استخدام الضرب في المضروب انا استخدم تعليمة الجمع
لكن كيف ذلك
3!=3*2*1 كيف امثلها بالجمع بدل استخدام الضرب
4!=4*3*2*1
عندما فكرت انه لايناسب عمل نفس طريقة العددين
وعذرا على الازعاج
هذا بالنسبه للكود اللي فكرت فيه بس مايطبق بشكل صحيح
include irvine32.inc .data x dword ? v1 dword ? v2 dword ? n dword ? st1 byte 'the number : ',0 st2 byte 'the result fact : ',0 .code main proc far mov edx,offset st1 call writestring call readint call fact mov edx,offset st2 call writestring call writeint call crlf exit main endp fact PROC cmp eax,0 ;-------------------------------- mov x,eax mov edx,x mov n,edx mov ecx,n r2: dec n call dumpregs call crlf pr: add eax,n call dumpregs call crlf loop pr mov v2,eax mov ecx,v2 mov ebx,n cmp ebx,1 je pr2 jmp r2 call writedec ;mul ecx loop pr ;--------------------------- pr2: ret fact endp end main
تم تعديل هذه المشاركة بواسطة برمجة حاسب في 21 مايو 2009 في 13:06
نفس الفكرة
4! = 4 × 3 × 2 = (4 + 4 + 4) + (4 + 4 + 4)
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
صباح الخير
عذرا على الازعاج
الكود xor eax,eax ماهي فائدته
طيب بالنسبه للمضروب كيف راح يكون هالكود
mov bx, 5 لكن ماذا اخزن بهذه ؟؟
mov cx,10 راح اخزن فيه المتغير اللي ادخلته؟
include irvine32.inc .data v1 dword ? v2 dword ? .code main proc far call readint mov v1,eax;4 xor eax,eax mov ebx, v1 dec v1 mov ecx,v1 pr: add eax,ebx loop pr call writeint exit main endp end main
بالنسبة للي طبقته ماينفذ بشكل صحيح للمضروب
تم تعديل هذه المشاركة بواسطة برمجة حاسب في 21 مايو 2009 في 13:52
xor eax,eax
تنفذ عملية eXclusive-OR على المسجل EAX بالقيمة EAX
وكما تعلم في هذه العملية يكون
1 xor 1 = 0 0 xor 0 = 0
فبما أن القيمة ستتم بين EAX ومطابقه تماماً نقول أنها تقوم بتصفير المسجل EAX لأنها تنفذ بين بتات متقابلة متطابقة وبالتالي يكون الناتج صفر دوماً للبتات.
المثال في المشاركة الأخيرة لك الذي قمت بإرفاقه أنت لا يمثل طريقة لحل n!
لم أرى الكود في المشاركة السابقة يبدو أنك أضفته لاحقاً، سأطلع عليه الآن
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
برمجة حاسب كتب:هذا بالنسبه للكود اللي فكرت فيه بس مايطبق بشكل صحيح
ليست لدي مكتبة irvine الآن، لكن أخبرني كيف لا يطبق بشكل صحيح فحسب قراءتي له وتصوري طريقة التنفيذ أعتقد أنه صحيح. ما الأخطاء التي تظهر لك؟
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
انا اذا ادخلت 3 يطلع 18 وهو المفترض 6
انا اذا ادخلت 4 يطلع 96 وهو المفترض 24
واذا ادخلت 2 يطلع 4
واذا ادخلت 1 لايظهر شيء ويوقف
تم تعديل هذه المشاركة بواسطة برمجة حاسب في 21 مايو 2009 في 14:35
عذرا على الازعاج واعرف اني تعبتكم معاي
لكن محاولاتي باءت بالفشل اتمنى احد يساعدني
الله يوفقكم
الشكر الشكر الجزيل جدا ل xacker جزاك الله الف خير :ty:
في ميزان حسناتك باذن الله
الحمدالله حليت المشكله
وعذرا على الازعاج
السلام عليكم
fact PROC cmp eax,0 je pr2 mov v1,eax mov ecx,v1 mov eax,1 pr: Imul ecx loop pr jmp endprog pr2: mov eax,1 jmp endprog endprog: ret fact endp
لدي سؤال بالنسبة اذا ادخلت عدد موجب لاباس ينفذ
لكن اذا ادخلت عدد موجب لاينفذ او بالاصح يوقف البرنامج
طبعا انا استخدم شاشة الDOS
في التنفيذ
مثل
يوقف واضغط ادخال
enter
المؤشر يظل مكانه
:S
لا يوجد حساب عاملي للأعداد السالبة، والجواب هو نهاية عقدية! 
تم تعديل هذه المشاركة بواسطة Xacker في 24 مايو 2009 في 16:45
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
مشكور اخوي :) :ty:
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…