add

add

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

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

الوصف

يجمع add القيمتين في سجلين ويخزّن النتيجة في سجل ثالث. السجل عبارة عن خانة صغيرة داخل المعالج تحمل عددًا واحدًا من 32 بت. يوفّر RISC-V ‏32 سجلًا. البت هو إما 0 أو 1، و32 بت تغطي الأعداد الصحيحة من 0 حتى نحو أربعة مليارات. تجري العمليات الحسابية بين السجلات ولا تلمس الذاكرة مباشرة أبدًا.

يكون add بالصيغة أدناه، والنتيجة هي rd = rs1 + rs2. ‏rd هو سجل الوجهة، حيث تذهب الإجابة. وrs1 وrs2 هما السجلان المصدران، وتبقى قيماهما كما هي.

add rd, rs1, rs2

يمكن أن يكون سجل الوجهة مصدرًا أيضًا. يضيف السطر أدناه t1 إلى t0 ويعيد النتيجة إلى t0. تستخدم المجاميع التراكمية في الحلقات هذه الصيغة.

add t0, t0, t1

يحمل السجل 32 بت على الأكثر. عندما يتجاوز المجموع أكبر قيمة يمكن للسجل حملها، يلتفّ الناتج إلى عدد صغير، تمامًا كما تعود ساعة بنظام 24 ساعة من 23:59 إلى 00:00. هذا هو الطفح، ولا يعطي RISC-V أي تحذير عند حدوثه.

ينص دليل RISC-V على أن أي تعليمة حسابية صحيحة لا ترفع استثناءً حسابيًا، وأن مجموعة التعليمات الأساسية لا تتضمن فحوصات الطفح لأن الفروع تتولى هذه المهمة بتكلفة منخفضة. بالنسبة للجمع غير المؤشّر، تكفي فرع واحد بعد add. في السطرين أدناه، يقفز الفرع إلى التسمية overflow عندما يكون المجموع أقل من أحد المعاملين، وهذا لا يحدث إلا إذا التفّ المجموع.

add t0, t1, t2
bltu t0, t1, overflow

في المثال، يستخدم السطران الأولان li (load immediate) لوضع الثابتين 3 و4 في t0 وt1. ثم يترك سطر add القيمة 7 في t2.

مثال

li t0, 3
li t1, 4
add t2, t0, t1   # t2 = 7