addi

addi

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

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

الوصف

يضيف addi ثابتًا إلى سجل. الاسم اختصار لـ add immediate. القيمة الفورية (immediate) هي قيمة ثابتة مكتوبة في التعليمة نفسها بدلًا من قراءتها من سجل. استخدمها عندما يكون أحد الرقمين ثابتًا عند كتابة البرنامج، مثل إضافة 1 إلى عدّاد.

يظهر شكل addi أدناه. يقرأ القيمة في سجل المصدر rs1، ويضيف الثابت imm، ويكتب النتيجة في سجل الوجهة rd.

addi rd, rs1, imm

يقرأ السطر التالي t0، ويضيف واحدًا، ويكتب النتيجة مرة أخرى، لذا t0 = t0 + 1.

addi t0, t0, 1

يشغل الثابت 12 بتة وهو مُوقَّع، ما يعطي نطاقًا من -2048 إلى 2047. يرفض المُجمِّع القيم الأكبر. للحصول على ثابت أكبر، حمّله أولًا في سجل باستخدام li. الثابت السالب يجعل addi يطرح أيضًا، ولهذا لا تملك RISC-V تعليمة طرح فوري منفصلة. يعدّ السطر التالي تنازليًا.

addi t0, t0, -1

يسمي دليل RISC-V الثابت قيمة فورية مُوسَّعة الإشارة من 12 بتة. ويذكر أن تجاوز السعة الحسابي يُتجاهل، لذا تحتفظ النتيجة فقط ببتاتها الدنيا XLEN، حيث XLEN هو عرض السجل بالبتات، وهو هنا 32. عندما تكون إشارة الثابت معروفة، يتحقق فرع واحد بعد الجمع من التجاوز المُوقَّع. يتعامل السطران أدناه مع الحالة الشائعة لإضافة ثابت موجب.

addi t0, t1, +imm
blt t0, t1, overflow

تستخدم البرامج addi للعدّادات، ولنقل مؤشر إلى العنصر التالي، ولحجز مساحة على المكدس. يضيف المثال 1 لتقدّم عدّاد ويضيف -16 لحجز 16 بايت من ذاكرة العمل، وهكذا تبدأ عادةً دالة تحتاج إلى مساحة عمل.

مثال

addi t0, t0, 1     # t0++
addi sp, sp, -16   # reserve 16 bytes of stack