sra

sra

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

يغطي lyszt.net sra وتعليمات 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

الوصف

sra هو الإزاحة اليمنى الثانية، بجوار srl. الاسم اختصار لـ shift right arithmetic. الصيغة أدناه تُزيح rs1 يمينًا بمقدار ما يحمله rs2.

sra rd, rs1, rs2

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

يستخدم RISC-V نظامًا مُوقّعًا حيث تشير البتة العليا إلى الإشارة، ووجود 1 هناك يعني أن العدد سالب. يملأ srl الأعلى بالأصفار، مما يمحو علامة الإشارة ويحوّل عددًا سالبًا إلى عدد موجب كبير. يملأ sra الأعلى بنسخ من بتة الإشارة الموجودة، فيكون الملء 1s لعدد سالب و0s لعدد موجب. يحتفظ العدد بإشارته.

يقسم sra عددًا مُوقّعًا على قوة من اثنين. الإزاحة بمقدار 1 تنصّفه، والإزاحة بمقدار 3 تقسمه على 8، وتبقى الأعداد السالبة سالبة. تُقرّب النتيجة نحو الأسفل، أي نحو القيمة الأكثر سلبية، لذا فإن -7 مُزاحًا يمينًا بمقدار 1 يعطي -4 بينما تعطي تعليمة div القيمة -3. عادةً ما تقبل أكواد الرسوميات والصوت التقريب نحو الأسفل.

يضع دليل RISC-V مقدار الإزاحة في البتات الخمس السفلى من السجل rs2. تغطي خمس بتات المواضع من 0 إلى 31، لذا لا يكون لبقية بتات rs2 أي تأثير. يصف الدليل sra بأنها إزاحة يمنى حسابية، تنسخ بتة الإشارة الأصلية إلى البتات العلوية المُفرغة.

استخدم sra للأعداد المُوقّعة وsrl لأنماط البتات الخام أو الأعداد التي لا تكون سالبة أبدًا. وللحصول على مقدار ثابت، استخدم الصيغة الثابتة srai.

مثال

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