slt

slt

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

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

الوصف

يقارن slt بين عددين ويخزّن النتيجة على هيئة 1 أو 0. يشير الاسم إلى set less than. يختبر النموذج أدناه ما إذا كان rs1 أصغر من rs2. إذا نجح الاختبار، تكتب التعليمة 1 في سجل الوجهة rd. وإذا فشل، تكتب 0.

slt rd, rs1, rs2

يمكن استخدام المقارنة بطريقتين. تقفز تعليمة تفريع بناءً عليها. وبدلاً من ذلك، يمكن تخزين الإجابة بنعم أو لا على هيئة رقم، 1 للصحيح و0 للخطأ، واستخدامها لاحقًا. يتولى slt عملية التخزين. تمثّل لغة التجميع الصحيح والخطأ بالقيمة المخزّنة 1 أو 0، ويمكن جمع هذه القيمة أو قناعتها أو دمجها مثل أي رقم آخر.

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

يصف دليل RISC-V كلاً من slt وsltu بأنهما المقارنتان المُوقّعة وغير المُوقّعة التي تكتبان 1 في rd إذا كان rs1 أصغر من rs2، و0 بخلاف ذلك. كما يستخدم slt في فحص التجاوز لجمع الأعداد المُوقّعة العام. بعد الجمع، يسجّل السطر الثاني أدناه ما إذا كان المعامل الثاني سالبًا، ويسجّل السطر الثالث ما إذا كان المجموع أصغر من المعامل الأول، ويقفز السطر الأخير عندما تختلف الإجابتان.

add t0, t1, t2
slti t3, t2, 0
slt t4, t0, t1
bne t3, t4, overflow

والمنطق هو أنه لا ينبغي أن يكون المجموع أصغر من أحد المعاملين إلا عندما يكون المعامل الآخر سالبًا.

لا توجد تعليمة set greater than. لاختبار ما إذا كان a أكبر من b، بدّل المعاملين واسأل ما إذا كان b أصغر من a. يقارن المثال بين 3 و9. بما أن 3 أصغر من 9، تُضبط t2 على 1.

مثال

li t0, 3
li t1, 9
slt t2, t0, t1   # t2 = 1