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

سؤال صغير

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

السلام عليكم

سؤال صغير

برنامج يقوم بضرب32 بت * 32 بت

كيف من الممكن عمل ذلك

هل من الممكن ان اقوم بتجزئة هذه البتات الى 16 او 8 بت

لقد حاولت به على النحو التالي

16 بت 16 بت

*

16 بت 16 بت

وضرب بالطريقة العادية للأرقام ، أرجو المساعدة ، وهل هنالك طريقة افضل ، وكيف من الممكن ان احول واعمل هذه الطريقة برمجيا ؟

برامج في ال C#

إذا اشتكى مسلم في الهند أرقني -- وإن بكى مسلم في الصين بكاني

ومصر ريحانتي والشام نرجستي -- وفي الجزيرة تاريخي و عنواني

وفي العراق أكف المجد ترفعني -- إلى بساتين عز ذات أفنانِ

أرى بخارى بلادي وهي نائية -- وأستريح إلى ذكرى خراسانِ

#2

السلام عليكم,

في عملية الضرب وخاصة إذا أردنا أرقاما كبيرة فقد نلجأ إما لإستعمال موقع للذاكرة لخزن النتيجة لأنها تفوق سعة الرجسترات أو نقوم بإضافة رجستر ما. فكما نعرف حين نريد مثلا ضرب عددين من 16 بت يمكن أن نستعمل التعليمة mul وهي تضرب ما يوجد في الرجستر ax بعدد مثلا يكون في الرجستر bx مثلا . وبما أن النتيجة قد يكون عددا أكبر من 16 بت فأن النتيجة ستكون في DX:AX وهنا تصل سعة النتيجة إلى 32 بت لأننا جمعنا رجستران من 16 بت.

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

ومثلا لو نريد أن أضرب الرجستر ax بالعدد 5 سأقوم بما يلي :

ax*5=ax*4+ax

وهنا تسهل الأمور مثلا نقوم بخزن قيمة ax الأصلية في رجستر معين مثلا bx أو في الستاك . والعملية الأولى ax*4 ليست إلا مرتين الضرب في 2 هذا يعني إزاحة الرجستر ax مرتين يسارا وبعد هذا نزيد له قيمة الرجستر ax الأصلية التي قد خزناها من قبل. ونعلم أيضا أن في عمليات الإزاحات عندنا المقدرة للتعرف إذا كان الرقم فاق سعة الرجستر - غالبا باستعمال carry flag - هنا يمكن أن نخزن كل ما يفوق في رجستر إضافي مثل dx كما تقوم به عملية mul أو في مكان في الذاكرة.

إلى اللقاء.

هذا الموضوع مغلق.

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