blt

blt

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

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

الوصف

يقارن blt قيمتين ويتفرع عندما تكون القيمة الأولى أصغر. تختبر beq وbne التساوي بدلاً من ذلك. الاسم اختصار لـ branch if less than. يقفز النموذج أدناه إلى الموضع المُعنون عندما تكون rs1 أصغر من rs2، وإلا ينتقل إلى التعليمة التالية.

blt rs1, rs2, label

تشرح صفحة beq التفرعات والعناوين وكيفية عمل القفز.

تعامل المقارنة القيمتين كقيمتين مُوقَّعتين، لذا يمكن أن تكونا سالبتين. -1 أصغر من 0، وأي عدد سالب أصغر من أي عدد موجب. تستخدم المقارنات غير المُوقَّعة تعليمة منفصلة هي bltu، وتختلفان في أي قيمة تكون بتّها الأعلى مضبوطة.

تعتمد حلقات العد على blt. يكرر السطر أدناه طالما بقي العداد t0 أقل من حده t1.

blt t0, t1, loop

بمجرد أن يبلغ العداد الحد، لا يُتخذ التفرع وتنتهي الحلقة. تستخدم فحوص الحدود التعليمة نفسها لإبقاء قيمة تحت حد أقصى قبل أن يستخدمها البرنامج.

ينص دليل RISC-V على أن blt وbltu تتخذان التفرع عندما تكون rs1 أصغر من rs2، مع المقارنة المُوقَّعة وغير المُوقَّعة على التوالي. ويشير أيضًا إلى أنه يمكن توليف bgt وbgtu وble وbleu عبر عكس معاملات blt وbltu وbge وbgeu.

لا يوفر RISC-V تفرعًا إذا كان أكبر. لاختبار ما إذا كان a أكبر من b، اعكس المقارنة واختبر ما إذا كان b أصغر من a. يوفر المُجمِّع اختصار bgt الذي يبدّل المعاملات نيابة عنك.

مثال

li t0, 2
li t1, 5
blt t0, t1, done   # 2 < 5, so jump to 'done'