bgeu

bgeu

RISC-V असेंबली संदर्भ

lyszt.net bgeu और अन्य 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

विवरण

bgeu, bge का अहस्ताक्षरित संस्करण है और bltu का विपरीत है। नाम का अर्थ है शाखा यदि इससे बड़ा या बराबर हो, अहस्ताक्षरित। जब rs1 कम से कम rs2 हो, तो यह लेबल पर कूदता है, दोनों को गैर-ऋणात्मक संख्याओं के रूप में पढ़ा जाता है। तुलना के लिए bge देखें और अहस्ताक्षरित क्या बदलता है इसके लिए bltu देखें।

bgeu के साथ परिवार में छह शाखाएँ हैं। तीन प्रश्न हैं, बराबर, इससे कम और इससे बड़ा या बराबर, और अंतिम दो हस्ताक्षरित और अहस्ताक्षरित रूप में आते हैं। beq और bne समानता की जाँच करते हैं, blt और bge हस्ताक्षरित मानों की तुलना करते हैं, और bltu और bgeu अहस्ताक्षरित मानों की तुलना करते हैं। ये छह, इससे बड़ा और इससे कम या बराबर दिशाओं के लिए ऑपरेंड की अदला-बदली के साथ, प्रोग्राम की हर आवश्यक तुलना को कवर करते हैं।

bgeu उन मात्राओं पर सीमाओं के लिए उपयुक्त है जो ऋणात्मक नहीं हो सकतीं। उदाहरण हैं जब कोई स्थिति अंत तक पहुँच जाए तो लूप से बाहर निकलना, ऐसे इंडेक्स को अस्वीकार करना जो ऐरे आकार तक पहुँच गया हो और जब कोई लंबाई क्षमता तक पहुँच जाए तो हैंडलर पर शाखा करना। मेमोरी पते की तुलना bltu और bgeu का उपयोग करती है, क्योंकि पते अहस्ताक्षरित होते हैं, और हस्ताक्षरित संस्करण वहाँ गलत परिणाम देते हैं।

RISC-V मैनुअल कहता है कि हस्ताक्षरित ऐरे सीमाओं की जाँच एक ही अहस्ताक्षरित शाखा से की जा सकती है, क्योंकि कोई भी ऋणात्मक इंडेक्स किसी भी गैर-ऋणात्मक सीमा से बड़ा तुलना करता है। bgeu और bltu उस जाँच के दो रूप हैं।

नीचे दी गई पंक्ति संयुक्त सीमा जाँच को एक निर्देश में करती है।

bgeu i, n, error

यह बहुत बड़े या ऋणात्मक इंडेक्स को पकड़ता है, क्योंकि एक ऋणात्मक इंडेक्स एक विशाल अहस्ताक्षरित मान के रूप में पढ़ा जाता है और परीक्षण में विफल हो जाता है।

उदाहरण

li t0, -1
li t1, 1
bgeu t0, t1, done   # t0 read as unsigned is huge, so jump to 'done'