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

في حاجة إلى امثلة!

مغلقرائج
بدأه منسيه في 30 مايو 2004 · 51 رد · 5,045 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#51

السلام عليكم

الاخت منسيه لايمكن ضرب عددين بطريقة الشفت الى إذا كان احد هذين الرقمين من نوع اوس 2 , مثال على ذالك 2 و 4 و 8 و 16. كلها ارقام يمكن ان تكتب على شكل 2 مرفوعه لعدد صحيح (Integer) والنتيجه دائماً تكون عدد صحيح.

بنفس الطريقه يمكن قسمة عدد على عدد اخر بشرط ان يكون المقسوم عليه عدد من نوع اوس 2.

حاولت فهم ما يقوم به البرنامج لكن عجزت و بالمقابل استطيع ان ااكد انه لا يقوم بضرب عددين .

هناك طريقه للتحايل على البرسسر لجعله القيام بعملية الضرب لبعض الارقام الاخرى التى لا تخضع لنظام اوس 2 مثال على ذالك لو اردنا القيام بالتالى:

5*X يكننا وضع X فى مسجل eax ثم التالى:

mov eax,X
mov eax,[eax+eax*4]

طبعاً راح تقولو لى فى عملية ضرب, ولكن الكمبالير سيقوم بعملية optimization لذالك سيترجم علمية الضرب الى شفت مباشراً.

إسمحى لى يا اخت منسيه القيام ببعض التعديلات على الكود حتى يسهل فهمه:

mov  ecx,16
mov  bx,second;اقصد الرقم الثاني
mov dl,count

L: shr  bx,1
jnc skip
movzx  eax,First
shl  eax,dl
add  answer,eax
skip:  inc  dl
loop  L

كمى تلاحظين الكود اصبح اقل و إستخدم المسجلات اسرع من إستخدام الذاكره (variable).

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#52

شكرا اخي احمد

بس بغيت اوضح نقطه،انه وضعت ال mem علشان تفهمون للمقصود من البرنامج اكثر بس انه مستخدمه reg ;)

تم تعديل هذه المشاركة بواسطة منسيه في 19 يونيو 2004 في 00:02

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

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