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 पृष्ठ शाखाओं, लेबलों, और कूद कैसे काम करती है, यह समझाता है।

तुलना दोनों मानों को signed मानती है, इसलिए वे ऋणात्मक हो सकते हैं। -1, 0 से छोटा है, और कोई भी ऋणात्मक संख्या किसी भी धनात्मक संख्या से छोटी होती है। unsigned तुलनाएँ एक अलग निर्देश, bltu, का उपयोग करती हैं, और दोनों किसी भी ऐसे मान पर असहमत होते हैं जिसका शीर्ष बिट सेट हो।

गणना करने वाले लूप blt पर निर्भर करते हैं। नीचे दी गई पंक्ति तब तक दोहराती है जब तक काउंटर t0 अपनी सीमा t1 से नीचे रहता है।

blt t0, t1, loop

एक बार काउंटर सीमा तक पहुँच जाता है, शाखा नहीं ली जाती और लूप समाप्त हो जाता है। सीमा जाँचें उसी निर्देश का उपयोग किसी मान को कार्यक्रम द्वारा उपयोग किए जाने से पहले अधिकतम से नीचे रखने के लिए करती हैं।

RISC-V मैनुअल निर्दिष्ट करता है कि blt और bltu तब शाखा लेते हैं जब rs1, rs2 से छोटा हो, क्रमशः signed और unsigned की तुलना करते हुए। यह यह भी नोट करता है कि bgt, bgtu, ble, और bleu को blt, bltu, bge, और bgeu के ऑपरेंड उलटकर संश्लेषित किया जा सकता है।

RISC-V greater के लिए कोई शाखा प्रदान नहीं करता। यह जाँचने के लिए कि a, b से बड़ा है या नहीं, तुलना उलटें और जाँचें कि b, a से छोटा है या नहीं। असेंबलर एक bgt शॉर्टहैंड प्रदान करता है जो आपके लिए ऑपरेंड बदल देता है।

उदाहरण

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