bge

bge

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

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

विवरण

bge blt के साथ जोड़ी बनाता है और उसकी शर्त को उलट देता है। अक्षर branch if greater than or equal के लिए हैं। जब rs1 कम से कम rs2 हो, तो नीचे दिया गया निर्देश लेबल वाली स्थिति पर कूद जाता है। अन्यथा निष्पादन अगले निर्देश के साथ जारी रहता है।

bge rs1, rs2, label

किसी भी दो मानों के लिए, blt और bge में से ठीक एक शाखा लेता है, इसलिए दोनों सभी स्थितियों को कवर करते हैं। तुलना blt के अंतर्गत वर्णित है, और सामान्य रूप से शाखाएँ beq के अंतर्गत।

bge आमतौर पर एक लूप के शीर्ष पर निकास परीक्षण के रूप में प्रकट होता है। नीचे दी गई पंक्ति लूप को छोड़ देती है जब काउंटर t1 अपनी सीमा t2 तक पहुँच जाता है।

bge t1, t2, done

लूप का मुख्य भाग इसके बाद आता है, और इसके अंत में एक बिना शर्त कूद शीर्ष पर वापस लौटती है। मुख्य भाग से पहले परीक्षण शून्य पुनरावृत्तियों को संभालता है, क्योंकि जिस मुख्य भाग की शर्त पहले से ही सत्य हो वह कभी नहीं चलता।

or equal वाला भाग सीमा पर व्यवहार तय करता है। bge तब शाखा लेता है जब दोनों मान बराबर हों, और लूप में off-by-one त्रुटियाँ आमतौर पर इसी सीमा तक वापस जाती हैं। एक लूप जो 0 से n तक गिनती करता है, तब बाहर निकलता है जब काउंटर n तक पहुँच जाता है।

RISC-V मैनुअल के अनुसार, bge और bgeu तब शाखा लेते हैं जब rs1, rs2 से बड़ा या बराबर हो, क्रमशः signed और unsigned मानों की तुलना करते हुए। एक शाखा ऑफ़सेट एक 12-बिट मान है जो 2 बाइट्स के गुणकों में मापा जाता है।

blt की तरह, तुलना signed है, इसलिए ऋणात्मक मानों की अनुमति है। bgeu unsigned रूप है, जिसका उपयोग पतों और आकारों के लिए किया जाता है। एक सामान्य उपयोग यह जाँचना है कि कोई मान गैर-ऋणात्मक है, जैसा कि नीचे दी गई पंक्ति में है।

bge t0, zero, ok

उदाहरण

bge t1, t2, done   # leave the loop once i >= n