mul
يغطي lyszt.net mul وتعليمات RISC-V الأخرى بمزيد من التفصيل.
تنسيق الترميز
الوصف
mul يضرب سجلين. يقرأ rs1 و rs2، ويضرب هاتين القيمتين، ويكتب الناتج في rd. الصيغة أدناه تعني rd = rs1 * rs2.
mul rd, rs1, rs2
يُنظَّم RISC-V في طبقات تُسمى الامتدادات. ينتمي الضرب والقسمة إلى الامتداد المسمى M، والذي يمكن لأصغر نواة RISC-V حذفه. يتضمنه هذا المحاكي، لأن اسمه الكامل RV32IM ينتهي بـ M، لذا فإن mul وdiv متاحان. المعالج الذي لا يملك M يجب أن يقوم بهذا العمل في البرمجيات.
قد يبلغ ناتج ضرب عددين 32-بت 64 بت، وهو ما يتجاوز ما يمكن لسجل واحد أن يحمله. يحتفظ mul بالـ 32 بت السفلية. بالنسبة للقيم الصغيرة يكون ذلك هو الجواب الكامل. تأتي الـ 32 بت العلوية من تعليمة منفصلة، mulh. تنتج المدخلات الموقّعة وغير الموقّعة نفس الـ 32 بت السفلية، لذا تغطي تعليمة واحدة كليهما.
عندما تكون هناك حاجة إلى نصفي الناتج، يوصي دليل RISC-V بزوج ثابت من التعليمات. توفّر تعليمة mulh (أو أحد متغيراتها غير الموقّعة) النصف العلوي، ويوفّر mul بنفس سجلات المصدر وبنفس الترتيب النصف السفلي. لا يمكن أن تكون وجهة النصف العلوي هي rs1 أو rs2. يمكن للمعالج بعد ذلك دمج التعلميتين في عملية ضرب واحدة.
يمكن استخدام الإزاحة اليسرى بدلاً من الضرب في قوة اثنين (2، 4، 8، 16 وهكذا). الإزاحة لليسار بمقدار 3 مواضع تضرب في 8، وتكلفة الإزاحة أقل من الضرب (انظر slli). يقوم المترجمون بهذا الاستبدال تلقائيًا. يضرب المثال 6 في 7 ويترك 42 في t2.
مثال
li t0, 6 li t1, 7 mul t2, t0, t1 # t2 = 42
