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

سؤال في كيفية ضرب الاعداد الكبيرة بلغة التجميع "الاسمبلي"!؟

بدأه زهور القمر في 15 أكتوبر 2012 · 2 رد · 2,078 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا اعزائي اعضاء الفريق العربي للبرمجة

طبعا ما طول عليكم بس ممكن مساعدة !!

كيف اقوم بعملية الضرب على الاعداد الكبيرة بلغة التجميع"الاسمبلي"؟؟؟

وللتوضيح مثلا :

1)اذا كان حجم العددين لايتجاوز (8bits)

فان عملية الضرب تكون هكذا

mov al,11

mov bl,33

mul bl

والناتج سيكون في السجل ax

2)اما اذا كان حجم العددين لا يتجاوز (16bits)

فان العملية تتم كالاتي

mov ax,1234

mov bx,ac32

mul bx

والناتج سيكون في السجلين dx:ax

لكن اذا كان العدد اكبر من (16 bits ) حينها ماذا افعل ......... رجاء افيدوني والله يجعلها في ميزان حسناتكم

ولنفرض ان العدد الاول=12345677

والعدد الثاني=ac31234f

واعلمو اني لم اطرح السؤال الا لضرورة ملحة لدي

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

mov eax, no1

mov ebx, no2

mul ebx

result in EDX:EAX

واخيرا انا في انتظار اجابتكم اتمنى ان اجد الجواب الشافي لديكم

#2

هل تذكر طريقة الضرب التى علمونا اياها فى المدارس؟

عندما تضرب رقم

21

x

25

عليك ان تعلمها بدورك الى الحاسوب! و لكن بطريقته الخاصة.

الطريقة الثانية تنفع فى حالة كنت تكتب برنامج تجميع للمعالج 386 فقط.

بالنسبة للمعالج 8086,

هذا مثال يمكن استخدامه :

MULTCND  DW  1234H
         DW  5677H
MULTPLR  DW  AC31H
         DW  234fH
PRODUCT  DW  0
	     0
	     0
	     0


MOV AX,MULTCND
MUL MULTPLR
MOV PRODUCT,AX
MOV PRODUCT+2,DX

MOV AX,MULTCND
MUL MULTPLR+2
ADD PRODUCT+2,AX
ADC PRODUCT+4,DX
ADC PRODUCT+6,00

MOV AX,MULCND+2
MUL MULTPLR
ADD PRODUCT+2,AX
ADC PRODUCT+4,DX
ADC PRODUCT+6,0

MOV AX,MULTCND+2
MUL MULTPLR+2
ADD PRODUCT+4,AX
ADC PRODUCT+6,DX

تم تعديل هذه المشاركة بواسطة فادى_بلس_بلس في 17 أكتوبر 2012 في 03:05

1
#3

شكرا اخي ع الاجابة فكرة جميلة ...

لكن انا قصدي ان اقوم بالضرب بصورة مباشرة .... يعني انا قلت للاستاذ فكرة اسناد الاعداد في مصفوفة او بعدها اقوم بضرب والجمع ومن ثم تنزيل الناتج واذا كان اكبرمن عشرة فاني اضع الباقي في سجل وبعد اتمام عملية الضرب ع العدد يلي بعده اقوم بجمعه معه لكنه ضحك او قال لا لا لا فكري اكثر اكو طرق اسهل.. يعني انا حرت كيف احل .. بالاخص ان المعالج يلي يتكلم عنه الاستاذ هو 8088 او 8086

شكرا مرة اخرى ع الاجابة تعبتك معاي اخي فادي

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

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

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

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

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