srai

srai

تجميع RISC-V مرجع

يغطي lyszt.net srai وتعليمات RISC-V الأخرى بمزيد من التفصيل.

تنسيق الترميز

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

الوصف

يقوم srai بإزاحة البتات إلى اليمين بمقدار ثابت وينسخ بت الإشارة إلى المواضع العلوية التي تم إخلاؤها، مما يُبقي الأعداد السالبة سالبة. وهو الصيغة ذات المقدار الثابت من sra، ولهذا يحافظ الحشو على الإشارة. الحرف i يعني فوري (immediate)، أي ثابت مُرمَّز في التعليمة.

تظهر صيغة srai أدناه، حيث amount ثابت بين 0 و31.

srai rd, rs1, amount

الإزاحة إلى اليمين بمقدار موضع واحد تُنصّف العدد وتُبقي الإشارة دون تغيير، لذا يقسم srai عددًا مُوقَّعًا على قوة للعدد اثنين. يقسم السطر التالي قيمة مُوقَّعة على 8، وذلك لكلٍّ من المدخلات الموجبة والسالبة.

srai t0, t0, 3

يُقرِّب srai نحو الأسفل، باتجاه القيمة الأكثر سلبية. إزاحة ‎-7‎ إلى اليمين بمقدار 1 تعطي ‎-4‎، بينما يعطي div بمقسوم عليه 2 القيمة ‎-3‎ لأنه يُقرِّب نحو الصفر. يتفق الاثنان على الأعداد غير السالبة وعلى القسمات التي لا يتبقى فيها باقٍ. ويختلفان بمقدار واحد فقط عندما يترك عدد سالب باقيًا. تحتاج أكواد الرسوميات والصوت والإشارات عمومًا إلى التقريب نحو الأسفل.

يُرمِّز دليل RISC-V الإزاحات الثابتة كتخصيص لصيغة النوع I، وهي أحد تخطيطات التعليمات القياسية. يشغل مقدار الإزاحة البتات الخمس السفلى من حقل القيمة الفورية، وتميّز البتة 30 من التعليمة بين الإزاحتين اليمينيتين. ينفّذ srai إزاحة يمينية حسابية، ويملأ بت الإشارة الأصلي البتات العلوية التي تم إخلاؤها.

من بين الإزاحات الأربع، يتعامل srai مع الأعداد المُوقَّعة التي تُقسَم، ويتعامل srli مع البتات الخام أو الأعداد التي لا تصبح سالبة أبدًا. أما الصيغتان بدون i، وهما sra وsrl، فتأخذان مسافة إزاحة تُحسَب أثناء تشغيل البرنامج.

مثال

li t0, -8
srai t1, t0, 1   # t1 = -4 (sign-filled)