التجميع - الضرب بواسطة ثابت

يمكنك إجراء الضرب باستخدام إرشادات الوسائط المتعددة مثل imul و mul في رمز لغة التجميع ، مثل Mul name_register. يضاعف المعالج داخليًا رموز البرمجة عن طريق فصل معلمات الأحجام ، مثل eax و ax و al ، ثم يخزن النتيجة في eax أو ax كـ "منخفض" وينتج عن edx أو dx كـ "الأكثر أهمية" ، وتكون النتيجة يتم تعيين آخر تسجيل ، إذا كان المضاعف أكبر من بايت.

نظرًا لأن ملفات الوسائط المتعددة ضخمة في الذاكرة ، فقد تحتاج إلى تغيير القيم في eax ليتم ضربها في السجل ، ويجب أن تكون نتيجة التسجيل eax ، مع الكتابة فوق القيمة السابقة. ومع ذلك ، إذا كنت بحاجة إلى ضرب سجل من خلال ثابت ، ضع النتيجة في السجل ثم استخدم اختصارًا مع التعليمة "lea".

مقدمة قصيرة

لغات التجميع هي لغات منخفضة المستوى لأجهزة الكمبيوتر التي تم البرمجة وتم تطويرها لأول مرة في الخمسينيات. ومن المعروف أنها في الغالب لغات البرمجة الجيل الثاني. ميزة هامة في لغة التجميع ، هي أنها استبعدت الكثير من العمليات المعرضة للخطأ والمستهلكة للوقت المطلوبة في برمجة الجيل الأول.

الضرب في التجمع

في التجميع ، يمكنك ضرب رقمين باستخدام الإرشادات mul (الأرقام غير الموقعة) و Imul. يتم استخدامها على النحو التالي:

 اسم mul_registry 

يزيد المعالج من محتوى eax أو ax أو al (حسب حجم السجل ، والذي يتم تقديمه في المعلمات) ثم يخزن النتيجة في eax أو ax أو edx أو dx.

يعد استخدام mul أمرًا مزعجًا للغاية لأنك ستضطر إلى نقل القيمة المضروبة إلى eax ، ويجب أن تكون قيمة الضرب في سجل مختلف والسجل الذي يحمل النتيجة eax.

ومع ذلك ، إذا كنت ترغب فقط في ضرب سجل من خلال ثابت ووضع النتيجة في السجل الذي تختاره ، يمكنك استخدام اختصار مع التعليمة "lea" (تحميل العنوان الفعال). يستخدم هذا التعليمات لاسترداد عنوان البيانات في الذاكرة.

 lea destination_registry، [memory_address]؛ ضع memory_address في الوجهة_القسم 

الميزة الكبيرة لذلك هي أنه ، باستخدام ثابت ، لا تحتاج إلى استخدام عنوان ذاكرة إضافي. تخيل أنك تريد ضرب ecx في 7 وحفظ النتيجة في ebx ، سيكون الأمر:

 lea ebx ، [ecx * 7] 

ملاحظة: لا يمكنك ضرب سجلين معًا باستخدام هذا الاختصار.

المقال السابق المقالة القادمة

نصائح الأعلى