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

[ تمت الإجابة ]عمل المضروب بتعليمات الجمع كيف؟؟

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

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

علمت كيف اعمل المضروب

وطبقته ولكن المشكله تكمن اني اريد بدل استخدام تعليمة الضرب ان استخدم تعليمة الجمع

انا اعرف بالنسبه لعددين كيف احولهم لجمع لكن المضروب يصعب علي ذلك

فاتمنى ان تزودني بافكار تساعدني بعمل الكود

وشكرا

#2

عملية الضرب هي تكرار لعملية جمع.

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

#3

مشكور اخوي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! = 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

#5

صباح الخير

عذرا على الازعاج

الكود 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

#6

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

#7
برمجة حاسب كتب:
هذا بالنسبه للكود اللي فكرت فيه بس مايطبق بشكل صحيح

ليست لدي مكتبة irvine الآن، لكن أخبرني كيف لا يطبق بشكل صحيح فحسب قراءتي له وتصوري طريقة التنفيذ أعتقد أنه صحيح. ما الأخطاء التي تظهر لك؟

Do as I say, not as I do

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

#8

انا اذا ادخلت 3 يطلع 18 وهو المفترض 6

انا اذا ادخلت 4 يطلع 96 وهو المفترض 24

واذا ادخلت 2 يطلع 4

واذا ادخلت 1 لايظهر شيء ويوقف

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

#9

عذرا على الازعاج واعرف اني تعبتكم معاي

لكن محاولاتي باءت بالفشل اتمنى احد يساعدني

الله يوفقكم

#10

الشكر الشكر الجزيل جدا ل xacker جزاك الله الف خير :ty:

في ميزان حسناتك باذن الله

الحمدالله حليت المشكله

وعذرا على الازعاج

#11

السلام عليكم

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

في التنفيذ

مثل

832636217.jpg

يوقف واضغط ادخال

enter

المؤشر يظل مكانه

#12

:S

لا يوجد حساب عاملي للأعداد السالبة، والجواب هو نهاية عقدية! 2hgfd5t.png

تم تعديل هذه المشاركة بواسطة 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

#13

مشكور اخوي :) :ty:

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…